rabbitmq整合skywalking并编写自界说插件加强

打印 上一主题 下一主题

主题 1021|帖子 1021|积分 3063

rabbitmq整合skywalking

起首先下载准备好skywalking 的服务端和ui控制台,java-agent
https://skywalking.apache.org/downloads/


整合skywalking

我的流程是在生产者和消费者服务中去引入一个mq的sdk,具体SDK的内容可以检察这篇文章
在sdk的pom文件中引入了skywalking依靠
  1. <!-- skywalking -->
  2. <dependency>
  3.     <groupId>org.apache.skywalking</groupId>
  4.     <artifactId>apm-toolkit-logback-1.x</artifactId>
  5.     <version>9.3.0</version>
  6. </dependency>
  7. <dependency>
  8.     <groupId>org.apache.skywalking</groupId>
  9.     <artifactId>apm-toolkit-trace</artifactId>
  10.     <version>9.3.0</version>
  11. </dependency>
复制代码
引入之后进行logback的配置,也大概你们是使用log4j这些,配置自行百度就行
生产者logback.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.     <conversionRule conversionWord="tid" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter"/>
  4.     <!-- 日志存放路径 -->
  5.         <property name="log.path" value="logs/sms-platform" />
  6.     <!-- 日志输出格式 -->
  7.         <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
  8.         <!-- 控制台输出 -->
  9.         <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  10.         <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  11.             <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
  12.                 <Pattern>${log.pattern}</Pattern>
  13.             </layout>
  14.         </encoder>
  15.         </appender>
  16.        
  17.         <!-- 系统日志输出 -->
  18.         <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
  19.             <file>${log.path}/sys-info.log</file>
  20.         <!-- 循环政策:基于时间创建日志文件 -->
  21.                 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  22.             <!-- 日志文件名格式 -->
  23.                         <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
  24.                         <!-- 日志最大的历史 60天 -->
  25.                         <maxHistory>60</maxHistory>
  26.                 </rollingPolicy>
  27.         <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  28.             <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
  29.                 <Pattern>${log.pattern}</Pattern>
  30.             </layout>
  31.         </encoder>
  32.                 <filter class="ch.qos.logback.classic.filter.LevelFilter">
  33.             <!-- 过滤的级别 -->
  34.             <level>INFO</level>
  35.             <!-- 匹配时的操作:接收(记录) -->
  36.             <onMatch>ACCEPT</onMatch>
  37.             <!-- 不匹配时的操作:拒绝(不记录) -->
  38.             <onMismatch>DENY</onMismatch>
  39.         </filter>
  40.         </appender>
  41.        
  42.         <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
  43.             <file>${log.path}/sys-error.log</file>
  44.         <!-- 循环政策:基于时间创建日志文件 -->
  45.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  46.             <!-- 日志文件名格式 -->
  47.             <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
  48.                         <!-- 日志最大的历史 60天 -->
  49.                         <maxHistory>60</maxHistory>
  50.         </rollingPolicy>
  51.         <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  52.             <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
  53.                 <Pattern>${log.pattern}</Pattern>
  54.             </layout>
  55.         </encoder>
  56.         <filter class="ch.qos.logback.classic.filter.LevelFilter">
  57.             <!-- 过滤的级别 -->
  58.             <level>ERROR</level>
  59.                         <!-- 匹配时的操作:接收(记录) -->
  60.             <onMatch>ACCEPT</onMatch>
  61.                         <!-- 不匹配时的操作:拒绝(不记录) -->
  62.             <onMismatch>DENY</onMismatch>
  63.         </filter>
  64.     </appender>
  65.        
  66.         <!-- 用户访问日志输出  -->
  67.     <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
  68.                 <file>${log.path}/sys-user.log</file>
  69.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  70.             <!-- 按天回滚 daily -->
  71.             <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
  72.             <!-- 日志最大的历史 60天 -->
  73.             <maxHistory>60</maxHistory>
  74.         </rollingPolicy>
  75.         <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  76.             <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
  77.                 <Pattern>${log.pattern}</Pattern>
  78.             </layout>
  79.         </encoder>
  80.     </appender>
  81.     <appender name="grpc" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
  82.         <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  83.             <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
  84.                 <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
  85.             </layout>
  86.         </encoder>
  87.     </appender>
  88.        
  89.         <!-- 系统模块日志级别控制  -->
  90.         <logger name="com.aasee" level="info" />
  91.         <!-- Spring日志级别控制  -->
  92.         <logger name="org.springframework" level="warn" />
  93.         <root level="info">
  94.                 <appender-ref ref="console" />
  95.         <appender-ref ref="grpc"/>
  96.         </root>
  97.        
  98.         <!--系统操作日志-->
  99.     <root level="info">
  100.         <appender-ref ref="file_info" />
  101.         <appender-ref ref="file_error" />
  102.     </root>
  103.        
  104.         <!--系统用户操作日志-->
  105.     <logger name="sys-user" level="info">
  106.         <appender-ref ref="sys-user"/>
  107.     </logger>
  108. </configuration>
