本篇文章讲解 Sleuth 如何使用 Elasticsearch、Logstash、Kibana 分析追踪数据。
使用 ELK 分析追踪数据
ELK 是 elastic 公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是 Elasticsearch、Logstash 和 Kibana。

Elasticsearch 简称 ES:实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。 Logstash:具有实时传输能力的数据收集引擎,将各种各样的数据进行收集、解析,并发送给 ES。使用 Ruby 语言编写。 Kibana:为 Elasticsearch 提供了分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度表格、图形。 Beats:一组轻量级采集程序的统称,使用 Go 语言编写。以下是 elastic 官方支持的 5 种 beats,事实上,伟大的开源力量早已创造出大大小小几十甚至上百种 beats,只有你没想到的,没有 beats 做不到的: Filebeat:进行文件和目录采集,主要用于收集日志数据。 Winlogbeat:专门针对 Windows 的 event log 进行的数据采集。 Metricbeat:进行指标采集,指标可以是系统的,也可以是众多中间件产品的,主要用于监控系统和软件的性能。 Packetbeat:通过网络抓包、协议分析,对一些请求响应式的系统通信进行监控和数据收集,可以收集到很多常规方式无法收集到的信息。 Heartbeat:系统间连通性检测,比如 icmp,tcp,http 等系统的连通性监控。

环境准备
之前的课程中我们已经学习过 ELK 的详细使用,这里不再过多赘述,直接开启使用即可。
文中使用的 ELK 版本统一为 7.5.2。
本文使用的 Elasticsearch
集群地址为:192.168.10.101:9200
192.168.10.102:9200
192.168.10.103:9200
本文使用的 Logstash
的地址为:192.168.10.101:9250
本文使用的 Kibana
的地址为:192.168.10.101:5601
Logstash 运行时指定的配置文件 log-to-es.conf 内容如下:
# 数据入口
input {
tcp {
mode => "server"
host => "192.168.10.101"
port => 9250
}
}
# 处理数据
filter {
# 获取 @timestamp 的值并加上 8*60*60(北京时间比 logstash 中@timestamp 晚了 8 小时),然后赋值给变量 timestamp。
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
}
# 将 timestamp 值重新赋值给 @timestamp
ruby {
code => "event.set('@timestamp', event.get('timestamp'))"
}
# 删除变量 timestamp
mutate {
remove_field => ["timestamp"]
}
}
# 数据出口
output {
elasticsearch {
hosts => ["192.168.10.101:9200", "192.168.10.102:9200", "192.168.10.103:9200"]
index => "applog"
}
}复制
添加依赖
在需要进行链路追踪的项目中(服务网关、商品服务、订单服务)添加 logstash-logback-encoder
依赖。
<!-- logstash 编码依赖 -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.3</version>
</dependency>复制
日志配置
在需要进行链路追踪的项目中(服务网关、商品服务、订单服务)添加 logstash 输出 JSON 格式数据
。
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
...
<!-- 为 Logstash 输出 JSON 格式数据 -->
<appender name="LOGSTASH_PATTERN" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- 数据输出目的地 -->
<destination>192.168.10.101:9250</destination>
<!-- 日志输出编码 -->
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
{
"severity": "%level",
"service": "${springAppName:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"rest": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!-- 日志输出级别及方式 -->
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="LOGSTASH_PATTERN"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
...
</configuration>复制
查看索引库
重启项目后,访问:http://192.168.10.101:9100 可以看到已经创建好了 applog
索引库。

测试
访问:http://localhost:9000/order-service/order/1 查看索引库结果如下:

访问:http://192.168.10.101:5601/ Kibana 首页。

添加 applog 索引库。

不使用时间过滤器。

搜索 gateway 结果如下:

至此 Sleuth 链路追踪所有的知识点就讲解结束了。
微信扫描二维码(长按识别) 关注我的公众号
文章转载自哈喽沃德先生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
ElasticSearch基于Kibana导出应用数据
IT那活儿
22次阅读
2025-03-19 11:21:06
Elasticsearch 8.X 如何利用嵌入向量提升搜索能力?
铭毅天下Elasticsearch
18次阅读
2025-04-09 11:01:28
日志分析与实时监控:Elasticsearch 在 DevOps 中的核心作用
新智锦绣
16次阅读
2025-03-18 10:49:11
ES 整合 Kafka-构建实时数据处理服务
新智锦绣
7次阅读
2025-03-27 10:00:36
多个 Elasticsearch 集群要一起监控,怎么办?
铭毅天下Elasticsearch
5次阅读
2025-03-27 09:58:24