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/

grafana tempo结合loki实现分布式追踪

 

 

可以看到Tempo的架构仍然分为distributoringesterqueriertempo-querycompactor这几个架构,熟悉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结合loki实现分布式追踪

在grafana 配置tempo数据源

grafana tempo结合loki实现分布式追踪

grafana tempo结合loki实现分布式追踪

 grafana tempo结合loki实现分布式追踪

 grafana tempo结合loki实现分布式追踪

我们选一个追踪ID 测试

grafana tempo结合loki实现分布式追踪

grafana tempo结合loki实现分布式追踪

 

因为测试实例安装了ingress 所以我们也可以在节点用curl 测试

 

 grafana tempo结合loki实现分布式追踪

 

 

 

 grafana tempo结合loki实现分布式追踪

grafana tempo结合loki实现分布式追踪

grafana tempo结合loki实现分布式追踪

 

grafana tempo结合loki实现分布式追踪

 

接下来配合loki来实现跟踪traceid  

创建派生字段,派生字段可用于从日志消息中提取新字段并根据其值创建链接

https://grafana.com/docs/grafana/next/datasources/loki/

grafana tempo结合loki实现分布式追踪

 

grafana tempo结合loki实现分布式追踪

 

 

 为了后续能够使用loki产生traceid,需要设置为loki的环境变量

 https://github.com/grafana/tempo/blob/main/example/docker-compose/docker-compose.loki.yaml 相关的参考文档,环境变量可以看这个文档

grafana tempo结合loki实现分布式追踪

 

 

先随便查询几次以让loki产生数据,输入以下内容查询loki服务产生的包含traceID的数据。

接下来让我们来执行一个专门查询一些 trace ids 的查询,在操作的时候通常会使用 Loki 来搜索类似于查询路径或状态码之类的数据,这里我们只是简单演示,使用命令

{app="loki"}|="traceID"

grafana tempo结合loki实现分布式追踪

 

 

 

grafana tempo结合loki实现分布式追踪

 

 

 

可以看到TraceID字段后面的Tempo按钮,点击可以看到对应的trace信息

grafana tempo结合loki实现分布式追踪

 

 

 

总结:

grafana tempo的诞生完善了grafana traceing体系,实现了grafana apm logging、tracing、metrics最后的一环,相对来说较便捷的集成到了grafana ui中,有点对标elk stack的意思,不过elk stack的链路追踪好像是付费功能。tempo其键值存储实现也决定了其功能的局限性,还不支持链路的完整展示,在查询时必须要先获得traceid才能进行查询,所以只能通过日志打印traceid,然后再根据traceid进行查询从而进行展示。

 

grafana tempo结合loki实现分布式追踪

 

 

 

参考文档:

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

 

相关文章: