Opentelemetry-4-续1-链路与日志的关联
根据上一篇文章的内容,我们成功的观测到了java服务中的链路信息,可以轻松排查到问题,但是整体架构比较复杂,本篇将对日志架构进行优化,主要针对日志的接收方式进行调整,下面是上一篇文章的日志接收流程。

在这一套日志流程中,并没有涉及到opentelemetry,我们是通过promtail抓取的javaagent生成TraceID留下的结构体记录。

这些日志并不是业务日志,它拥有所有生成TraceID的记录,复制粘贴它携带的TraceID去Tempo搜索就能看到查询的接口链路。但该日志与业务日志本身没有关联,这样显然是有很多问题存在的:
- 大量的生成TraceID的日志,存储成本太高。
- TraceID与业务日志没有进行关联,使用上不方便。
- 没有接入opentelemetry,架构松散不易维护。
于是,在我们公司爬坑的过程中,将日志流转改为了如下流程:

在这套架构下,有哪些改变:
- 之前的架构,获取了业务日志、容器日志、TraceID日志,现在只存储业务日志。
- 之前是由页面获取接口,查询接口生成的TraceID,拿去Tempo查询链路,现在是日志关联TraceID,点击日志然后查询Tempo即可。
- 省略了promtail服务,通过javaagent抓取日志,与trace一同流转到opentelemetry。
- agent抓取的日志是json字符串格式,阅读不太方便,可通过grafana面板弥补一些。
接下来就来看看具体过程吧。
距离上次研究和测试opentelemetry已经有4个多月了,opentelemetry已经从0.60.0版本升级到了0.72.0,而我部署的方式也就是operator的版本也升级到了0.70.0,javaagent也从1.19升级到了1.23,可以看出这项技术目前还是处于高速发展的阶段。首先我将这些服务全部升级一遍,使用当前最新版本,过程省略,可以从上文中查找,大多都是根据官网提供的方式去做,过程中有些小坑,但也不麻烦就不列出了,下面来看配置文件。
opentelemetry配置文件
因为我用的operator,所以配置包含在部署文件里
|
|
在原来的基础上把pipeline的logging全部去掉了,其余不变。
javaagent配置
|
|
爬坑过程中,OTEL_LOGS_EXPORTER这个配置卡了我1个多小时,没有默认配置,必须要手动添加,opentelemetry才能收到业务日志。
效果如下
配置grafana的Fields,关联Tempo

查询日志


这些都是业务日志
点开带有traceID的日志

点击TraceID进行跳转

到这里就完成了
CloudNativeQingFeng