Go应用集成Prometheus监控需暴露/metrics端点并注册指标,Prometheus拉取数据,告警由Alertmanager处理;自定义指标须早期注册,配置需确保路径、目标和规则一致。

在 Go 应用中集成 Prometheus 监控,核心是暴露符合规范的指标端点,并让 Prometheus 主动拉取。报警则由独立的 Alertmanager 配合 Prometheus 的告警规则实现,Go 本身不直接处理报警逻辑。
1. 在 Go 应用中暴露 Prometheus 指标端点
使用官方客户端库 prometheus/client_golang,最简方式是注册默认指标并启动 HTTP 服务:
- 导入包:
import "github.com/prometheus/client_golang/prometheus/promhttp" - 在 main 函数中添加路由,例如用 net/http:
http.Handle("/metrics", promhttp.Handler()) - 启动服务:
http.ListenAndServe(":8080", nil)
这样访问 http://localhost:8080/metrics 就能看到基础运行时指标(如 Go goroutines 数、内存分配等)。
2. 自定义业务指标(计数器、直方图、仪表盘)
按需定义指标变量并注册到默认注册器:
立即学习“go语言免费学习笔记(深入)”;
- 计数器(Counter)适合累计值,如请求总数:
httpRequestsTotal := prometheus.NewCounterVec(prometheus.CounterOpts{Name: "http_requests_total", Help: "Total HTTP Requests"}, []string{"method", "status"}) - 直方图(Histogram)统计请求耗时分布:
httpRequestDuration := prometheus.NewHistogramVec(prometheus.HistogramOpts{Name: "http_request_duration_seconds", Help: "HTTP request duration in seconds"}, []string{"handler"}) - 注册后,在 handler 中调用
.WithLabelValues("GET", "200").Inc()或.WithLabelValues("api").Observe(latency)
注意:所有自定义指标必须在程序启动早期注册,否则采集不到。
3. 配置 Prometheus 抓取 Go 应用指标
修改 Prometheus 配置文件 prometheus.yml,添加 job:
- 指定目标地址,如:
static_configs: - targets: ["your-go-app:8080"] - 可加标签便于分组:
labels: app: "user-service" - 重启 Prometheus 或热重载配置(
curl -X POST http://localhost:9090/-/reload)
之后在 Prometheus Web UI 的 Targets 页面确认状态为 UP,Graph 页面输入 http_requests_total 即可查数据。
4. 设置报警规则并接入 Alertmanager
Prometheus 不直接发通知,而是把告警推给 Alertmanager:
- 在
prometheus.yml中配置 rule_files 和 alerting(指向规则文件路径) - 新建
alerts.yml,写规则,例如:IF http_requests_total{job="user-service"} - 配置 Alertmanager 的接收器(email、Slack、Webhook 等),并在 Prometheus 中关联它
- 启动 Alertmanager 并在 Prometheus 配置中指向它:
alerting: alertmanagers: - static_configs: - targets: ["localhost:9093"]
规则触发后,Alertmanager 负责去重、分组、静默和通知发送。
基本上就这些。Go 侧只管暴露指标,其余交给 Prometheus 生态。不复杂但容易忽略注册时机和路径一致性。










