「Java服务」快速接入SkyWalking方法指南

news2025/4/8 18:02:15

一、背景

  • 背景: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2214601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[含文档+PPT+源码等]精品基于ssm实现的原生微信小程序线上养花系统的设计与实现

基于SSM&#xff08;Spring、SpringMVC、MyBatis&#xff09;实现的原生微信小程序线上养花系统的设计与实现背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、选题背景 随着人们生活水平的提高和环境保护意识的增强&#xff0c;养花已经成为一种流行的休闲活动。…

UE5 猎户座漂浮小岛 04 声音 材质

UE5 猎户座漂浮小岛 04 声音 材质 1.声音 1.1 导入 wav格式 1.2 循环播放 1.3 mp3转wav 1.4 新手包素材&#xff08;火焰 &#xff09; particle&#xff1a;颗粒 2.材质 2.1 基本颜色 M_Yellow 2.2 混合模式与双面材质 2.3 金属感、高光、粗糙度 M_AluminumAlloy 2.4 自…

【JAVA毕业设计】基于Vue和SpringBoot的课程管理平台

本文项目编号 T 006 &#xff0c;文末自助获取源码 \color{red}{T006&#xff0c;文末自助获取源码} T006&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 数据库设计 六、…

CyberRt实践之Hello Apollo(Apollo 9.0版本)

apollo9.0环境安装参考官方网站 apollo.baidu.com/community/Apollo-Homepage-Document?docBYFxAcGcC4HpYIbgPYBtXIHQCMEEsATAV0wGNkBbWA5UyRFdZWVBEAU0hFgoIH0adPgCY%2BADwCiAVnEAhAILiAnABZxEgOzK1Y%2BQA51M3ROUnJBsbK2WZoyUdkBhcXoAMhlwDFlARnUXZdzE9AGY%2BbFINADYpUhCEFW…

(Java企业 / 公司项目)阿里云aliyun-对象存储OSS详细从开通到配置(微服务架构选用)

OSS配置文档 注册阿里云账号 https://www.aliyun.com/ 注册成功登录阿里云。 配置bucket 进入控制台&#xff1a; 搜索OSS 点击上图中控制台“对象存储OSS”&#xff0c;立即创建Bucket: 点击“立即创建”&#xff0c;填写bucket的信息&#xff0c;如下图&#xff1a; 注意…

机器学习拟合过程

import numpy as np import matplotlib.pyplot as plt# 步骤1: 生成模拟数据 np.random.seed(0) X 2 * np.random.rand(100, 1) y 4 3 * X 2 * X**2 np.random.randn(100, 1)# 步骤2: 定义线性模型 (我们从随机权重开始) w np.random.randn(2, 1) b np.random.randn(1)#…

C++11中的原子操作及其底层缓存一致性

C中的原子变量&#xff08;atomic variables&#xff09;是一种并发编程中用于保证数据一致性和线程安全的机制。在多线程环境下&#xff0c;当多个线程同时访问或修改同一个变量时&#xff0c;可能会产生竞争条件&#xff08;race condition&#xff09;&#xff0c;导致未定义…

Javascript 使用 Jarvis 算法或包装的凸包(Convex Hull using Jarvis’ Algorithm or Wrapping)

给定平面中的一组点&#xff0c;该集合的凸包是包含该集合所有点的最小凸多边形。 我们强烈建议您先阅读以下文章。 如何检查两个给定的线段是否相交&#xff1f; c https://blog.csdn.net/hefeng_aspnet/article/details/141713655 java https://blog.csdn.net/hefeng_aspne…

C#中判断的应用说明二(switch语句)

一.判断的定义说明 判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。下面是大多数编程语言中典型的判断结构的一般形式&#xff1a; 二.判…

六、设置弹窗显示队列

实现原理&#xff1a; 把弹窗放置在一个队列中&#xff0c;通过设置UI方法&#xff0c;直接调用这个队列中的文本 Queue是一个先进先出的队列。 一、队列的使用 写一个增加提示的方法 在这里使用锁来执行这个语句&#xff0c;向这个队列里面增加一个提示文本 在这里进行文本…

Llama3-Factory模型部署新手指南

一、介绍 为了保持其公司在人工智能开源大模型领域的地位&#xff0c;社交巨头Meta推出了旗下最新开源模型。当地时间4月18日&#xff0c;Meta在官网上宣布公布了旗下最新大模型Llama 3。目前&#xff0c;Llama 3已经开放了80亿&#xff08;8B&#xff09;和700亿&#xff08;…

报表控件stimulsoft操作:使用 Stimulsoft 产品连接到 Json数据源

我们继续我们的系列文章&#xff0c;介绍如何在 Stimulsoft 产品中连接各种类型的数据源。在上一篇文章中&#xff0c;我们讨论了如何连接 OData。今天&#xff0c;我们将深入研究另一种类型的数据源 - JSON。 Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate…

Bat To Exe Converter软件:将批处理文件bat转换成exe应用程序

Bat To Exe Converter软件&#xff1a; 将批处理文件bat转换成exe应用程序&#xff08;文章最后附软件下载地址&#xff09;Bat To Exe Converter软件可以把批处理文件bat转换为exe可执行文件&#xff0c;甚至运用密码保护文件&#xff0c;生成的.EXE是独立的文件&#xff0c;…

DevExpress WinForms中文教程:Data Grid - 如何点击获取信息?

在使用DevExpress WinForms的Data Grid之类控件时&#xff0c;可能需要实现自定义用户交互&#xff0c;例如显示数据行的上下文菜单&#xff0c;或者在双击一行时调用编辑表单。在这些情况下&#xff0c;您需要在指定的坐标处标识网格元素。 在本教程中&#xff0c;您将学习如…

Python案例 | 使用K-means 聚类算法提取图像中的颜色

假如我们需要提取下图中的颜色&#xff0c;可以通过使用 K-means 聚类算法对图像进行颜色聚类分析&#xff0c;并生成一个基于聚类中心(即最具代表性的颜色)的RGB值和调色板。 # 通过使用 K-means 聚类算法对图像进行颜色聚类分析&#xff0c;并生成一个基于聚类中心(即最具代…

时间序列预测(二)——前馈神经网络(Feedforward Neural Network, FNN)

上一篇文章有提到线性回归方程。 时间序列预测&#xff08;二&#xff09;——前馈神经网络&#xff08;Feedforward Neural Network, FNN&#xff09;-CSDN博客 与线性回归相比&#xff1a; 线性回归只有一个线性层&#xff0c;输入直接映射到输出&#xff0c;不包含隐藏层…

「漏洞复现」灵当CRM data/pdf.php 任意文件读取漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

网页内容获取:Scala自动化脚本的实现

对于开发者和数据科学家来说&#xff0c;自动化获取网页内容是一个常见的需求。Scala&#xff0c;作为一种多范式编程语言&#xff0c;以其强大的函数式编程特性和并发处理能力&#xff0c;成为了编写高效自动化脚本的理想选择。本文将介绍如何使用Scala结合Selenium WebDriver…

Element Ui el-table列表中的tooltip内容过长超出屏幕换行显示

elementui-table组件列表中的tooltip内容过长超出屏幕换行显示内容,虽然el-table列属性中带的有show-overflow-tooltip&#xff0c;可以设置内容超出列宽度显示为…&#xff0c;且有tooltip提示全部内容&#xff0c;但是内容过多时&#xff0c;提示会超出屏幕&#xff1a; 只有…