SkyWalking Java Agent 配置初始化流程分析

Skywalking启动加载过程 搭建文档:https://www.jianshu.com/p/ec8ef2b91e92 本次讲解版本:apache-skywalking-apm-8.5.0 1 Skywalking整体架构 主要组成:UI(数据显示)、Storage(存储层)、Agent(客户端数据收集)、OAP(服务端数据接受处理) 2源码解析如下 首先skywalking用的是javaagent技术,入口为:org.apache.skywalking.apm.agent.SkyWalkingAge... 阅读详情

基于 SkyWalking Java Agent 8.8.0 版本

今天我们要分析的是 SkyWalking Java Agent 配置相关内容,我们接触到的框架大都需要一些配置文件,比如 SpringBoot 中的 application.yml。 SkyWalking Java Agent 在 premain 方法中首先做的就是通过 SnifferConfigInitializer.initializeCoreConfig(agentArgs); 初始化核心配置。

/**
 * The main entrance of sky-walking agent, based on javaagent mechanism.
 */
public class SkyWalkingAgent {
    private static ILog LOGGER = LogManager.getLogger(SkyWalkingAgent.class);

    /**
     * Main entrance. Use byte-buddy transform to enhance all classes, which define in plugins.
     */
    public static void premain(String agentArgs, Instrumentation instrumentation) throws PluginException {
        final PluginFinder pluginFinder;
        try {
            SnifferConfigInitializer.initializeCoreConfig(agentArgs);
        } catch (Exception e) {
            // try to resolve a new logger, and use the new logger to write the error log here
            LogManager.getLogger(SkyWalkingAgent.class)
                    .error(e, "SkyWalking agent initialized failure. Shutting down.");
            return;
        } finally {
            // refresh logger again after initialization finishes
            LOGGER = LogManager.getLogger(SkyWalkingAgent.class);
        }
        // 省略部分代码....
        
    }
    // 省略部分代码....
}        
复制代码

今天我们要重点分析的就是这行代码的内部实现

SnifferConfigInitializer.initializeCoreConfig(agentArgs);
复制代码

初始化核心配置

SnifferConfigInitializer 类使用多种方式初始化配置,内部实现有以下几个重要步骤:

skywalking-java-config.png

1.loadConfig() 加载配置文件

  • 从指定的配置文件路径读取配置文件内容,通过 -Dskywalking_config=/xxx/yyy 可以指定配置文件位置;
  • 如果没有指定配置文件路径,则从默认配置文件 config/agent.config 读取;
  • 将配置文件内容加载到 Properties;
/**
 * Load the specified config file or default config file
 *
 * @return the config file {@link InputStream}, or null if not needEnhance.
 */
private static InputStreamReader loadConfig() throws AgentPackageNotFoundException, ConfigNotFoundException {
    // System.getProperty() 读取 Java 虚拟机中的系统属性, Java 虚拟机中的系统属性在运行Java程序的时候通过 java -Dk1=v1 配置.
    String specifiedConfigPath = System.getProperty(SPECIFIED_CONFIG_PATH);
    // 使用指定的配置文件或默认的配置文件, AgentPackagePath.getPath() 获取 skywalking-agent.jar 所在目录
    File configFile = StringUtil.isEmpty(specifiedConfigPath) ? new File(
        AgentPackagePath.getPath(), DEFAULT_CONFIG_FILE_NAME) : new File(specifiedConfigPath);

    if (configFile.exists() && configFile.isFile()) {
        try {
            LOGGER.info("Config file found in {}.", configFile);

            return new InputStreamReader(new FileInputStream(configFile), StandardCharsets.UTF_8);
        } catch (FileNotFoundException e) {
            throw new ConfigNotFoundException("Failed to load agent.config", e);
        }
    }
    throw new ConfigNotFoundException("Failed to load agent.config.");
}
复制代码

2.replacePlaceholders() 解析占位符 placeholder

  • ​从配置文件中读取到的配置值都是以 placeholder 形式(比如 agent.service_name=${SW_AGENT_NAME:Your_ApplicationName})存在的,这里需要将占位符解析为实际值。
