Go集成Prometheus需暴露/metrics端点并配置Prometheus抓取,用client_golang注册Counter、Gauge、Histogram等指标,再通过rule_files定义告警规则交由Alertmanager通知。

在 Go 语言中集成 Prometheus 主要分两步:暴露指标供 Prometheus 抓取,以及通过 Alertmanager 配合规则实现报警。核心是用 prometheus/client_golang 库注册和收集指标,再配置 Prometheus Server 定期拉取,最后定义告警规则触发通知。
暴露 HTTP 指标端点
最常用的方式是启动一个 HTTP 服务,将指标以文本格式暴露在 /metrics 路径下:
- 导入
github.com/prometheus/client_golang/prometheus/promhttp - 在主程序中注册自定义指标(如计数器、直方图、Gauge)
- 用
http.Handle("/metrics", promhttp.Handler())暴露端点 - 确保该端口(如
:2112)对 Prometheus Server 可访问
示例代码片段:
http.Handle("/metrics", promhttp.Handler())
go http.ListenAndServe(":2112", nil)定义和更新业务指标
根据监控目标选择合适指标类型:
立即学习“go语言免费学习笔记(深入)”;
-
Counter:只增不减,适合请求总数、错误总数(如
http_requests_total{method="POST",code="200"}) - Gauge:可增可减,适合当前活跃连接数、内存使用量
- Histogram:统计分布,如 HTTP 响应延迟(自动分桶并计算分位数)
- Summary:类似 Histogram,但客户端计算分位数(一般推荐 Histogram)
注册后,在业务逻辑中调用 .Inc()、.Observe(duration.Seconds()) 等方法更新值。
配置 Prometheus 抓取目标
在 Prometheus 的 prometheus.yml 中添加 job:
scrape_configs:
- job_name: 'my-go-service'
static_configs:
- targets: ['your-go-app-host:2112']重启 Prometheus 后,可在 Web UI 的 Status > Targets 查看是否健康,Graph 页面输入指标名查询数据。
设置告警规则和通知
告警不在 Go 程序中实现,而是由 Prometheus Server 加载规则文件,并将触发的告警转发给 Alertmanager:
- 编写
alert.rules.yml,例如当 5 分钟内错误率 > 1% 时告警 - 在
prometheus.yml中通过rule_files:加载规则 - 部署 Alertmanager,配置邮件、Webhook 或钉钉等通知渠道
- Prometheus 与 Alertmanager 通过
alerting.alertmanagers关联
一条简单规则示例:
- alert: HighErrorRate
expr: rate(http_requests_total{code=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.01
for: 2m
labels:
severity: warning
annotations:
summary: "High HTTP error rate"










