37DATA

在tke的项目快速接入Prometheus

一、背景

主要是为了尝尝鲜,顺便理解一下接入的过程和原理。

二、接入的大致流程

1.创建一个页面路径/metrics,在此路径返回监控信息

2.初始化你的计数器

3.在代码里将你的计数器+1

三、我一开始的疑问

1.因为这个项目开了2个pod,是不是每个pod里面都要提供/metrics页面?

答:是的,系统会采集每个pod里面的/metrics数据,然后监控系统会自动汇总数据

2.因为教程上都是自己开了一个http服务来输出/metrics(创建了另外一个端口的服务),那我也要开多一个端口?

答:其实不需要,用回原来web服务的端口就行

3.我在main.go里面接入了/metric,那我在另外一个入口文件能调用到吗(例如在task.go文件)?

答:不行,只能在同一个入口文件里面调用,2个入口文件里面的数据是不会共享的。

4.prometheusAuto.NewCounterVec是不是每次+1的时候都要实例化一次?

答:只能实例化1次,不然会报错。

四、代码示例:

以下代码均基于gfast2.0框架后台开发

1.可以先简单地在入口文件main.go加上/metrics路由,你也可以写在router的路由配置那里

package main
import ( _ "gfast/boot" _ "gfast/router""github.com/gogf/gf/frame/g""github.com/gogf/gf/net/ghttp""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp")

func main() { s := g.Server() initPrometheusSetting(s) s.Run()}
//初始化prometheus监控配置func initPrometheusSetting(s *ghttp.Server) { prometheus.DefaultRegisterer = prometheus.WrapRegistererWithPrefix("yourPrefix_", prometheus.DefaultRegisterer) // 增加前缀 s.BindHandler("/metrics", func(r *ghttp.Request) { promhttp.InstrumentMetricHandler(prometheus.DefaultRegisterer, promhttp.HandlerFor(prometheus.DefaultGatherer, promhttp.HandlerOpts{})).ServeHTTP(r.Response.Writer, r.Request) })}

2.初始化计数器,并增加计数器数量

//新增监控指标

prometheusServer.Counters.Init().Counter1.WithLabelValues("我的监控标签1", "我的监控标签2", "我的监控标签3").Inc()

package server
import ( prometheusAuto "gfast/plugins/prometheus/auto""github.com/gogf/gf/frame/g""github.com/prometheus/client_golang/prometheus")
const appName = "YourAppName"const appNameTest = "testYourAppName"

type prometheusCounters struct { Counter1 *prometheus.CounterVec}
var Counters = new(prometheusCounters)//初始化监控指标func (c *prometheusCounters) Init() *prometheusCounters{ name := appNameif g.Cfg().GetString("environment.name") != "production" { name = appNameTest }if c.Counter1 == nil{// 累加器指标 c.Counter1 = prometheusAuto.NewCounterVec(prometheus.CounterOpts{ Name: "metric_counter_collection", Help: "采集类型备注:单调增计数器采集", ConstLabels: prometheus.Labels{"appName": name}, }, []string{"label1", "label2", "label3"}) //默认初始化3个标签 }return c}

3.访问页面/metrics,可以看到有数据了

Image

4.设置tke的采集端口,用回你自己那个http端口就行,他们会自动过来采集数据的了

[web]
web.metrics_port = 80

5.在监控看板那边,根据你的标签来配置图表,这部分不在这里讲解。

五、总结

其实接入比较简单,代码我也精简过,尽量最简单的方式来接入。