【SkyWalking】Java服务从零接入全链路追踪解决方案

SkyWalking是一个应用性能监视工具,其结构包括探针用于收集和格式化数据,平台后端处理数据聚合和分析,存储系统支持多种存储选项如ElasticSearch,UI提供可视化监控。文章还详细介绍了如何配置和启动SkyWalking8.6.0-es版本,以及如何通过Javaagent方式接入服务,包括修改配置文件和日志格式以记录tracid。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SkyWalking基本结构

  • 探针
  1. 基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式.
  2. 基于语言的原生代理
  3. 服务网格探针
  4. 第三放打点类库
  • 平台后端
  1. 支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。
  2. 分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。
  3. 甚至可以使用 Observability Analysis Language 对原生度量指标用于扩展度量的计量系统 自定义聚合分析。
  • 存储
  1. 通过开放的插件化的接口存放 SkyWalking 数据.
  2. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统. 当然, 我们非常欢迎你贡献新的存储系统实现。
  • UI
  1. 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。

SkyWalking代码结构

  • agent

    1. skwwalking-agent.jar 代理服务jar包
    2. config: 代理服务启动时使⽤的配置⽂件
    3. plugins: 包含多个插件,代理服务启动时会加载该⽬录下的所有插件(实际上时各种jar包) optional-plugins:可选插件,当需要⽀持某些功能时,⽐如 Spring Cloud Gateway,则需要把对 应的jar包拷⻉到plugins⽬录下;
  • webapp: UI前端(web监控⻚⾯)的jar包配置⽂件

    1. webapp.yml : 默认配置启动UI时访问端⼝ 8080,需要更改
    2. listOfServers表示接收前端请求端⼝12800
  • oap-libs:

    1. 后台应⽤的jar包,以及它的依赖jar包,⾥⾯有⼀个server-starter-*.jar就时对应的启动程序
  • config:启动后台应⽤程序的配置⽂件

    1. application.yml:可配置存储数据库类型、⾼可⽤注册服务等 ,需要修改存储方式改为ES存储
  • bin: 各种启动脚本,⼀般使⽤脚本startup.*来启动web⻚⾯和对应的后台应⽤;

    1. oapServer.*: 默认使⽤的后台程序的启动脚本;(使⽤的默认模式启动,还⽀持)
    2. oapServerInit.*: 使⽤init模式启动,在此模式下,OAP服务器启动以执⾏初始化⼯作,然后退出
    3. oapServerNoInit.*:使⽤no init模式启动,在此模式下,OAP服务器不进⾏初始化
    4. webappService.*: UI前端的启动脚本
    5. startup.:组合脚本,同时启动oapServer. ,webappService.*脚本

SkyWalking搭建8.6.0-es版本

  1. 下载链接:archive.apache.org/dist/skywal…
  2. 首先需要修改启动端口
vi apache-skywalking-apm-bin-es7/webapp/webapp.yml,修改server.port(原8080)
复制代码
  1. 修改存储类型
vi apache-skywalking-apm-bin-es7/config/application.yml
复制代码

  1. sh apache-skywalking-apm-bin-es7/bin/startup.sh  启动

  2. skywalking服务日志存储到apache-skywalking-apm-bin-es7/logs中

  3. 启动成功后会启动两个服务,⼀个是skywalking-oap-server,⼀个是skywalking-web-ui

  4. skywalking-oap-server服务启动后会暴露11800 和 12800 两个端⼝,分别为收集监控数据的端⼝11800和接受前端请求的端⼝12800

Java服务接入SkyWalking

  • 使用Java agent方式监控服务,编写sheel启动脚本,直接运行改脚本即可
export SW_AGENT_NAME=sky_service
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #skywalking Collector地址 
export SW_AGENT_SPAN_LIMIT=2000 #配置链路最大Span数量,默认为300 
export JAVA_AGENT=-javaagent:../apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar   #agent包地址 nohup java $JAVA_AGENT -jar *.jar &
复制代码
  • 控制台打印tracid,需要更改日志格式,配置logback-spring.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
   <!-- 引入springboot 默认的 logback xml 配置文件 (springboot default log config)-->
   <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

   <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">
            <!-- 来源于defaults.xml 可以全局查找文件找到springboot中的该配置文件 如果无需更改 只需要引入>${CONSOLE_LOG_PATTERN}-->
            <!-- 我们需要记录traceId 所以需要加上[%tid] 加在下面任意一个不破坏格式的地方-->
            <!--source from springboot logback defaults.xml,default:${CONSOLE_LOG_PATTERN}
             but we need to note the traceId ,add [%tid]-->
            <!-- https://github.com/apache/skywalking/tree/master/docs/en/setup/service-agent/java-agent -->
            <Pattern>-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint}%clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} [%tid] %clr(---){faint}%clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint}%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}</Pattern>
<!--            <Pattern>${CONSOLE_LOG_PATTERN:%clr(%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:%5p}) %clr(${PID:- }){magenta} [${spring.application.name}] %clr([%10.10t]){faint}[%36.36X{trace_id}] %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}</Pattern>-->

         </layout>

      </encoder>
   </appender>

   <!-- grpc方式将traceId推送至skywalking-->
   <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>


   <!--设置appender -->
   <root level="INFO">
      <appender-ref ref="console"/>
      <appender-ref ref="grpc-log"/>
   </root>

