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";}}

相关内容

热门资讯

2025深圳最新购房政策汇总! 深圳最新的购房政策是如何的? 今日小编为大家整理 2025年深圳买房政策汇总 大家一起来看看 一、...
南昌南斯友好路两家“海湾石油”... 今天(2日)上午 多名消费者向《都市现场》反映 他们在南昌南斯友好路上的两家“海湾石油” 预付充值了...
曝拜仁与莱奥密谈!AC米兰索要... 足坛转会市场再起波澜!德甲巨无霸拜仁慕尼黑,这次将目光投向了亚平宁半岛,盯上了AC米兰的王牌边锋——...
曼联2500万甩卖“铁腰”,那... 提起苏格兰中场斯科特·麦克托米奈,如今的足坛可谓是无人不知,无人不晓。但就在2024年夏天,当曼联以...
行驶中推送广告、恶意更新隐私政... 深蓝汽车法务部今日(6 月 2 日)发布声明提出,部分网络内容发布 “深蓝汽车在行驶过程中推送广告严...
德国银行高管:美政府政策频繁变... 根据德国《商报》6月2日刊发的专访文章,德国国家开发银行复兴信贷银行董事会主席斯特凡·温特尔斯指出,...
过程不到2分钟!深夜母子潜入建... 前几天, 曲靖会泽一加气站内的井盖被盗, 幸好工作人员发现及时 才没造成人员受伤, 民警随即展开调查...
李亚鹏否认丽江项目失败,称开盘... 近日,李亚鹏在社交平台发视频辟谣丽江项目失败:丽江项目做得挺好的,在2015年开盘,就是丽江销售的第...
宝信软件(安徽)股份申请基于高... 金融界2025年6月2日消息,国家知识产权局信息显示,宝信软件(安徽)股份有限公司;清华大学申请一项...
曼联50年最差赛季引援告急!“... 曼联跌下神坛!50年最差赛季敲响警钟,球员宁投蓝军不来投,“梦剧场”光环褪色,新帅阿莫林能否力挽狂澜...