最近在编写Bla的时候,发现需要统计平均响应时间,CPU和内存之类的数据,在公司已经用过了metricbeat,感觉还好,但技术栈是Java的,而且内存要求太高了,所以只好换成Golang编写Prometheus做分析数据库。
Prometheus跟Golang官方标准库expvar是属于Pull的监控类型。需要服务器去拉取采集器上面的数据,因此,daemon类的程序(比如说server)最方便的地方就是直接bind一个接口暴露数据就可以了。
代码时间
go get github.com/prometheus/client_golang/prometheus
然后在自己的启动main.go里添加
func init() {
prometheus.MustRegister(httpRequestCount)
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8080", nil)
}
var (
httpRequestCount = prometheus.NewCounter(prometheus.CounterOpts{
Namespace: "http",
Subsystem: "request",
Name: "requests_count",
Help: "The total number of http request",
})
)
代码部分就完成了。
当你需要变更数值时,直接Inc()那个httpRequestCount就好了。
测试一下
curl http://localhost:8080/metrics
# HELP http_request_requests_count The total number of http request
# TYPE http_request_requests_count counter
http_request_requests_count 73
官方对于这些Namespace、Subsystem如何命名有详细的规定,具体的大家自己看就好了。
配置Prometheus
下载安装好Prometheus之后,将刚才我们暴露的metric接口配置进去
- job_name: "bla"
scrape_interval: "15s"
static_configs:
- targets: ['localhost:9200']
大功告成啦~~