/**
 * Replaces all placeholders of format {@code ${name}} with the corresponding property from the supplied {@link
 * Properties}.
 *
 * @param value      the value containing the placeholders to be replaced
 * @param properties the {@cod
Skywalking原理篇(一):Agent 启动流程解析 Java Agent简介 什么是Java Agent Java Agent本质上可以理解为一个插件,该插件就是一个特制的Jar包。这个Jar包通过JVMTI(JVM Tool Interface)完成加载,最终借助JPLISAgent(Java Programming Language Instrumentation Services Agent)完成对目标代码的修改 如何实现一个Java Agent 实现Agent启动方法 Java Agent 支持目标JVM启动时加载以及JVM运行时加载,这两种不 阅读详情

相关推荐

Skywalking Agent原理剖析

Skywalking Agent原理剖析Skywalking Agent原理剖析1 agent原理1.1 Java Agent1.2 定义自己的agent Skywalking Agent原理剖析 1 agent原理 使用Skywalking的时候,并没有修改程序中任何一行 Java 代码,这里便使用到了 Java Agent 技术,我们接下来展开对Java Agent 技术的学习。 1.1 Java Agent Java Agent 是从 JDK1.5 开始引入的,算是一个比较老的技术了。作为 Java

m0_46690280的博客 6901

SkyWalking java-agent 是如何工作的,自己实现一个监控sql执行耗时的agent

Java Agent 是 Java Instrumentation API 的一个强大功能,它允许你在运行时修改 Java 应用程序的行为。它们通常用于性能分析、监控和修改应用程序的执行。 Apache SkyWalking 是一个开源的应用性能监控 (APM) 工具,支持分布式系统的追踪、监控和诊断。SkyWalking Agent 是其中的一个重要组件,用于在服务端应用中收集性能数据和追踪信息,并将其发送到 SkyWalking 后端服务器进行处理和展示。

zfj321的博客 1534

10分钟快速搭建 SkyWalking 服务

SkyWalking 是什么?FROM分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

XT4625的专栏 984

Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking

Apache SkyWalking是一个开源的分布式追踪与性能监视平台,特别适用于微服务架构、云原生环境以及基于容器(如Docker、Kubernetes)的应用部署。该项目由吴晟发起,并已加入Apache软件基金会的孵化器,现已成为顶级项目之一。核心特性与功能包括:分布式追踪:提供从终端用户请求到后端服务的完整调用链路视图,帮助开发者快速定位分布式系统中的性能瓶颈和错误根源。性能监控:收集并分析服务及服务间调用的性能指标,如响应时间、吞吐量、错误率等,支持服务级和接口级的监控。服务网格观测。

m0_74825223的博客 1730

skywalking 插件源码分析

skywalking 插件源码分析一、总览1.1 启动1.2 写一个插件1.2.1 定义拦截规则1.2.2 配置插件定义1.2.3 实现一个拦截器1.2.4 一个现成的插件二. 源码分析2.1 源码位置2.2 启动流程2.1.1 启动&处理启动参数2.1.2 加载插件1. 获取 SystemClassloader2. 设置路径集合:3. 搜索插件jar包中"skywalking-plugin.def"4. 加载skywalking-plugin.def内容5. * Instrumet类简介6.* 切

wanxiaoderen的博客 3937

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

skywalking服务日志存储到apache-skywalking-apm-bin-es7/logs中。sh apache-skywalking-apm-bin-es7/bin/startup.sh 启动。bin: 各种启动脚本,⼀般使⽤脚本startup.*来启动web⻚⾯和对应的后台应⽤;webapp: UI前端(web监控⻚⾯)的jar包配置⽂件。config:启动后台应⽤程序的配置⽂件。:组合脚本,同时启动oapServer.启动成功后会启动两个服务,⼀个是。

m0_71777195的博客 2091

基于KubeGems可视化搭建SkyWalking

本文用于指导用户在 KubeGems 中快速部署并运行 SkyWalking服务,用户可在研发环境中快速启用此功能来验证 APM 相关功能。更多关于KubeGems 与 SkyWalking 的配置优化,我们会持续更新,敬请关注

666

Spring Boot项目如何优雅集成SkyWalking Agent?从日志收集到链路追踪的完整配置(附Logback示例)

本文详细介绍了如何在Spring Boot项目中优雅集成SkyWalking Agent,实现从日志收集到链路追踪的完整配置。通过Logback示例和最佳实践,帮助开发者解决日志与链路关联、TraceId显示不全等常见问题,提升微服务系统的可观测性。

cumi6497的博客 539

SpringBoot项目如何用SkyWalking Java Agent实现零侵入监控?附10.0.0版本配置详解

本文详细介绍了如何在SpringBoot项目中通过SkyWalking Java Agent实现零侵入式应用监控。文章以10.0.0版本为例,深入解析了其无侵入原理、核心配置步骤,并提供了与Nacos服务发现集成的实战指南,帮助开发者构建高效、灵活的生产级监控体系。

weixin_29304985的博客 279

基于 SkyWalking 的全链路监控与性能调优

本文介绍了电信网络优化平台如何利用Apache SkyWalking构建全链路可观测性体系。针对传统日志排查效率低下的问题,方案通过无侵入式探针技术,实现了从Vue3前端到SpringCloudAlibaba后端,再到数据库的全链路监控。重点阐述了SkyWalking在Java生态中的优势,包括后端Agent接入配置、前端JS探针集成方法,以及如何通过Trace追踪、拓扑分析和性能监控快速定位系统瓶颈(如SQL慢查询、服务依赖问题)。该方案显著提升了故障排查效率,为系统优化提供了数据支撑,最终实现了从经验驱

老谢的专栏 863

K8S中安装SkyWalking,使用 sidecar 将 pod 接入链路追踪

注意查看cert-manager和K8S支持的对应版本。我的 k8sv1.28.2,cert-manager。下载 cert-manager.yaml 文件,执行。

mengting2040的博客 1394

SkyWalking全链路追踪:原理、配置与生产实践

分布式系统监控是现代微服务架构的关键需求,全链路追踪技术通过记录请求在服务间的完整路径,帮助开发者快速定位性能瓶颈。作为APM(应用性能管理)领域的开源解决方案,SkyWalking采用字节码增强技术实现零侵入监控,支持Java、Go等多语言生态。其核心原理是通过探针采集Span数据,在服务端构建调用链拓扑,最终以可视化形式呈现。相比Zipkin等工具,SkyWalking在性能损耗(实测仅2-3%)和功能完备性上表现突出,特别适合电商、金融等高并发场景。本文详解从环境搭建、存储选型到生产部署的全流程,包含

anvt77205的博客 405

保姆级教程:在CentOS 7上搞定SkyWalking 9.5.0 + Elasticsearch 8.5.3的完整部署流程

本文提供在CentOS 7上部署SkyWalking 9.5.0与Elasticsearch 8.5.3的完整流程,涵盖环境准备、ES深度配置、SkyWalking核心组件部署及生产环境调优。通过详细步骤和实战技巧,帮助开发者快速搭建稳定的APM监控系统,提升分布式系统性能分析能力。

crhwkrhpunow61910的博客 416

SkyWalking Agent日志采集与插件实战指南

日志与链路追踪的关联是分布式系统可观测性的核心基础。其原理在于通过字节码增强技术,在日志框架(如Logback、Log4j2)运行时主动注入Trace上下文,实现traceId、spanId等字段的自动染色与跨线程传播。这一机制的技术价值在于打通APM与日志系统,支撑错误根因定位、全栈调用分析和SLO精准度量。典型应用场景包括Spring Boot微服务、Dubbo异步调用、ShardingSphere分库分表SQL日志关联等。而实际落地成败,高度依赖SkyWalking Agent的日志采集能力是否生效、

weixin_32576389的博客 212

校招总结—FPGA从入门到放弃

校招总结—FPGA从入门到放弃 感谢咸鱼FPGA的授权转发,原文地址为https://www.cnblogs.com/xianyufpga/ 其实 offer 早就定下来了,最近忙着入党考试,现在才腾出时间来写个总结。我校招开始于 7 月底,算是比较晚了,后面加了各大校招交流群,发现很多同学都是过完年后就开始打磨项目、复习基础、寻找实习。对比之下我这准备确实仓促,不过结果还算满意。 ...

qq_31515205的博客 8605

有史以来最小的GIF/png/jpg/jpeg

昨天我对图像进行了 base64 编码,这样我就可以将它发送到 CouchDB 以测试我正在为客户编写的一些代码。它让我想起了我之前在远程服务器上设置 cookie 时所做的事情。基本上,一个小的 PHP 脚本被放在远程服务器上,它接受几个 GET 参数并根据它们的值设置一些 cookie。然后脚本输出一个 1x1 的透明 GIF。本地服务器上的 PHP 脚本生成了一个 IMG 标签,该标签链接到该图像并根据本地服务器上的 COOKIES 设置参数。

凌凌1301的博客 1417

一文搞懂 Transformer 工作原理 !!

本文将从单头Attention工作原理多头Attention工作原理全连接网络工作原理三个方面,实现一文搞懂Transformer的工作原理。Transformer工作原理。

不要给自己设限,尝试更多可能(思所向 皆可往) 2990

从零到一:STM32G431的DSP库集成与FFT实战避坑指南

本文详细介绍了在STM32G431微控制器上集成CMSIS-DSP库并进行FFT实战开发的完整流程。重点解析了通过CubeMX和Keil环境配置DSP库的关键步骤、编译器宏定义陷阱及解决方案,并提供了FFT算法优化、内存管理及常见问题诊断的实用技巧,帮助开发者高效实现嵌入式信号处理应用。

oauth7security的博客 768

qq对接openclaw,通过qq发送命令

把 OpenClaw 接入 QQ 和微信,目前主流的微信文章和教程主要提供了两种截然不同的路径。我为你梳理了它们的核心区别和关键步骤,你可以根据自己的需求来选择。

suny8的专栏 270

Android 车联网——CarAudioService介绍(六)

CarAudioService 是 Android Automotive OS 中的一个重要组件,用于管理车辆中的音频功能。它是 Android Auto 的一部分,负责处理车辆音频的播放、控制和路由。CarAudioService 使用标准的 Android 组件架构,基于 Binder 通信机制,提供了一组 API,用于管理车辆音频。它包括以下主要功能:音频路由管理:CarAudioService 可以让开发者控制音频的路由,即将音频发送到不同的输出设备,例如车辆的扬声器、耳机等。

小旭的专栏 3201

第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

🥏第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3867

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 基于Netty手写一个远程连接Redis的IDEA插件
下一篇: Mybatis拦截器安全加解密MySQL数据实战
superjava_
博客等级 码龄5年 254粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值