agent开发之oneAgent
创始人
2025-06-01 10:40:09
0

agent-one 集成多个agent为一个agnet的工具集成包

背景

当前存在多个Agent:JMX、skywalking、在线压测、安全agent等

多Agent存在,每个Agent的注入方式、加载参数加载顺序不固定,用户注入过程复杂。
没有统一的状态监控界面,不利于管理。

oneagent 需要支持的 功能:
支持加载指定目录下的jar,并执行其指定的agentStartMethod,默认是premain
支持指定加载的agent顺序。通过agentEnableList设置
支持用户设置classLoader 的类型,默认是系统类加载器
支持将jar包添加到bootstrap里面
支持设置jvm参数、agent args运行参数

设计

整体包结构设计

在这里插入图片描述

整体流程

在这里插入图片描述

配置设计

系统配置加载优先级

项目启动的时候会加载系统配置agent_one_sys-{agent_env}.properties。 可以通过-Dagent_env 设置环境
加载优先顺序:
1 jvm参数/系统环境变量中的sys_config_path
2 {agent jar所在路径}/agent-one/agent-conf/
3 {agent jar包内部}/META-INF/agentone/


系统配置内容

系统配置的配置项都可以支持环境变量/jvm -D参数设置

# 启动列表,多个agent逗号分隔
agent_enable_list=jmx
# agent的默认配置目录,会去加载xx_agent_conf.properties文件
agent_default_conf_dir=#{agent_one_class_path}/agent-one/agent-conf/
# 全局设置 是否以线程方式启动agent
agent_default_enable_thread=true
#类加载器类型 system:系统类加载器  url:自定义的urlClassLoader  默认是system
agent_default_class_type=system# agent的配置路径,可以在系统配置里面配置某个agent的配置 格式:{agent名称}.{配置属性}
# 定制插件配置地址
jmx.conf_dir=#{agent_one_class_path}/agent-one/agent-conf/
jmx.agent_path=#{agent_one_class_path}/agent-one/agent-modules/jmx_prometheus_javaagent-0.16.2-SNAPSHOT.jar
# agent的类名称
jmx.agent_class_name=io.prometheus.jmx.shaded.io.prometheus.jmx.JavaAgent
# agent的参数
jmx.agent_param=19090:#{jmx_agent_class_path}/config.yaml
# agent的启动函数
jmx.agent_start_method=premain
jmx.jvm_param=
#internal 内部的 agent 外部agent  file 文件  url 下载文件
jmx.agent_type=agent
# 文件/下载地址
jmx.filePath=

agent配置

加载完系统配置根据agent_default_conf_dir/xx.conf_dir配置的目录地址加载xx_agent_conf.properties文件,如果文件不存在则不加载。


不支持环境变量/jvm -D参数设置

agent配置内容

name=jmx
agent_path=#{agent_one_class_path}/agent-one/agent-modules/jmx_prometheus_javaagent-0.16.2-SNAPSHOT.jar
# agent的类名称
agent_class_name=io.prometheus.jmx.shaded.io.prometheus.jmx.JavaAgent
# agent的参数
agent_param=19090:#{jmx_agent_class_path}/config.yaml
# agent的启动函数
agent_start_method=premain
jvm_param=
#internal 内部的 agent 外部agent  file 文件  url 下载文件
agent_type=agent
# 文件/下载地址
file_path=

配置环境变量支持

  • 格式#{lable}
  • 系统的环境变量、jvm -D参数都支持
  • “#{agent_one_class_path} 代表整个agent one的jar包路径”
  • “#{xx_agent_class_path} 代表 xx agent的jar包路径,例如#{jmx_agent_class_path}”

配置优先级


系统配置支持jvm和环境变量设置,agent配置不支持

例如:可以通过jvm参数或者系统环境变量设置agent_enable_list 来控制启动agent列表


jvm > 系统环境变量 > agent配置 > 系统配置

classLoder加载方式

类加载器类型 system:系统类加载器 url:自定义的urlClassLoader 默认是system

system: 使用系统的类加载器

url: 每个agent都新建一个URLClassLoader,其父类是Thread.currentThread().getContextClassLoader()。

第三方插件接入方式

方式一:url下载方式

  • 配置自己的下载agent的脚本,放到文件服务器(oss)
  • 将下载地址配置到agent的配置文件中
  • 新agent的配置文件,可以通过xx.conf_dir 环境变量设置。或者直接内置到agent的包
  • agent_enable_list 开启agent

安全iast接入agent配置案例:

