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的架构仍然分为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数据源

 

 

我们选一个追踪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

 

posted @ 2021-05-08 09:09  屌丝的IT  阅读(4318)  评论(0编辑  收藏  举报