SpringBoot整合ELK和打印skywalking的TraceId到日志

logstash-logback-encoder文档
https://github.com/logstash/logstash-logback-encoder

pom.xml

<dependency>
	<groupId>net.logstash.logback</groupId>
	<artifactId>logstash-logback-encoder</artifactId>
	<version>6.6</version>
</dependency>

<!--打印skywalking的TraceId到日志-->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.3.0</version>
</dependency>

logback-spring.xml

<!-- ELK日志, 发送至 appender -->
<appender name="log-logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
	<!-- logstash地址和端口 -->
	<destination>ip:4560</destination>
	<!-- encoder必须配置,有多种可选 -->
	<encoder class="net.logstash.logback.encoder.LogstashEncoder">
		<!-- skywalking插件, log加tid -->
		<provider class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.logstash.TraceIdJsonProvider" />
	</encoder>
</appender>


<!-- root级别   INFO -->
<root level="INFO">
	<!-- 控制台输出 -->
	<appender-ref ref="log-console"/>
	<!-- logstash输出 -->
	<appender-ref ref="log-logstash"/>
</root>

kibana查看 

### SkyWalking 整合 ELK 的方案及教程 #### 背景说明 随着分布式系统的普及,应用可观测性成为现代软件架构中的核心需求之一。ELK(Elasticsearch、Logstash Kibana)作为日志管理的经典组合,在日志收集与分析领域占据重要地位[^2]。而 SkyWalking 是一种强大的 APM(Application Performance Management)工具,能够提供分布式链路追踪、服务拓扑图以及性能指标等功能[^3]。 尽管两者各自的功能已经非常强大,但在某些场景下,将它们结合起来可以实现更全面的应用监控能力。例如,通过整合 SkyWalking ELK,不仅可以获取详细的调用链数据,还可以进一步深入分析这些调用过程中产生的具体日志信息。 --- #### 技术栈概述 - **SkyWalking**: 提供分布式链路追踪服务治理功能。 - **ELK Stack**: - Elasticsearch: 存储索引日志数据。 - Logstash: 数据管道组件,用于处理来自不同源的日志。 - Kibana: 可视化界面,展示日志其他数据分析结果。 这种整合的目标是让 SkyWalking 中的上下文信息传递给 ELK 日志系统,从而形成闭环的数据流。 --- #### 实现步骤详解 ##### 1. 配置 SkyWalking OAP Server 输出日志至 Kafka 或其他消息队列 为了使 SkyWalking 的数据流入 ELK 系统,通常会借助中间的消息代理机制来完成这一过程。以下是配置方法: 在 `application.yml` 文件中启用 Kafka 插件并指定目标主题名称: ```yaml storage: kafka: namespace: skywalking brokerList: localhost:9092 ``` 此操作允许 SkyWalking 将其内部生成的服务调用链等相关事件发送到 Kafka 主题上[^1]。 ##### 2. 使用 Logstash 接收 Kafka 数据并写入 Elasticsearch 创建一个自定义的 Logstash 配置文件 (`skywalking_to_elk.conf`) 来订阅上述 Kafka 主题并将接收到的内容存储进 Elasticsearch: ```conf input { kafka { bootstrap_servers => "localhost:9092" topics => ["skywalking"] codec => json {} } } filter {} output { elasticsearch { hosts => ["http://localhost:9200"] index => "skywalking-%{+YYYY.MM.dd}" } } ``` 这段脚本的作用是从 Kafka 获取经过序列化的 JSON 格式的 SkyWalking 数据包,并将其解析后存放到对应的 ES Index 下面去。 ##### 3. 自定义 Trace ID 注入逻辑 为了让后续查询更加方便直观,可以在应用程序层面手动向业务日志注入当前请求所关联的 TraceId 值。这样做的好处是在 Kibana Dashboard 上可以直接点击某个异常堆栈跳转查看该次访问完整的端到端路径描述。 假设我们正在开发基于 Spring Boot 的微服务项目,则可以通过拦截器方式捕获每笔交易唯一标识符并向 MDC 添加键值对如下所示: ```java import org.apache.skywalking.apm.toolkit.trace.TraceContext; import org.slf4j.MDC; @Component public class TraceLoggingInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String traceId = TraceContext.traceId(); if (traceId != null && !traceId.isEmpty()) { MDC.put("traceId", traceId); } else { MDC.put("traceId", "<unknown>"); } return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { MDC.clear(); // 清理线程局部变量以防内存泄漏 } } ``` 以上代码片段展示了如何利用 SLF4J 的 MDC 功能记录每次 HTTP 请求对应于哪个具体的跟踪实例。 ##### 4. 构建联合查询仪表板 最后一步就是设计一张综合性的报表页面用来呈现最终效果啦!打开 Kibana 并新建 Visualization 对象时可以选择 Line Chart / Bar Chart 类型图表表示一段时间内的错误率变化趋势;或者采用 Data Table 展示最近发生的若干条告警通知详情列表形式展现出来即可满足日常运维人员的需求了哦! --- #### 总结 综上所述,通过合理规划技术选型加上精心编写配套程序代码就可以成功达成预期目的——即把原本独立运行着的不同平台紧密联系起来共同发挥作用提升整体效率的同时降低维护成本开支等问题困扰啦! ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小绿豆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值