SkyWalking结合Logback获取全局唯一标识 trace-id 记录到日志中
2021-04-28 23:06
155 查看
为什么要获取trace-id
通过上文Docker-Compose搭建单体SkyWalking我们搭建了SkyWalking服务,我们需要在日志中记录下来每次请求的唯一标识(trace-id),这样就可以在SkyWalking定位到有问题的trace-id,然后通过这个trace-id我们就可以通过日志系统去定位到相关的日志,从而发现并解决问题。
最开始和我说想法的老哥,想自己实现一套trace-id,以便满足于如果想替换追踪工具,不用改太多代码。想法是很好的,但是经过查询SkyWalking的GIT issue ,发现SW并没有提供这种自定义trace-id的功能,
决定获取SW生成的全局trace-id,这里主要是记录下实现方式,这里使用了开源组件完成的效果。
配置过程
在pom中添加依赖
<dependency> <groupId>org.apache.skywalking> <artifactId>apm-toolkit-logback-1.x> <version>6.2.0>>
这是一个skywalking的工具,通过这个工具可以得到trace-id
修改logback.xml中的Appender的Pattern
%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%n
这里需要注意的是
- Logback中的encoder本身是包含一个layout的,在有此Appender中是可以直接用encoder中的layout部分的,鉴于本人使用的是Kafka-appender这个插件,尽量通用就写成这样了。
- encoder的class是LayoutWrappingEncoder,不是PatternLayoutEncoder!
- 使用%tid 来占trace-id的位置,默认TID:N/A,当有请求调用时,会显示trace-id
- 这种方式支持探针与注解
测试
使用探针参数添加到LogDemo中测试,Demo地址: https://github.com/hellxz/LogDemo/tree/get-skywalking-trace-id ,注意分支
Java只需要在VM options中追加格式为
-javaagent:/path/to/path/skywalking-agent.jar -Dskywalking.agent.service_name=YOUR_APP_NAME -Dskywalking.collector.backend_service=OAP_SEVER_HOST:gRPC_PORT
举例如下:
-javaagent:D:/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=logDemo -Dskywalking.collector.backend_service=10.2.7.70:11800
启动项目,如果没有kafka输出,可以注释掉,只留下console输出
我们可以看到默认的启动打出的日志是这样的
访问测试接口http://localhost:8000/test/aaa,查看日志
相关文章推荐
- Android下获取设备唯一标识(UDID, DeviceID)
- 获取全局唯一id
- 高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]
- Android下获取设备唯一标识(UDID, DeviceID...)
- Android下获取设备唯一标识(UDID, DeviceID...)
- Android下获取设备唯一标识(UDID, DeviceID...)
- oracle 在一张日志表中,同一个ID 有多条记录,每个ID只获取最新时间的记录
- nodejs包 node-uuid(生成唯一id,标识单个记录)
- oracle 在一张日志表中,同一个ID 有多条记录,每个ID只获取最新时间的记录
- android唯一设备标识、设备号、设备ID的获取方法
- 缓存,用户信息不能随便修改的,因为这里面的id是唯一的身份标识,获取资源全靠他了,
- 记录一把,获取设备唯一id
- 安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题
- Qt Tutorial 019:使用QUuid获取全局唯一标识
- android 获取APP的唯一标识applicationId的实例
- Android下获取设备唯一标识(UDID, DeviceID...)
- iOS9 获取手机的唯一标识(一)——CFUUID、NSUUID、IDFA、IDFV、UDID、OpenUDID 的区别
- 高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]
- Android设备唯一标识ID的获取
- android开发中获取的设备id(每部手机的唯一标识)