☰
Go 微服务可观测性:trace + metrics + logs 三件套联动
2026/9/27 19:57:54 网站建设 项目流程

Go 微服务可观测性:trace + metrics + logs 三件套联动

可观测性是"系统健康监控"的根本。本文讲清三大支柱 + 实际联动做法。

一、可观测性三件套

  • Metrics:定点采样,监控变化趋势
  • Logs:事件记录
  • Trace:请求链路追踪

三者结合 = 完整可观测性。

二、OTel 跨度

OTel span 包含:

  • trace_id
  • span_id
  • parent_span
  • attributes / events

三、Metrics 设计

维度例子类型
Counterhttp_requests_totalCounter
Gaugequeue_depthGauge
Histogramhttp_durationHistogram

四、Logs 结构化

slog.Info("user login","user_id",42,"ip","1.1.1.1")

五、关联起来

日志中带 trace_id:

slog.Info("user login","trace_id",trace.SpanFromContext(ctx).SpanContext().TraceID().String(),)

Grafana Loki 支持{trace_id="xxx"}查询。

六、Metrics 触发 Trace

ifrequestCount.MustGet()>threshold{capture.Trace:=true}

七、OTel + Prometheus

import("go.opentelemetry.io/otel/exporters/prometheus""go.opentelemetry.io/otel/sdk/metric")exp,_:=prometheus.New()meterProvider:=sdkmetric.NewMeterProvider(sdkmetric.WithReader(sdkmetric.NewPeriodicReader(exp)))otel.SetMeterProvider(meterProvider)

八、OpenTelemetry SDK 概览

模块作用
otelAPI
otel/sdkSDK
otel/exporters/jaegerJaeger export
otel/exporters/otlpOTLP grpc / http

九、JAEGER 后端

Jaeger collector + ES 后端:

collector:receivers:[otlp]processors:[batch]exporters:[jaeger,kafka]

十、Loki 收集日志

backend:lokilabels:[job,level,trace_id]

十一、Prometheus labels 与 cardinality

requestCount.WithLabelValues("GET","/users","200").Inc()

labels 不要过多,否则 cardinality 爆炸。

十二、Trace 与 Metrics 跨界

OTel 自动生成 R.E.D 指标:requests / errors / duration。

十三、企业实战:告警引擎

-alert:HighLatencyexpr:histogram_quantile(0.99,sum(rate(http_duration_seconds_bucket[5m])) by (le))>0.5labels:{severity:critical}

十四、踩坑清单

  1. trace_id 不打印就关联不上
  2. cardinality 高导致 TSDB 内存爆
  3. metric 名随版本乱改

十五、未来

  • eBPF 提供内核级 metrics
  • AI 监控自动归因

十六、总结与展望

三件套不是孤立。Logs 给"事件",Metrics 给"信号",Trace 给"链路"。协同才能构成完整可观测。

十七、参考文献

  • OpenTelemetry 文档
  • Grafana 文档

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询