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