SkyWalking阅读笔记之启动流程分析-初始化配置

<本人的第一篇笔记,仅供个人回顾使用>          2000字警告!!

声明:阅读这个文章需要先了解javaAgent是个什么东西以及能做什么用,skywalking也是基于javaAgent来做基于Jvm层面的AOP,   

接着我们直接开始吧!

1.首先我们需要找到入门premain方法,也就是入口,找到下图文件夹中的SkyWalkingAgent启动类

SkyWalking阅读笔记之启动流程分析-初始化配置

 2.接着我们从这个类进入,找到最重要的方法Premain(),可以看到有两个重要的参数,第一个是参数信息,第二个是Instrumentation的实例,这个接口的方法提供了 能注册类文件转换器、获取所有已加载的类等功能,允许我们在对已加载和未加载的类进行修改,实现 AOP、性能监控等功能

SkyWalking阅读笔记之启动流程分析-初始化配置

 这个premain()方法大体可以分为五个步骤: 

1.初始化配置

2.加载插件

3.定制Agent

4.加载服务

5.注册关闭钩子

3.接下来我会单独每一个进行分析,本篇文章先介绍初始化配置

1.初始化配置:

SkyWalking阅读笔记之启动流程分析-初始化配置

 根据方法名,我们就可以看出这是用来初始化配置的,传入的参数是premain()的入参数agentArgs,接着我们点进去看看,

SkyWalking阅读笔记之启动流程分析-初始化配置

 首先我们可以看到这个方法的注释,翻译下来的大体的意思是

如果设置了指定的agent的配置路径,agent将尝试定位指定的agent配置。 如果没有设置指定的agent配置路径,将尝试定位`agent.config`,它应该在agent包的/config 目录中。


还尝试通过 system.properties 覆盖配置。 这个地方的所有键都应该以ENV_KEY_PREFIX 。 例如在 env `skywalking.agent.service_name=yourAppName` 中覆盖配置文件中的 `agent.service_name`。


最后,`agent.service_name` 和 `collector.servers` 不能为空。

方法的大体意思是加载指定的配置文件或默认配置文件并返回inputStreamReader流,再使用properties来加载流,接着遍历里面的k-v,并完成里面的配置值的占位符的替换

接着我们点进loadConfig()方法进去看看

SkyWalking阅读笔记之启动流程分析-初始化配置

SkyWalking阅读笔记之启动流程分析-初始化配置

注释也写了,会先去看看是否配置了SPECIFIED_CONFIG_PATH,如果没有则去默认路径去寻找,默认路径为/config/agent.config

讲完了上面部分的方法,我们接着往下initializeCoreConfig()的下面部分

SkyWalking阅读笔记之启动流程分析-初始化配置

我们点进去看看overrideConfigBySystemProp()这个方法

SkyWalking阅读笔记之启动流程分析-初始化配置

 方法上的注释大体意思是 通过systemProperties来覆盖config。 属性的key必须以`skywalking`开头,结果应该和`agent.config`一样
如:`agent.service_name`的属性键应该是`skywalking.agent.service_name

可以看到方法中会判断key是否是以skywalking开头,并截取真正的key然后重新放入properties中

接着分析agent参数形式

SkyWalking阅读笔记之启动流程分析-初始化配置

 接着点进overrideConfigByAgentOptions(agentOptions)这个方法

SkyWalking阅读笔记之启动流程分析-初始化配置

再点进parseAgentOptions(agentOptions)中

SkyWalking阅读笔记之启动流程分析-初始化配置

可以看到就是字符串参数进行截取解析并放入集合中,然后再overrideConfigByAgentOptions方法结尾处可以看到获取遍历的结果并  会放入到properties文件中

这行代码来实现 AGENT_SETTINGS.put(terms.get(0), terms.get(1));

接下来

SkyWalking阅读笔记之启动流程分析-初始化配置initializeConfig(Config.class);这个方法需要传入一个Config类,我的理解将之前的properties中设置的那些属性来设置到Config类中,Config类中的有多个静态内部类

SkyWalking阅读笔记之启动流程分析-初始化配置

SkyWalking阅读笔记之启动流程分析-初始化配置

可以看到定义了很多属性,也就是我们可以配置的一些属性值 

接着点开  initializeConfig(Config.class)方法,可以看到作用就是将properties文件里面的属性映射到Config类中

SkyWalking阅读笔记之启动流程分析-初始化配置

 接下里就是来重新设置日志解析器SkyWalking阅读笔记之启动流程分析-初始化配置

SkyWalking阅读笔记之启动流程分析-初始化配置

SkyWalking阅读笔记之启动流程分析-初始化配置

在最后会标记配置加载完成,

文章的最后做个总结

加载步骤如下:

1.加载配置信息:/config/agent.config         ->        系统环境变量        ->         Agent参数         

 优先级是从后往前 即 agent参数>系统环境变量>/config/agent.config

2.将配置信息映射到Config类

3.根据配置信息重新指定日志解析器

4.标记配置加载完成

 

 

 

 

 

 

 

 

 

上一篇:Kubernetes APM链路追踪Skywalking


下一篇:SkyWalking 监控告警