Java服务接入SkyWalking文档

一、背景

  • 背景:Apache SkyWalking 是一个开源的分布式应用性能监控(APM)系统,主要用于监控微服务、云原生和容器化应用的性能。接入SkyWalking可以排查以智能投放服务为主的服务响应问题

技术架构

SkyWalking 的核心架构包括以下几个组件:

  • Agent:负责收集应用程序的监控数据,支持多种语言(如Java、Go、Node.js等)。

  • Collector:接收来自 Agent 的数据,进行处理和存储。

  • Storage:用于存储监控数据,支持多种存储后端(如Elasticsearch、MySQL等)。

  • UI:提供可视化界面,展示监控数据和分析结果。

二、如何接入

Java服务启动所在服务器命令指定skywalking-agent探针文件包

skywalking-agent我放在了/data目录:

pwd

/data/skywalking-agent

内部结构:

activations  bootstrap-plugins  config  expired-plugins  LICENSE  licenses  logs  NOTICE  optional-plugins  optional-reporter-plugins  plugins  skywalking-agent.jar

有plugins的相关目录

plugins 相关目录解释:

Java Agent只会启用 plugins 目录下的所有探针插件,bootstrap-plugins 目录以及optional-plugins 目录下的插件不会启用。如需启用引导插件或可选插件,只需将JAR包移到 plugins 目录下,如需禁用某款插件,只需从 plugins 目录中移除即可。

注意事项:刚部署的SkyWalking只会监控plugins中包含的组件,像GateWay这种默认不在plugins目录下,不会上报监控信息到SkyWalking

日志上报

/data/skywalking-agent/config/agent.config探针配置文件加以下配置开启,根据实际情况来

# 指定要向其报告日志数据的GRPC服务器主机
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:域名}
# 指定要向其报告日志数据的GRPC服务器端口
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
# 指定GRPC客户端要报告的日志数据的最大大小
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
# 客户端向上游发送数据时将超时多长时间,单位是秒
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

Java服务需要的准备:

  • 引入依赖

<!-- 追踪链路 -->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>9.2.0</version>
</dependency>
<!-- 日志上报 -->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>9.2.0</version>
</dependency>
  • 修改resources/logback-spring.xml文件配置,加入SkyWalking的appender(用于日志上报)

<!--sky walking -->
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
   <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
         <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
      </layout>
   </encoder>
</appender>

 root标签集合中加入上述appender-ref

<root level="info">
   <appender-ref ref="grpc-log" />
</root>

 配置每一个appender的encoder属性、layout标签属性参考如下:([%tid]就是TranceID)

<!-- 控制台日志配置 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
   <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
         <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%tid] %-5level %logger{50} - %msg%n</pattern>
      </layout>
      <charset>UTF-8</charset>
   </encoder>
</appender>

<!-- info级别的日志配置 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
   <file>${LOG_FILE_PATH}/debug/debug.log</file><!-- 输出的路径 -->
   <append>true</append><!-- 是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true -->
   <encoder  class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
         <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%tid] %-5level %logger{50} - %msg%n</pattern>
      </layout>
      <charset>UTF-8</charset>
   </encoder>
   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_FILE_PATH}/debug/debug.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
      <!--<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
         <maxFileSize>100MB</maxFileSize>&lt;!&ndash; 最大100M &ndash;&gt;
      </timeBasedFileNamingAndTriggeringPolicy>-->
      <maxHistory>3</maxHistory><!-- 保留180天 -->
   </rollingPolicy>
   <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>debug</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
   </filter>
</appender>
方法入参监控注解
/**
 * @Trace :自动加入追踪ID
 * @Tag:指定监控参数、返回值,必须按照格式来,返回值写returnedObj,参数按索引填写arg[n]
 *
 */
@Trace
@Tags({
        @Tag(key = "base", value = "returnedObj"),
        @Tag(key = "base", value = "arg[0]")
})
public AppResponse<?> method(@Validated Req req) {
   //   ...do something
}

Java启动命令添加项

模板:其中 \ 符号是Linux的命令换行符,写进一行则不用加

-javaagent:探针所在位置 \
-Dskywalking.agent.service_name=${parameters.Busines_Module}::$SERVER_NAME \
-Dskywalking.collector.backend_service=域名:11800 \
-Dagent.instance_uuid=实例id #不写的话会有每次都生成实例id
# 解释:
# ${parameters.Busines_Module}:项目名称
# $SERVER_NAME=服务名称

例:

-javaagent:/data/skywalking-agent/skywalking-agent.jar
-Dskywalking.agent.service_name=dev-abc-abc-abc服务::abc-abc-abc服务
-Dskywalking.collector.backend_service=http://xxxxxx.com:11800

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

服务端相声演员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值