exporter
在prometheus的世界里70%的场景并不需要专门写埋点逻辑代码,因为已经有现成的各类exporter了,只要找到合适的exporter,启动exporter就直接暴露出一个符合prometheus规范的服务端点了。
exporter列表参见这里,另外官方git仓库里也有一些exporter。
举个栗子,在某个宿主机上运行node_exporter后,用浏览器访问http://${host_ip}:9100/metrics
即可看到node_exporter暴露出的这个宿主机各类监控指标数据,然后在prometheus的配置文件里加入以下一段:
scrape_configs:
......
- job_name: 'node_monitor_demo'
static_configs:
- targets: ['${host_ip}:9100']
然后在prometheus的web管理控制台里就可以查询到相应的监控指标了。在[http://127.0.0.1:9090/graph](http://127.0.0.1:9090/graph)
界面里输入go_memstats_alloc_bytes{instance="${host_ip}:9100"}
点击Execute
按钮即可。
自定义监控指标
如果不幸,你的监控指标很特殊,需要自己写埋点上报逻辑代码,也是比较简单的。已经有各个语言的Client Libraries了,照着示例写就可以了。
下面举一个go语言的示例。
https://github.com/prometheus/client_golang
首先创建一个http服务
import (
"flag"
"log"
"net/http"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var addr = flag.String("listen-address", ":8080", "The address to listen on for HTTP requests.")
func main() {
flag.Parse()
http.Handle("/metrics", promhttp.Handler())
log.Fatal(http.ListenAndServe(*addr, nil))
}
然后初始化metric对象(这里采用go-metrics库,方便不少)
import (
prometheussink "github.com/armon/go-metrics/prometheus"
"github.com/armon/go-metrics"
)
sink, _ := prometheussink.NewPrometheusSink()
metrics.NewGlobal(metrics.DefaultConfig("service-name"), sink)
最后在需要埋点的地方调用metrics的相应方法就可以了