返回

Prometheus:让监控微服务简单易行

后端

Prometheus 介绍

Prometheus 是一款基于时序数据库的开源监控告警系统,基本原理是通过 HTTP 协议周期性抓取被监控服务的状态,任意服务只要提供对应的 HTTP 接口就可以。Prometheus 的主要功能包括:

  • 采集监控指标: Prometheus 可以通过 HTTP 协议周期性抓取被监控服务的状态,并将监控指标存储在时序数据库中。
  • 存储监控指标: Prometheus 使用时序数据库来存储监控指标,时序数据库可以将监控指标按时间顺序存储起来,并提供快速查询功能。
  • 可视化监控指标: Prometheus 提供了丰富的可视化工具,可以帮助您快速查看监控指标的变化情况。
  • 告警: Prometheus 可以根据监控指标的变化情况触发告警,并发送告警通知。

Go-Zero 集成 Prometheus

Go-Zero 是一个用于开发微服务的 Go 框架,它提供了丰富的功能,可以帮助您快速开发微服务。Go-Zero 集成了 Prometheus,您可以使用 Go-Zero 来轻松监控微服务。

要在 Go-Zero 中集成 Prometheus,您需要做的就是安装 Prometheus 客户端库,并在您的服务中注册 Prometheus 监控指标。

import (
	"github.com/prometheus/client_golang/prometheus"
	"github.com/tal-tech/go-zero/core/prometheus"
)

var (
	// 指标名称必须以go_开头
	metricRequestCount = prometheus.NewCounter(
		prometheus.CounterOpts{
			Name: "go_request_count",
			Help: "Number of requests",
		},
	)
	metricRequestLatency = prometheus.NewHistogram(
		prometheus.HistogramOpts{
			Name:    "go_request_latency",
			Help:    "Request latency in milliseconds",
			Buckets: []float64{0.1, 0.2, 0.5, 1, 2, 5, 10},
		},
	)
)

func main() {
	// 注册指标
	prometheus.Register(metricRequestCount)
	prometheus.Register(metricRequestLatency)

	// 启动HTTP服务
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		// 使用指标
		metricRequestCount.Inc()

		// 模拟请求耗时
		time.Sleep(time.Millisecond * 100)

		metricRequestLatency.Observe(float64(time.Since(r.Context().Value("start").(time.Time)).Milliseconds()))
	})
	http.ListenAndServe(":8080", nil)
}

上面代码中,我们首先导入了 Prometheus 客户端库和 Go-Zero 的 Prometheus 集成库。然后,我们创建了两个监控指标:metricRequestCountmetricRequestLatency。接下来,我们注册了这两个监控指标。最后,我们启动了 HTTP 服务,并在服务中使用这两个监控指标。

当您启动服务后,您可以使用 Prometheus 客户端工具来抓取服务的状态。您可以在 Prometheus 的 web UI 中查看监控指标的变化情况。

结语

Prometheus 是一个功能强大的监控告警系统,它可以帮助您轻松监控微服务。Go-Zero 集成了 Prometheus,您可以使用 Go-Zero 来轻松监控 Go-Zero 开发的微服务。