Go应用监控告警需三步:用prometheus/client_golang采集并暴露/metrics指标;接入OpenTelemetry实现分布式追踪;配置Prometheus+Alertmanager实现主动告警,并补充/healthz、/readyz健康检查。

在 Go 应用中实现监控告警,核心是三件事:采集指标、暴露接口、对接告警系统。不依赖复杂框架,用标准库 + Prometheus 生态就能快速落地。
用 Prometheus Client 暴露基础指标
Go 官方维护的 prometheus/client_golang 是最轻量可靠的选择。它支持 Counter、Gauge、Histogram 等常用类型,且天然兼容 Prometheus 抓取协议。
- 初始化注册器并暴露 HTTP 接口(如
/metrics) - 定义业务相关指标,比如请求总数、错误数、响应延迟
- 在关键路径中打点,例如 HTTP 中间件里记录状态码和耗时
示例片段:
http.Handle("/metrics", promhttp.Handler())
reqCounter := prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "http_requests_total",
Help: "Total number of HTTP requests",
},
[]string{"method", "status"},
)
prometheus.MustRegister(reqCounter)
// 在 handler 中调用 reqCounter.WithLabelValues(r.Method, strconv.Itoa(status)).Inc()
接入 OpenTelemetry 实现分布式追踪
单体指标不够?需要查清慢请求在哪一环?OpenTelemetry Go SDK 可自动注入 trace,并导出到 Jaeger、Zipkin 或 Prometheus 的 otel collector。
立即学习“go语言免费学习笔记(深入)”;
- 使用
otelhttp.NewHandler包裹 HTTP handler,自动记录入参、耗时、状态码 - 配置 exporter 指向本地或远程 collector(如通过 OTLP 协议)
- 结合 metrics + traces,能快速定位是 DB 延迟高、还是下游服务超时
配置 Prometheus + Alertmanager 主动告警
光有指标没用,得让异常“说话”。Prometheus 负责定时拉取、计算规则;Alertmanager 负责去重、分组、通知渠道(邮件、钉钉、Webhook)。
- 在 Prometheus 配置中添加你的 Go 服务地址(
scrape_configs) - 写 alert rule,例如:
1xx_requests_total / sum by(job)(rate(http_requests_total[5m])) > 0.05表示错误率超 5% - Alertmanager 配置接收人和静默策略,避免半夜被误报打扰
加一层健康检查与自检逻辑
有些问题指标难覆盖,比如数据库连接池耗尽、磁盘快满、配置热更新失败。这时需主动探测 + 上报。
- 提供
/healthz和/readyz接口,返回结构化 JSON(含 DB 连通性、缓存连通性等子项) - 在
/metrics中暴露自定义 Gauge,如app_config_last_reload_timestamp_seconds - 定期执行轻量级校验(如 ping Redis、检查文件权限),失败时触发日志 + 上报指标