</configuration>
复制代码

接入效果

指标仪表盘

拓扑图

日志监控

<think>好的,用户想在Windows环境下将Java服务SkyWalking集成,实现监控和追踪。我需要根据提供的引用内容,逐步指导用户如何配置。 首先,用户需要安装SkyWalking。根据引用3,下载地址是Apache官网,用户需要下载SkyWalking的发行版,比如8.9.1版本。解压后,启动SkyWalking服务,通过运行bin/startup.bat。然后访问http://localhost:8080确认UI是否正常,这一步引用2也提到了。 接下来是配置Java应用的启动参数。引用1和引用2都提到了需要指定skywalking-agent探针。用户需要找到探针的路径,通常是agent目录下的skywalking-agent.jar。然后在启动Java应用时,添加-javaagent参数,并设置agent.service_name和collector.backend_service。比如在命令行中使用java -javaagent命令,或者在IDE的运行配置中添加VM参数。 然后需要验证是否接入成功。访问接口后,查看SkyWalking的UI是否有数据,引用4中提到可以通过Trace ID查询链路信息,或者在代码中获取traceId输出到日志,这样能确认是否成功。 此外,用户可能需要进行自定义追踪,比如使用@Trace注解或手动添加追踪代码,这部分引用4有示例,可以指导用户如何在代码中操作。 最后,用户可能会遇到问题,比如探针路径错误或网络不通,需要检查路径是否正确,以及SkyWalking OAP服务是否启动。这些常见问题需要提前提醒用户注意。 现在需要将这些步骤整理成结构清晰的回答,确保每个步骤都有对应的引用支持,并生成相关问题帮助用户深入理解。</think>以下是在Windows环境下配置Java应用接入Apache SkyWalking的详细步骤: ### 一、安装SkyWalking环境 1. **下载SkyWalking发行版** 访问[Apache SkyWalking官网](https://skywalking.apache.org/downloads/),选择最新版本(例如`apache-skywalking-apm-8.9.1.tar.gz`)并解压到本地目录[^3]。 2. **启动SkyWalking服务** 进入解压目录的`bin`文件夹,双击运行`startup.bat`脚本(同时启动OAP后端和UI服务)[^2][^3]。 启动完成后,访问`http://localhost:8080`确认UI界面正常显示。 --- ### 二、Java应用配置接入 #### 方法1:通过命令行参数配置 在启动Java服务时添加JVM参数: ```bash java -javaagent:D:/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=your-service-name -Dskywalking.collector.backend_service=localhost:11800 -jar your-app.jar ``` - `-javaagent`: 指定探针文件`skywalking-agent.jar`的绝对路径[^1] - `agent.service_name`: 自定义服务标识(建议英文) - `collector.backend_service`: SkyWalking OAP服务地址(默认端口11800) #### 方法2:IDE中配置(以IntelliJ为例) 1. 打开`Run/Debug Configurations` 2. 在`VM options`中添加: ```bash -javaagent=D:/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=your-service-name -Dskywalking.collector.backend_service=localhost:11800 ``` --- ### 三、验证接入成功 1. **触发服务接口** 访问应用API或执行功能操作,生成监控数据。 2. **查看SkyWalking仪表盘** 访问`http://localhost:8080`,在以下位置验证: - **拓扑图**:显示服务节点和依赖关系 - **追踪**:查看具体请求的链路详情[^4] - **指标**:检查JVM/HTTP响应时间等性能数据 3. **代码级验证(可选)** 在代码中获取Trace ID并打印日志(需引入`apm-toolkit-trace`依赖): ```java import org.apache.skywalking.apm.toolkit.trace.TraceContext; @GetMapping("/demo") public String demo() { String traceId = TraceContext.traceId(); log.info("当前请求Trace ID: {}", traceId); // 日志中可搜索此ID return "success"; } ``` 日志输出示例:`traceId = 3ddfa5d5e4a6490d8b5a6b7c8d9e0f1a.1.1652345678900` --- ### 四、高级配置(可选) 1. **自定义追踪方法** 在需要监控的方法上添加`@Trace`注解: ```java import org.apache.skywalking.apm.toolkit.trace.Trace; @Trace public void customMethod() { // 业务逻辑 } ``` 2. **添加自定义标签** 使用`TraceContext.putCorrelation(key, value)`存储上下文信息: ```java TraceContext.putCorrelation("user_role", "admin"); ``` --- ### 常见问题排查 | 问题现象 | 解决方案 | |------------------------------|--------------------------------------------------------------------------| | UI无数据 | 检查探针路径是否正确,确认OAP服务已启动(查看`logs/oap.log`日志)[^2] | | 日志报错`Connection refused` | 验证`collector.backend_service`地址和端口(默认11800)是否可访问[^1] | | 部分链路缺失 | 确认是否漏配`-javaagent`参数,或存在未监控的异步线程[^4] | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值