进程命名规则
UniAgent会对进程命名,用于报表展示。
说明:Kubernetes启动Docker时,Docker里的进程必须是自启动方式才可以正确地进程命名,自启动是指在Docker容器启动的同时,Docker内的应用进程跟随Docker容器一起启动。
Java进程自动命名规则
Jar的默认命名(顺序优先):
- jar包中MANIFEST.MF文件里的Start-Class
- jar包中MANIFEST.MF文件里的Main-Class
- jar包的文件名去除".jar"
Tomcat默认命名(顺序优先):
- webapps目录下有war包或war的解压目录,且web.xml中含有web-display-name,取前三个web.xml的web-display-name用"_"拼接。
- webapps目录下有war文件,取前三个文件的文件名去除".war"后用"_"拼接。
- tomcat所在目录名。
Glassfish默认命名(顺序优先):
- autodeploy目录下有war包或war的解压目录,且web.xml中含有web-display-name,取前三个web.xml的web-display-name用"_"拼接。
- autodeploy目录下有war文件,取前三个文件的文件名去除".war"后用"_"拼接。
- glassfish所在目录名。
Jetty默认命名(顺序优先):
- webapps目录下有war包或war的解压目录,且web.xml中含有web-display-name,取前三个web.xml的web-display-name用"_"拼接。
- webapps目录下有war文件,取前三个文件的文件名去除".war"后用"_"拼接。
- jetty所在目录名。
Resin默认命名(顺序优先):
- webapps目录下有war包或war的解压目录,且web.xml中含有web-display-name,取前三个web.xml的web-display-name用"_"拼接。
- webapps目录下有war文件,取前三个文件的文件名去除".war"后用"_"拼接。
- resin所在目录名。
WebLogic默认命名:Runtime[domainName] Cmdline[Weblogic.Name]
Websphere默认命名:applications目录下有ear文件,取前三个文件的文件名去除".ear"后用"_"拼接。
WildFly默认命名(顺序优先):
- deployments目录下有war包或war的解压目录,且web.xml中含有web-display-name,取前三个web.xml的web-display-name用"_"拼接。
- deployments目录下有war文件,取前三个文件的文件名去除".war"后用"_"拼接。
- wildfly所在目录名。
.NET Core进程自动命名规则
取启动脚本.dll的文件名作为进程名。
C/C++ SDK进程自动命名规则
取可执行文件名+路径的hash值
作为进程名。
自定义进程名称
当自动命名方式不能满足进程命名需求时,您还可以通过naming.yml配置文件自定义进程命名规则,对命名日志中的字段进行匹配,最终将进程名修改为符合您需要的形式。进程名称支持中文、英文、空格、特殊字符等,最大长度为128字节。
自定义命名规则配置说明
naming.yml文件中各个字段的说明如下:
NamingRuleGroups: 根节点,命名规则组集合,可以配置多个规则组
- NAMING_RULE_GROUP
...
NAMING_RULE_GROUP: 命名规则组
Container: CONTAINER_NAME (必填)容器的名称,日志中圆括号里的文字为容器名称,例如:2021-03-30 14:46:16.016[INFO] [21029] Provider(Tomcat) Data:
NamingRules: 命名规则集合,匹配的规则参与命名
- NAMING_RULE
NamingJoin: NAMING_JOIN 当取值出现多个值的情况下,多个值间的连接字符。默认为""。
NAMING_RULE: 命名规则
From: DATA_DIMENSION (必填)数据的维度,当前提供的维度有:Cmdline、Local、Env、FileInfo。日志中有输出每个维度的值,每个维度都是一个Map,指定维度后可以配置这个维度内的KEY参与命名。在日志中FileInfo以数组的形式进行输出,在配置的时候直接配置为FileInfo,命名时会遍历该数组搜索Key。
Match: 匹配
Key: MATCH_KEY (必填)在指定的数据维度内匹配的Key,日志中冒号前的字段名称为数据维度内的Key,例如在Cmdline={"catalina.base":"/opt/software/apache-tomcat-8.0.24-8080","catalina.home":"/opt/software/apache-tomcat-8.0.24-8080","classpath":"","java.endorsed.dirs":"/opt/software/apache-tomcat-8.0.24-8080/endorsed","java.io.tmpdir":"/opt/software/apache-tomcat-8.0.24-8080/temp","mainClass":"org.apache.catalina.startup.Bootstrap", ...}中,catalina.base、catalina.home等为数据维度内的key。
MatchType: MATCH_TYPE (必填)匹配方式,取值范围:contains(包含)、equals(等于)、regex (正则匹配)。如果判断MATCH_KEY是否存在,则设置为contains。
MatchValue: MATCH_VALUE (必填)匹配值。如果判断MATCH_KEY是否存在,则设置为空串。
Naming: 命名
Key: NAMING_KEY (选填)与命名的维度中的KEY。如果直接指定命名值,将NAMING_KEY设置为空串,或删除NAMING_KEY节点。
Default: NAMING_DEFAULT (选填)命名默认值。当设置的Key不存在时,使用默认值参与命名。
MaxValueCount: NAMING_MAX(选填)取值个数,默认不限制。当参与命名的Key取值出现多个时,可以用此值限制取前几个参与命名。
Replace: 替换
"/opt/software/": ""
...
自定义命名配置步骤
下面以一个举例,来说明如何实现自定义进程名称。
使用 /opt/tingyun-oneagent/lib/agenthelper获取命名日志,必须指定进程号,执行如下命令:
/opt/tingyun-oneagent/lib/agenthelper --naming --show-log <PID>
根据该进程的命名日志中Provider Data中的信息进行命名,日志的最后一段如下:
2021-03-30 14:46:16.016[INFO] [21029] Provider(Tomcat) Data: Cmdline={"catalina.base":"/opt/software/apache-tomcat-8.0.24-8080","catalina.home":"/opt/software/apache-tomcat-8.0.24-8080","classpath":"","java.endorsed.dirs":"/opt/software/apache-tomcat-8.0.24-8080/endorsed","java.io.tmpdir":"/opt/software/apache-tomcat-8.0.24-8080/temp","mainClass":"org.apache.catalina.startup.Bootstrap", ...} Local={"containerName":"Tomcat","cwd":"/opt/software/apache-tomcat-8.0.24-8080","exe":"/opt/jdk1.8.0_261/bin/java","httpPort":"8080","lastPathName":"apache-tomcat-8.0.24-8080","name":"java"} Env={"CATALINA_OPTS":"-javaagent:/home/xxx/Tingyun/docker_shared/tingyun/tingyun-agent-java.jar","CINNAMON_VERSION":"4.8.6","CLASSPATH":"/opt/software/apache-tomcat-8.0.24-8080/bin/bootstrap.jar:/opt/software/apache-tomcat-8.0.24-8080/bin/tomcat-juli.jar","CLUTTER_IM_MODULE":"fcitx", ...} FileInfo[0]={"fileName":"browser_java_test","isDir":"true","web-display-name":"Archetype Created Web Application"} FileInfo[1]={"Build-Jdk":"1.8.0_261","Built-By":"xxx","Created-By":"IntelliJ IDEA","Manifest-Version":"1.0","fileName":"browser_java_test.war","isDir":"false","web-display-name":"Archetype Created Web Application"} {"Status":"success","Result":"[{\"Flag\":\"Tomcat\",\"Name\":\"browser_java_test\",\"Pid\":21029,\"PodName\":\"\"}]"}
接下来您需要在naming.yml中配置进程命名规则。
配置文件路径:/opt/tingyun-oneagent/conf/naming.yml
配置示例:
NamingRuleGroups: - Container: Tomcat NamingRules: - From: Cmdline Match: Key: catalina.base MatchType: contains MatchValue: apache-tomcat-8.0.24-8080 Naming: Key: catalina.base Replace: "/opt/software/apache-tomcat-8.0.24-8080": "Tingyun_Test"
经过上述匹配后,最终进程名称将变为Tingyun_Test。
注意事项
- 用户执行agenthelper命令时需要使用和进程相同的用户来执行。
- naming.yml 修改完成后,刷新时间大概在1分钟内。
- naming.yml 修改完成2分钟后,再重启应用进程,应用的名称将显示为根据yml定义的名称。
- naming.yml使用YAML格式描述,结构层次使用“两个空格”进行缩进,需要严格按照YAML规范进行修改,否则可能会导致文件加载失败。