Spring Cloud Sleuth与ELK(日志分析系统)配合使用

在《Spring Cloud使用Sleuth在应用中进行日志跟踪》教程中的案例,我们已经实现了服务调用之间的链路追踪,但是这些日志是分散在各个机器上的,就算出现问题了,我们想快速定位,也得从各个机器把日志整合起来,再去查问题。

这个时候就需要引入日志分析系统了,比如 ELK,可以将多台服务器上的日志信息统一收集起来,在出问题的时候我们可以轻松根据 traceId 来搜索出对应的请求链路信息。

ELK 简介

ELK 由三个组件组成:

  • Elasticsearch 是个开源分布式搜索引擎,它的特点有分布式、零配置、自动发现、索引自动分片、索引副本机制、restful 风格接口、多数据源、自动搜索负载等。
  • Logstash 是一个完全开源的工具,它可以对日志进行收集、分析并存储以供以后使用。
  • kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供日志分析友好的 Web 界面,可以汇总、分析和搜索重要数据日志。

输出 JSON 格式日志

可以通过 logback 来输出 Json 格式的日志,让 Logstash 收集存储到 Elasticsearch 中,然后在 kibana 中查看。想要输入 Json 格式的数据需要加一个依赖,具体代码如下所示。

  1. <!-- 输出 Json 格式日志 -->
  2. <dependency>
  3. <groupId>net.logstash.logback</groupId>
  4. <artifactId>logstash-logback-encoder</artifactId>
  5. <version>5.2</version>
  6. </dependency>

然后创建一个 logback-spring.xml 文件。配置 logstash 需要收集的数据格式如下:

  1. <!-- Appender to log to file in a JSON format -->
  2. <appender name="logstash"
  3. class="ch.qos.logback.core.rolling.RollingFileAppender">
  4. <file>${LOG_FILE}.json</file>
  5. <rollingPolicy
  6. class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  7. <fileNamePattern>${LOG_FILE}.json.%d{yyyy-MM-dd}.gz</fileNamePattern>
  8. <maxHistory>7</maxHistory>
  9. </rollingPolicy>
  10. <encoder
  11. class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
  12. <providers>
  13. <timestamp>
  14. <timeZone>UTC</timeZone>
  15. </timestamp>
  16. <pattern>
  17. <pattern>
  18. {
  19. "severity": "%level",
  20. "service": "${springAppName:-}",
  21. "trace": "%X{X-B3-TraceId:-}",
  22. "span": "%X{X-B3-SpanId:-}",
  23. "parent": "%X{X-B3-ParentSpanId:-}",
  24. "exportable":
  25. "%X{X-Span-Export:-}",
  26. "pid": "${PID:-}",
  27. "thread": "%thread",
  28. "class": "%logger{40}",
  29. "rest": "%message"
  30. }
  31. </pattern>
  32. </pattern>
  33. </providers>
  34. </encoder>
  35. </appender>

集成好后就能在输出的日志目录中看到有一个以“.json”结尾的日志文件了,里面的数据格式是 Json 形式的,可以直接通过 Logstash 进行收集。

  1. {
  2. "@timestamp": "2019-11-30T01:48:32.221+00:00",
  3. "severity": "DEBUG",
  4. "service": "fsh-substitution",
  5. "trace": "41b5a575c26eeea1",
  6. "span": "41b5a575c26eeea1",
  7. "parent": "41b5a575c26eeea1",
  8. "exportable": "false",
  9. "pid": "12024",
  10. "thread": "hystrix-fsh-house-10",
  11. "class": "c.f.a.client.fsh.house.HouseRemoteClient",
  12. "rest": "[HouseRemoteClient#hosueInfo] <--- END HTTP (796-byte body)"
  13. }

日志收集存入 ElasticSearch 之后,就可以用 Kibana 进行展示。需要排查某个请求的问题时,直接根据 traceid 搜索,就可以把整个请求链路相关的日志信息查询出来。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧浩海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值