使用prometheus | 豆包MarsCode AI 刷题

18 阅读3分钟

1,简介

Prometheus 是一个开源的监控系统和时间序列数据库,广泛用于微服务架构的监控。它通过拉取(pull)模型收集指标数据,并提供强大的查询语言 PromQL,支持灵活的告警规则和数据可视化。

Kitex 框架内置了监控能力,但是本身不带任何监控打点,通过接口的方式进行扩展。所以cloudwego为框架提供了 Tracer 接口,用户可以根据需求实现该接口,并通过 WithTracer Option 来注入监控的具体实现。

详细步骤

1.拉取monitor-prometheus

首先我们拉取cloudwego提供的prometheus

go get github.com/kitex-contrib/monitor-prometheus

由于这个电商项目使用了两种框架 KitexHertz ,所以我们需要分别来进行处理

首先是 Kitex

Kitex 是字节跳动开源的 Go 微服务 RPC 框架,在项目中我们用它构建了用户(user),购买(payment),商品(product)等服务。

image.png

首先我们在conf配置文件中设置metrices_port,同时在conf.go中的结构体加入MetricsPort的映射

image.png

然后Hertz同理,这里就不放图了

接着我们在根目录创建一个common文件夹,在此文件夹下使用自己的监控配置方法

image.png

不要忘了在所有项目的go.mad中,使用我们写的common替代原有示例的包

image.png

就此大致环境就配置好了,只剩下具体实现了

首先是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()中,加入上面的代码,使监控初始化

image.png

接着,在服务初始化时,让监控服务能监控到这个项目。

同理:在infra中和客户端进行连接时也需要监控

image.png

到这里Kitex的监控就完成了

然后是Hertz的监控

Hertz [həːts] 是字节跳动开源的 Go 微服务 HTTP 框架,它完成了我们电商项目的前后端交互功能

image.png

  1. 设置度量地址

    • 检查MetricsAddress是否以冒号开头。
    • 如果是,获取本地IPv4地址并将其拼接到MetricsAddress前面。
  2. 初始化度量指标

    • 调用mtl.InitMetric函数,传入服务名、度量地址和注册地址。
    • 返回Consul客户端和注册信息。
  3. 注册度量指标

    • 在函数结束时,调用consul.Register方法注册度量指标。

使用defer确保了在 main 函数结束之前,度量指标会被正确地注册到 Consul 中。

然后,在docker中使用

image.png

使用prometheus建立监控客户端,使用grafana来使用监控的界面

image.png