复制代码
消费者logback.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.     <conversionRule conversionWord="tid" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter"/>
  4.     <!-- 日志存放路径 -->
  5.         <property name="log.path" value="logs/sms-consumer" />
  6.     <!-- 日志输出格式 -->
  7.         <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
  8.         <!-- 控制台输出 -->
  9.         <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  10.                 <encoder>
  11.                         <pattern>${log.pattern}</pattern>
  12.                 </encoder>
  13.         </appender>
  14.     <appender name="grpc" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
  15.         <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  16.             <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
  17.                 <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
  18.             </layout>
  19.         </encoder>
  20.     </appender>
  21.        
  22.         <!-- 系统日志输出 -->
  23.         <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
  24.             <file>${log.path}/sys-info.log</file>
  25.         <!-- 循环政策:基于时间创建日志文件 -->
  26.                 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  27.             <!-- 日志文件名格式 -->
  28.                         <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
  29.                         <!-- 日志最大的历史 60天 -->
  30.                         <maxHistory>60</maxHistory>
  31.                 </rollingPolicy>
  32.                 <encoder>
  33.                         <pattern>${log.pattern}</pattern>
  34.                 </encoder>
  35.                 <filter class="ch.qos.logback.classic.filter.LevelFilter">
  36.             <!-- 过滤的级别 -->
  37.             <level>INFO</level>
  38.             <!-- 匹配时的操作:接收(记录) -->
  39.             <onMatch>ACCEPT</onMatch>
  40.             <!-- 不匹配时的操作:拒绝(不记录) -->
  41.             <onMismatch>DENY</onMismatch>
  42.         </filter>
  43.         </appender>
  44.        
  45.         <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
  46.             <file>${log.path}/sys-error.log</file>
  47.         <!-- 循环政策:基于时间创建日志文件 -->
  48.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  49.             <!-- 日志文件名格式 -->
  50.             <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
  51.                         <!-- 日志最大的历史 60天 -->
  52.                         <maxHistory>60</maxHistory>
  53.         </rollingPolicy>
  54.         <encoder>
  55.             <pattern>${log.pattern}</pattern>
  56.         </encoder>
  57.         <filter class="ch.qos.logback.classic.filter.LevelFilter">
  58.             <!-- 过滤的级别 -->
  59.             <level>ERROR</level>
  60.                         <!-- 匹配时的操作:接收(记录) -->
  61.             <onMatch>ACCEPT</onMatch>
  62.                         <!-- 不匹配时的操作:拒绝(不记录) -->
  63.             <onMismatch>DENY</onMismatch>
  64.         </filter>
  65.     </appender>
  66.        
  67.         <!-- 用户访问日志输出  -->
  68.     <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
  69.                 <file>${log.path}/sys-user.log</file>
  70.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  71.             <!-- 按天回滚 daily -->
  72.             <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
  73.             <!-- 日志最大的历史 60天 -->
  74.             <maxHistory>60</maxHistory>
  75.         </rollingPolicy>
  76.         <encoder>
  77.             <pattern>${log.pattern}</pattern>
  78.         </encoder>
  79.     </appender>
  80.        
  81.         <!-- 系统模块日志级别控制  -->
  82.         <logger name="com.aasee" level="info" />
  83.         <!-- Spring日志级别控制  -->
  84.         <logger name="org.springframework" level="warn" />
  85.         <root level="info">
  86.                 <appender-ref ref="console" />
  87.         <appender-ref ref="grpc"/>
  88.         </root>
  89.        
  90.         <!--系统操作日志-->
  91.     <root level="info">
  92.         <appender-ref ref="file_info" />
  93.         <appender-ref ref="file_error" />
  94.     </root>
  95.        
  96.         <!--系统用户操作日志-->
  97.     <logger name="sys-user" level="info">
  98.         <appender-ref ref="sys-user"/>
  99.     </logger>
  100. </configuration>
复制代码
发现问题

在完成了上述配置之后,启动项目,我发现消费者不停无法打印tid始终为n/a,经过一番查询后发现原来skywalking官方提供的消费插件不得当我们,其只针对官方原生Client实现扩展,但我们一般都是使用Spring Rabbitmq stater,以是我们无法实现链路追踪。@RabbitListener的工作原理可以看这篇文章https://blog.csdn.net/m0_72397750/article/details/140558744
总的来说就是我们一般使用注解来实现监听的,那么手动埋点就应该埋在开始处置处罚消息的executeListener()方法这

将消息头复制回来

详细的代码我放在了https://github.com/Aas-ee/skywalking-apm-sniffer 解释很详细 内里另有skywalking-rabbitmq的官方插件代码可以用来对照学习,可以拉取后直接打成jar包放到skywalking-agent/plugin目录下使用(觉得有效的话贫苦点点star,这对我很紧张),同时对于callback的打印也做了加强,但是不一定适用大家,主要用于学习思想和原理。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表