Go应用监控告警需三步:用prometheus/client_golang采集并暴露/metrics指标;接入OpenTelemetry实现分布式追踪;配置Prometheus+Alertmanager实现主动告警,并补充/healthz、/readyz健康检查。
在 Go 应用中实现监控告警,核心是三
件事:采集指标、暴露接口、对接告警系统。不依赖复杂框架,用标准库 + Prometheus 生态就能快速落地。
Go 官方维护的 prometheus/client_golang 是最轻量可靠的选择。它支持 Counter、Gauge、Histogram 等常用类型,且天然兼容 Prometheus 抓取协议。
/metrics)示例片段:
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 Go SDK 可自动注入 trace,并导出到 Jaeger、Zipkin 或 Prometheus 的 otel collector。
otelhttp.NewHandler 包裹 HTTP handler,自动记录入参、耗时、状态码光有指标没用,得让异常“说话”。Prometheus 负责定时拉取、计算规则;Alertmanager 负责去重、分组、通知渠道(邮件、钉钉、Webhook)。
scrape_configs)1xx_requests_total / sum by(job)(rate(http_requests_total[5m])) > 0.05 表示错误率超 5%有些问题指标难覆盖,比如数据库连接池耗尽、磁盘快满、配置热更新失败。这时需主动探测 + 上报。
/healthz 和 /readyz 接口,返回结构化 JSON(含 DB 连通性、缓存连通性等子项)/metrics 中暴露自定义 Gauge,如 app_config_last_reload_timestamp_seconds