「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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源物联网平台】Fastbee数据库持久层架构

目录 一&#xff0c;数据库持久层架构 二&#xff0c;数据库组件 2.1 Druid 2.2 MyBatis-Plus 2.3 dynamic-datasource 2.4 ShardingSphere 一&#xff0c;数据库持久层架构 二&#xff0c;数据库组件 2.1 Druid Druid是Java语言中最好的数据库连接池。Druid能够提供强…

Chrome与Firefox浏览器HTTP自动跳转HTTPS的解决方案

一、背景介绍 随着网络安全意识的不断提高&#xff0c;越来越多的网站开始采用HTTPS协议&#xff0c;以确保数据传输的安全性。然而&#xff0c;有时用户在浏览网页时&#xff0c;可能会遇到HTTP请求被自动跳转至HTTPS的情况导致网站打不开&#xff0c;提示安全问题&#xff0…

android——自定义控件(不停变化的textview、开关switch、动画效果的打勾)

一、从开始数字到结束数字&#xff0c;不断变化 import android.animation.TypeEvaluator; import android.animation.ValueAnimator; import android.content.Context; import android.util.AttributeSet; import android.view.animation.AccelerateDecelerateInterpolator;i…

深度学习实战94-基于图卷积神经网络GCN模型的搭建以及在金融领域的场景

大家好,我是微学AI,今天给大家介绍一下深度学习实战94-基于图卷积神经网络GCN模型的搭建以及在金融领域的场景。文章首先介绍了GCN模型的原理及模型结构,随后提供了数据样例,并详细展示了实战代码。通过本文,读者可以深入了解GCN模型在金融场景下的应用,同时掌握代码的具…

使用标注工具并跑通官方yolov8分割segment自己的数据集

1.下载标注工具用于打标签 使用标注工具&#xff0c;后面会用到智能标注 点击 创建AI多边形后命令行就自动下载对应的模型 单机要选中的图像就行&#xff0c;就可以智能选中&#xff0c;双击设置标签 依次标注所有图片 &#xff0c;最后保存成json格式的文件 2.使用labelme2y…

关于mac下的nvm设置淘宝镜像源

1. 进入配置文件修改镜像源 vim ~/.bash_profile增加下面内容 export NVM_NODEJS_ORG_MIRRORhttps://npmmirror.com/mirrors/node/2. 查看远程node镜像 nvm ls-remote3. 下载镜像 nvm install 14.17.64. 使用镜像 nvm use 14.17.6

总台戏曲探访类创新节目《风味梨园》开播 探寻一座城市的戏曲文化地图

戏曲艺术犹如一颗璀璨的明珠&#xff0c;承载着中华民族千年的历史文化底蕴&#xff0c;以其独有的艺术魅力&#xff0c;如悠扬的旋律、精湛的表演&#xff0c;深深吸引着无数观众。而每一座城市隐匿其后的美食文化&#xff0c;恰似一首动人的诗篇&#xff0c;代表着人们对美好…

2013年国赛高教杯数学建模A题车道被占用对城市道路通行能力的影响解题全过程文档及程序

2013年国赛高教杯数学建模 A题 车道被占用对城市道路通行能力的影响 车道被占用是指因交通事故、路边停车、占道施工等因素&#xff0c;导致车道或道路横断面通行能力在单位时间内降低的现象。由于城市道路具有交通流密度大、连续性强等特点&#xff0c;一条车道被占用&#x…

数学建模算法与应用 第11章 偏最小二乘回归及其方法

目录 11.1 偏最小二乘回归概述 11.2 Matlab 偏最小二乘回归命令 Matlab代码示例&#xff1a;偏最小二乘回归 11.3 案例分析&#xff1a;化学反应中的偏最小二乘回归 Matlab代码示例&#xff1a;光谱数据的PLS回归 习题 11 总结 偏最小二乘回归&#xff08;Partial Least …

MySQL 【日期】函数大全(三)

