exporter

在prometheus的世界里70%的场景并不需要专门写埋点逻辑代码,因为已经有现成的各类exporter了,只要找到合适的exporter,启动exporter就直接暴露出一个符合prometheus规范的服务端点了。
exporter列表参见这里,另外官方git仓库里也有一些exporter。
举个栗子,在某个宿主机上运行node_exporter后,用浏览器访问http://${host_ip}:9100/metrics即可看到node_exporter暴露出的这个宿主机各类监控指标数据,然后在prometheus的配置文件里加入以下一段:

  1. scrape_configs:
  2. ......
  3. - job_name: 'node_monitor_demo'
  4. static_configs:
  5. - 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服务

  1. import (
  2. "flag"
  3. "log"
  4. "net/http"
  5. "github.com/prometheus/client_golang/prometheus/promhttp"
  6. )
  7. var addr = flag.String("listen-address", ":8080", "The address to listen on for HTTP requests.")
  8. func main() {
  9. flag.Parse()
  10. http.Handle("/metrics", promhttp.Handler())
  11. log.Fatal(http.ListenAndServe(*addr, nil))
  12. }

然后初始化metric对象(这里采用go-metrics库,方便不少)

  1. import (
  2. prometheussink "github.com/armon/go-metrics/prometheus"
  3. "github.com/armon/go-metrics"
  4. )
  5. sink, _ := prometheussink.NewPrometheusSink()
  6. metrics.NewGlobal(metrics.DefaultConfig("service-name"), sink)

最后在需要埋点的地方调用metrics的相应方法就可以了