前言
一直以来都想知道现在「Go服务监控」是如何搭建和工作的,于是最近就抽了点时间去学习下这服务监控的搭建过程。
我选用的技术栈是「prometheus + grafana」。
架构简介
整体的简易架构如下:
Grafana:作为UI,提供了丰富的监控面板。
Prometheus:Prometheus是一个监控&时序数据库。
需要被监控的服务:需要被监控的服务按照标准提供一个
metrics
接口,Prometheus会去通过暴露的这个接口拉取数据。Go已经有封装好的包github.com/prometheus/client_golang/prometheus
,我们直接采用就可以了。
准备镜像
选取Prometheus镜像,如下:
docker pull bitnami/prometheus:2.26.0
docker run -d -p 9090:9090 bitnami/prometheus:2.26.0
选取Grafana镜像,如下:
docker pull bitnami/grafana:7.5.4
docker run -d -p 3000:3000 bitnami/grafana:7.5.4
Go服务demo代码镜像:
首先我们选用现有封装好的代码包,如下:
// 选用现有的prometheus包
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promauto
go get github.com/prometheus/client_golang/prometheus/promhttp
demo代码如下:
package main
import (
"net/http"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
func main() {
// 对外提供/metrics接口
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":2112", nil)
}
启动Go服务,curl请求接口:
curl http://localhost:2112/metrics
获取到监控指标数据如下:
# HELP go_gc_