与Tempo集成
介绍
Grafana Loki和Tempo是云原生可观测性栈中的两个关键组件:Loki专注于日志聚合,而Tempo是分布式追踪系统。通过将它们集成,您可以实现日志与追踪数据的关联,帮助开发团队快速定位问题根源。例如,当发现某个服务出现错误时,可以直接从日志跳转到相关请求的完整调用链。
为什么需要集成?
- 上下文关联:通过TraceID将日志条目与调用链关联
- 效率提升:减少在多个工具间切换的时间
- 完整视图:获得请求的完整生命周期视图
前置条件
在开始之前,请确保:
- 已安装并运行Loki和Tempo
- 两者使用相同的Grafana实例
- 应用已配置同时生成日志和追踪数据
基础配置
1. Loki配置修改
在Loki的配置文件(通常为loki-config.yaml
)中添加Tempo的详细信息:
tracing:
enabled: true
host: tempo.monitoring.svc.cluster.local
port: 4317
sampling_fraction: 1.0
关键参数说明:
sampling_fraction
: 设置采样率(1.0表示100%采样)
2. 应用端配置
确保您的应用在日志中输出TraceID。以下是Go语言的示例:
import (
"go.opentelemetry.io/otel/trace"
"log"
)
func handler() {
span := trace.SpanFromContext(ctx)
log.Printf("Processing request (traceID=%s)", span.SpanContext().TraceID())
}
对应的日志输出示例:
2023-01-01T12:00:00Z INFO Processing request (traceID=4bf92f3577b34da6a3ce929d0e0e4736)