1,简介
Prometheus 是一个开源的监控系统和时间序列数据库,广泛用于微服务架构的监控。它通过拉取(pull)模型收集指标数据,并提供强大的查询语言 PromQL,支持灵活的告警规则和数据可视化。
Kitex 框架内置了监控能力,但是本身不带任何监控打点,通过接口的方式进行扩展。所以cloudwego为框架提供了 Tracer
接口,用户可以根据需求实现该接口,并通过 WithTracer
Option 来注入监控的具体实现。
详细步骤
1.拉取monitor-prometheus
首先我们拉取cloudwego提供的prometheus
go get github.com/kitex-contrib/monitor-prometheus
由于这个电商项目使用了两种框架 Kitex 和 Hertz ,所以我们需要分别来进行处理
首先是 Kitex
Kitex 是字节跳动开源的 Go 微服务 RPC 框架,在项目中我们用它构建了用户(user),购买(payment),商品(product)等服务。
首先我们在conf配置文件中设置metrices_port,同时在conf.go中的结构体加入MetricsPort的映射
然后Hertz同理,这里就不放图了
接着我们在根目录创建一个common文件夹,在此文件夹下使用自己的监控配置方法
不要忘了在所有项目的go.mad中,使用我们写的common替代原有示例的包
就此大致环境就配置好了,只剩下具体实现了
首先是Kitex框架构建的项目
MetricsAddress := conf.GetConf().Kitex.MetricsPort
// MetricsAddress := conf.GetConf().Kitex.MetricsPort
// 初始化MetricsAddress,获取配置文件中的Metrics端口信息
// 如果MetricsAddress以":"开头,表明需要动态获取本地IP地址
if strings.HasPrefix(MetricsAddress, ":") {
// 使用commonutils.MustGetLocalIPv4()函数获取本地IPv4地址
localIp := commonutils.MustGetLocalIPv4()
// 将本地IP地址与MetricsAddress拼接,以构造完整的Metrics地址
MetricsAddress = localIp + MetricsAddress
}
// 调用mtl.InitMetric函数初始化Metrics
// 参数分别为服务名称,Metrics地址和注册地址
mtl.InitMetric(ServiceName, MetricsAddress, RegistryAddr)
我们在项目的启动文件main.go中的Init()中,加入上面的代码,使监控初始化
接着,在服务初始化时,让监控服务能监控到这个项目。
同理:在infra中和客户端进行连接时也需要监控
到这里Kitex的监控就完成了
然后是Hertz的监控
Hertz [həːts] 是字节跳动开源的 Go 微服务 HTTP 框架,它完成了我们电商项目的前后端交互功能
-
设置度量地址:
- 检查
MetricsAddress
是否以冒号开头。 - 如果是,获取本地IPv4地址并将其拼接到
MetricsAddress
前面。
- 检查
-
初始化度量指标:
- 调用
mtl.InitMetric
函数,传入服务名、度量地址和注册地址。 - 返回Consul客户端和注册信息。
- 调用
-
注册度量指标:
- 在函数结束时,调用
consul.Register
方法注册度量指标。
- 在函数结束时,调用
使用defer
确保了在 main
函数结束之前,度量指标会被正确地注册到 Consul 中。
然后,在docker中使用
使用prometheus建立监控客户端,使用grafana来使用监控的界面