DATEOFYEAREXTRACTFROM_DAYSFROM_UNIXTIMEHOURLAST_DAYLOCALTIMELOCALTIMESTAMP 1、DATEOFYEAR DATEOFYEAR(expr) &#xff1a;返回一个从 1 到 366 代表给定日期是一年中的第几天的数字。 如果指定的表达式不是一个合法的日期或者日期时间&#xff0c;DAYOFYEAR() 函数将返回…

无功补偿设备在室内及室外安装的区别

无功补偿设备在室内和室外的安装存在多方面的区别&#xff0c;包括环境条件、设备选择、安装要求以及维护方式。下面详细介绍两者的区别及相应的注意事项。 一、环境条件的差异 1、室内安装 温度和湿度&#xff1a;相对受控&#xff0c;温度变化较小&#xff0c;湿度可调节&…

k8s的部署和安装

k8s的部署和安装 一、Kubernets简介及部署方法 1.1 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个阶段&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参…

STM32传感器模块编程实践(六) 1.8寸液晶屏TFT LCD彩屏简介及驱动源码

文章目录 一.概要二.TFT彩屏主要参数三.TFT彩屏参考原理图四.TFT彩屏模块接线说明五.模块SPI通讯协议介绍六.TFT彩屏模块显示1.显示英文字符串2.显示数字3.显示中文 七.TFT彩屏实现图片显示八.STM32单片机1.8寸 TFT LCD显示实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 九…

Redis set类型 zset类型

set类型 类型介绍 集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;集合中 1&#xff09;元素之间是⽆序 的 2&#xff09;元素不允许重复 ⼀个集合中最多可以存储 个元素。Redis 除了⽀持 集合内的增删查改操作&#xff0c;同时还⽀持多…

【Vue】扫盲(五)Vue 的生命周期与钩子函数详解

【Vue】Vue扫盲&#xff08;一&#xff09;事件标签、事件修饰符&#xff1a;click.prevent click.stop click.stop.prevent、按键修饰符、及常用指令 【Vue】Vue扫盲&#xff08;二&#xff09;指令&#xff1a;v-for 、v-if、v-else-if、v-else、v-show 【Vue】Vue扫盲&…

多种方式确定Linux是CentOS还是Ubuntu

目录 前言正文 前言 对应的基本知识比较少&#xff0c;以下只是记录总结 由于目前使用的是centos&#xff0c;后续找到linux会对应补充 正文 要确定Linux系统是CentOS还是Ubuntu&#xff0c;可以通过以下几种方式进行分析 一、查看发行版信息文件&#xff1a; CentOS&…

Prism导航入门学习笔记

首先创建一个空的Prism项目 在View文件夹中创建一个UserControl的A界面&#xff0c;再在ViewModel中创建一个AViewModel的类 在主页面中创建Button按钮&#xff0c;使用Command属性&#xff0c;指向导航命令的方法&#xff0c;CommandParameter指向导航的页面 <Grid><…

【Java】画心形图形

开始看到的是这个爱心图形&#xff0c;挺好看的&#xff08;感谢这些前端巨佬&#xff09;&#xff1a; HTML流光爱心_爱心代码html-CSDN博客 本来想着自己看下这个源代码能不能实现&#xff0c;看了下源代码其实非常复杂。 在看代码的过程中发现&#xff0c;源代码里边给出…

多线程(二):创建线程关键属性终止线程

目录 1、run & start 2、Thread类常见的属性和方法 2.1 构造方法 2.2 属性 3、后台进程 & 前台进程 4、后台线程的判断和设定——isDaemon & setDaemon 5、线程是否存活——isAlive 6、终止一个线程 6.1 lambda变量捕获 6.2 currentThread & isInterr…

使用three.js 实现蜡烛效果

使用three.js 实现蜡烛效果 import * as THREE from "three" import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"var scene new THREE.Scene(); var camera new THREE.PerspectiveCamera(60, window.innerWidth / window.in…