概要
本文是《基于 ELK6.6 + Filebeat 的 Spring Cloud 日志收集》的续集(文末有链接),是在该篇文章的基础上进行的。
分布式环境下,我看查看一条日志,希望同时能看到与之相关的上下文关系,比如上一步是哪一个服务过来的,都有些什么参数。在ELK的基础上其实也能实现,就找对应时间前后很短时间内的日志,基本都是相关的,但还是得筛选,当日志的量越来越大,筛选就会变得越来越难。
本文会介绍作者当前正使用的一种方式,大概思路如下:
- 请求到达网关时,添加 traceId 到 Header 中
- 服务收到请求时,取出 traceId ,并生成一个 requestId ,然后把它们都加到 MDC(Logback中用于追踪记录日志的,后面会介绍) 中
- 服务在需要调用其他服务时,保证 traceId 添加到 Header 中。
- 配置 logback,将 MDC 中添加的两个键输出到 json 日志中。
- Kibana 中刷新对应的索引配置。
实现过程
处理网关
本人使用 Spring Cloud Gateway
在全局过滤器 GlobalFilter 中,添加 Header 信息:
@Bean
@Order(-1)
public GlobalFilter a() {
return (exchang