name=iast
agent_path=/app/deploy/iast/agent.jar
agent_class_name=cn.xmirror.iast.agent
agent_jvm_param=xmiast.ip=xxx;xmiast.port=xxxx;xmiast.projectname=#{SYSTEM_CODE}+#{SERVICE_NAME};xmiast.writeconfig=false;xmiast.nodename=#{IMAGE_ADDRESS}
agent_start_method=premain
agent_class_type=system
agent_type=url
agent_file_path=http://itao-ujp-core-shenzhen-xili1-oss.sit.sf-express.com:8080/v1/AUTH_ITAO-UJP-CORE/ujp/iast.sh

方式二:挂载file方式

  • 配置自己的下载agent的脚本,挂载到k8s
  • 将file地址配置到agent的配置文件中
  • 新agent的配置文件,可以通过xx.conf_dir 环境变量设置。或者直接内置到agent的包
  • agent_enable_list 开启agent

安全iast接入agent配置案例:

name=iast
agent_path=/app/deploy/iast/agent.jar
agent_class_name=cn.xmirror.iast.agent
agent_jvm_param=xmiast.ip=xxxx;xmiast.port=xxxx;xmiast.projectname=#{SYSTEM_CODE}+#{SERVICE_NAME};xmiast.writeconfig=false;xmiast.nodename=#{IMAGE_ADDRESS}
agent_start_method=premain
agent_class_type=system
agent_type=file
agent_file_path=/app/deploy/iast.sh

系统配置类

package com.sf.cnp.agent.config;import java.util.List;
import java.util.Map;public class SysConfig {/*** 启动agent列表*/List agentEnableList;/*** agent所在的默认路径*/String agentConfDir;/*** key:agentName  value:AgentConfig*/Map agentConfigMap;/*** 以线程方式启动*/String enableThread;/*** 类加载器类型 system:系统类加载器  url:自定义的urlClassLoader*/String classLoaderType;
}

某个agent的配置类

package com.sf.cnp.agent.config;public class AgentConfig {String name;/*** 配置目录*/String confDir;/*** agent jar路径*/String agentPath;/*** agent class name*/String agentClassName;/*** 参数*/String agentParam;/*** jvm参数*/String jvmParam;/*** 启动方法*/String agentStartMethod;/*** 销毁方法*/String agentStopMethod;/*** internal 内部的 agent 外部agent  file 文件  url 下载文件*/String type;/*** file 或url地址*/String filePath;/*** 以线程方式启动*/String enableThread;/*** 类加载器类型 system:系统类加载器  url:自定义的urlClassLoader*/String classLoaderType;/*** 是否加到bootstrap path*/String addBootStrapPath;public AgentConfig(){//默认值this.type = "agent";this.agentStartMethod = "premain";this.addBootStrapPath = "false";}}

相关内容

热门资讯

家装预付资金安全困局如何破解,... 家装预付资金安全困局如何破解 专家提出:建立“先验收后付款”装修资金存管制度 预交数万元甚至数十万元...
工行安康解放路支行积极开展《反... 为深入贯彻落实《国家金融监督管理总局安康监管分局办公室关于开展<反有组织犯罪法>宣传活动的通知》要求...
重庆公布育儿补贴制度实施方案 原标题:每孩每年3600元 重庆公布育儿补贴制度实施方案 11月21日,记者了解到,市卫生健康委、市...
十五运会组委会在深总结本届赛事... 深圳新闻网2025年11月22日讯(深圳报业集团记者 林炜航)11月21日,十五运会组委会在深圳市民...
中国军视网:日本妄言击沉福建舰... 本文转自【中国军视网】; 日本首相高市早苗发表涉台错误言论,公然挑战一个中国原则,甚至还有日本无知政...
重磅!东莞长安50万㎡产城发布... 在当下竞争激烈的市场环境中,中小企业如何突破成本压力,找到一片既能扎根成长又能眺望未来的理想栖息地?...
毕马威:政策、资本等多维着力 ... 由毕马威联合长三角G60科创走廊创新研究中心主办的“长三角高端装备新质领袖榜单发布仪式”于11月21...
河曲县开展驻村帮扶工作政策业务... 来源:河曲县融媒体中心 近日,我县组织开展驻村帮扶工作政策业务集中培训,进一步提升驻村帮扶干部...
羽绒服涨价与猪肉降价有关?经济... 中央气象台发布统计信息,14日至17日,我国今年下半年首轮大范围寒潮天气即将自西向东影响我国,多地降...
周勇,任上落马 11月21日,中央纪委国家监委网站发布通报: 国家能源集团乌海能源党委书记、董事长周勇涉嫌严重违纪违...