链路追踪是分布式系统下的一个概念,它的目的就是要解决上面所提出的问题,也就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
在夜莺中,链路追踪是基于Jaeger
建立的数据源,本身并不对接任何agent的。
视频课程对这块讲的也不多,在第二讲说了一下,藏经阁也没有详细说,仅在数据查询中提了一下;
为方便大家了解我在这里科普一下,方便的大家可以跑起来观测。
夜莺的链路追踪能力,是基于 Jaeger 来实现的,在数据源管理页面配置好 Jaeger 数据源之后,即可展示在 Jaeger 存储的 Trace 信息,夜莺提供了两种查询 Trace 信息的方式,一种是通过 Service+Opertation+标签 筛选,一种是之前根据 Trace ID 来筛选。
夜莺接入数据,文章开头也说了直接接的Jaeger
的源,也就是Jaeger
完全可以跑,数据可以查;没有夜莺的干预都正常使用为前提;
首先跑起我们的Jaeger
;首先在服务器上解压Jaeger
的压缩包:jaeger-1.43.0-linux-amd64.tar.gz。
# tar zxf jaeger-1.43.0-linux-amd64.tar.gz
nohup ./jaeger-all-in-one &> jaeger.log &
启动后访问http://127.0.0.1:16686/
;看看正常不;注意换成自己的IP;
Jaeger
官网上说了很多端口:
实际并没有这么多,由我们需要就可以;
我这便是用的Java的项目做的测试;所以用了opentelemetry-javaagent.jar
;大家根据自己的实际情况;Opentelemetry支持很多的agent的,
此处使用springboot项目测试;需配置javaagent,由于Opentelemetry也是一个集大成者,所以相关配置需要多配置一点;
-javaagent:/opt/Monitor/opentelemetry/opentelemetry-javaagent.jar
-Dotel.service.name=ot-ide-ry
-Dotel.metrics.exporter=none
-Dotel.traces.exporter=jaeger
-Dotel.exporter.jaeger.endpoint=http://127.0.0.1:14250
重点说几点
Jaeger
所以需要调整** 关于opentelemetry 对 Jaeger exporter的介绍**
放一下连接:Jaeger exporter
The Jaeger exporter. This exporter uses gRPC for its communications protocol.
System property | Environment variable | Description |
---|---|---|
otel.traces.exporter=jaeger | OTEL_TRACES_EXPORTER=jaeger | Select the Jaeger exporter |
otel.exporter.jaeger.endpoint | OTEL_EXPORTER_JAEGER_ENDPOINT | The Jaeger gRPC endpoint to connect to. Default is http://localhost:14250. |
otel.exporter.jaeger.timeout | OTEL_EXPORTER_JAEGER_TIMEOUT | The maximum waiting time, in milliseconds, allowed to send each batch. Default is 10000. |
Java项目启动完成并上报数据后,我们就可以从Jaeger-UI
中看到数据了,确认好就可以配置夜莺了;
找到我们记得服务,选一个接口看看数据;
夜莺部分相对简单,找到我们的数据源;添加Jaeger
即可;
Jaeger
数据源配置界面:
配置好之后,在链路追踪-即时查询中就可以看到了;
点击链路也是可以看到耗时的;
本章将了夜莺添加链路追踪,大家都学会了吗?
注意事项:
Jaeger
;不是实现的Jaeger
的协议直接接收数据并存储;起初没理解,将应用上报数改为了夜莺的端口报错还在社区问了一下。疑问
这里看到夜莺的数据源方式接入比较好的可以接入原有的监控数据作为数据进行展示;非常的不错
告警这块是包含链路追踪的告警呢?❓❓❓
夜莺是否还有接入其他的数据源呢?❓❓❓
大家还有什么疑问可以去夜莺社区看一下,由什么疑问大佬会给你解答。