grafana tempo结合loki实现分布式追踪
Tempo简介
https://grafana.com/docs/tempo/latest/getting-started/
Grafana Tempo是一个开源、易于使用的大规模分布式跟踪后端.Tempo具有成本效益,仅需要对象存储即可运行,并且与Grafana,Prometheus和Loki深度集成.Tempo可以与任何开源跟踪协议一起使用,包括Jaeger、Zipkin和OpenTelemetry。它仅支持键/值查找,并且旨在与用于发现的日志和度量标准(示例性)协同工作.Tempo与Jaeger,Zipkin,OpenCensus和OpenTelemetry兼容.它以任何上述格式提取批处理,对其进行缓冲,然后将其写入GCS,S3或本地磁盘.因此,它强大、便宜且易于操作!
Tempo的架构
https://grafana.com/docs/tempo/latest/architecture/architecture/
可以看到Tempo的架构仍然分为distributor
、ingester
、querier
、tempo-query
、compactor
这几个架构,熟悉Loki和Cortex的朋友可能光看名字就知道他们大概是做什么的。不熟悉的同学也没关系,下面简单说下各模块的作用:
distributor
启动多个端口,分别接受来自Jaeger、Zipkin和OpenCensus协议的数据,按照TraceID进行哈希并映射到哈希环上,并交由ingester进行存储处理。当前distributor支持的trace协议如下:
ingester
具体负责trace数据的块存储(memcache、GCS、S3)、缓存(Memcache)和索引的处理
querier
负责从ingester和后端存储里面捞取trace数据,并提供api给查询者
compactor
负责后端存储块的压缩,减少数据块数量
tempo-query
tempo的一个可视化界面,用的jaeger query,可以在上面查询tempo的trace数据。
tempo 的部署
前提条件是安装好loki 相关的日志系统,具体安装不详细介绍了可以查看官方文档
https://grafana.com/docs/loki/latest/installation/
部署Tempo
https://github.com/grafana/tempo/
这里推荐用Helm 安装
https://github.com/grafana/tempo/tree/main/example/helm
线上环境还是推荐使用微服务模式
这边测试选择Single Binary
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm upgrade --install tempo grafana/tempo
kubectl create -f microservices-extras.yaml 测试用的一个实例,不安装也可以,一会我们用loki 测试追踪也是可以的
安装好以后终端就可以测试
在grafana 配置tempo数据源
我们选一个追踪ID 测试
因为测试实例安装了ingress 所以我们也可以在节点用curl 测试
接下来配合loki来实现跟踪traceid
创建派生字段,派生字段可用于从日志消息中提取新字段并根据其值创建链接
https://grafana.com/docs/grafana/next/datasources/loki/
为了后续能够使用loki产生traceid,需要设置为loki的环境变量
https://github.com/grafana/tempo/blob/main/example/docker-compose/docker-compose.loki.yaml 相关的参考文档,环境变量可以看这个文档
先随便查询几次以让loki产生数据,输入以下内容查询loki服务产生的包含traceID的数据。
接下来让我们来执行一个专门查询一些 trace ids 的查询,在操作的时候通常会使用 Loki 来搜索类似于查询路径或状态码之类的数据,这里我们只是简单演示,使用命令
{app="loki"}|="traceID"
可以看到TraceID字段后面的Tempo按钮,点击可以看到对应的trace信息
总结:
grafana tempo的诞生完善了grafana traceing体系,实现了grafana apm logging、tracing、metrics最后的一环,相对来说较便捷的集成到了grafana ui中,有点对标elk stack的意思,不过elk stack的链路追踪好像是付费功能。tempo其键值存储实现也决定了其功能的局限性,还不支持链路的完整展示,在查询时必须要先获得traceid才能进行查询,所以只能通过日志打印traceid,然后再根据traceid进行查询从而进行展示。
参考文档:
https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247486887&idx=1&sn=c4fc2e2fca7fd728396da157a2685082&chksm=fdb902bacace8bac7bb1dfd30a6daa5f0e966f75fcfd803b6aa19ea0d3ed827782008d240088&scene=126&sessionid=1603851143&key=0a19845a51c58415cd240b232fdd04332e6b87d96080be3650d92b518db23b3c47396e1de2245acef75ea5350895eaa122801b75d8e45b3db06b12a4b59f1fd354703244fcb1e5cfa3b11f0e145edff89ab42289dad17c25915fad5b217cb5258cae4219ef149043b1f793a3b8ab8b19948c4bf5853b8d90ee7b74abea6fe3c7&ascene=1&uin=NjkxMzI3MDAw&devicetype=Windows+10+x64&version=63000039&lang=zh_CN&exportkey=A9EggG6JhOqvjsTz5omWxTI%3D&pass_ticket=mKBweVAFm3VIfjfW3vHGx99RSQ9z40gM4aXAC0uZdJgZgnCScBVtKpE2565trYIK&wx_header=0
https://blog.csdn.net/weixin_49366475/article/details/109462989
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步