进程命名规则

UniAgent会对进程命名,用于报表展示。

说明:Kubernetes启动Docker时,Docker里的进程必须是自启动方式才可以正确地进程命名,自启动是指在Docker容器启动的同时,Docker内的应用进程跟随Docker容器一起启动。

Java进程自动命名规则

  • Jar的默认命名(顺序优先):

    1. jar包中MANIFEST.MF文件里的Start-Class
    2. jar包中MANIFEST.MF文件里的Main-Class
    3. jar包的文件名去除".jar"

    start_class

  • Tomcat默认命名(顺序优先):

    1. webapps目录下有war包或war的解压目录,且web.xml中含有web-display-name,取前三个web.xml的web-display-name用"_"拼接。
    2. webapps目录下有war文件,取前三个文件的文件名去除".war"后用"_"拼接。
    3. tomcat所在目录名。
  • Glassfish默认命名(顺序优先):

    1. autodeploy目录下有war包或war的解压目录,且web.xml中含有web-display-name,取前三个web.xml的web-display-name用"_"拼接。
    2. autodeploy目录下有war文件,取前三个文件的文件名去除".war"后用"_"拼接。
    3. glassfish所在目录名。
  • Jetty默认命名(顺序优先):

    1. webapps目录下有war包或war的解压目录,且web.xml中含有web-display-name,取前三个web.xml的web-display-name用"_"拼接。
    2. webapps目录下有war文件,取前三个文件的文件名去除".war"后用"_"拼接。
    3. jetty所在目录名。
  • Resin默认命名(顺序优先):

    1. webapps目录下有war包或war的解压目录,且web.xml中含有web-display-name,取前三个web.xml的web-display-name用"_"拼接。
    2. webapps目录下有war文件,取前三个文件的文件名去除".war"后用"_"拼接。
    3. resin所在目录名。
  • WebLogic默认命名:Runtime[domainName] Cmdline[Weblogic.Name]

  • Websphere默认命名:applications目录下有ear文件,取前三个文件的文件名去除".ear"后用"_"拼接。

  • WildFly默认命名(顺序优先):

    1. deployments目录下有war包或war的解压目录,且web.xml中含有web-display-name,取前三个web.xml的web-display-name用"_"拼接。
    2. deployments目录下有war文件,取前三个文件的文件名去除".war"后用"_"拼接。
    3. 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/": ""                
    ...

自定义命名配置步骤

下面举例说明如何实现自定义进程名称。

例1:按照Cmdline中参数catalina.base命名

  1. 使用 /opt/tingyun-oneagent/lib/agenthelper获取命名日志,必须指定进程号,执行如下命令:

    /opt/tingyun-oneagent/lib/agenthelper --naming --show-log <PID>
    
  2. 根据该进程的命名日志中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\":\"\"}]"}
    
  3. 接下来您需要在naming.yml中配置进程命名规则。

    配置文件路径:/opt/tingyun-oneagent/conf/naming.yml

    配置示例:

    NamingRuleGroups:
      - Container: Tomcat            # 对应Provider Data中Local的containerName
        NamingRules:
          - From: Cmdline            # 按照Cmdline命名
            Match:
              Key: catalina.base     # 如果Cmdline中的catalina.base匹配关键字成功,则按照Naming规则命名
              MatchType: contains
              MatchValue: apache-tomcat-8.0.24-8080
            Naming:
              Key: catalina.base     # 新名称从catalina.base取
            Replace:                 # 取完新名称还可以替换其中部分内容
              "/opt/software/apache-tomcat-8.0.24-8080": "Tingyun_Test"
    

    经过上述匹配后,最终进程名称预期变为Tingyun_Test

  4. 验证配置后的进程命名:执行命令 /opt/tingyun-oneagent/lib/agenthelper --naming --show-log <PID>,查看返回结果,其中 Result 中的 Name 即为新名称

例2:按照Jar包命名

  1. 使用 /opt/tingyun-oneagent/lib/agenthelper获取命名日志,必须指定进程号,执行如下命令:

    /opt/tingyun-oneagent/lib/agenthelper --naming --show-log <PID>
    
  2. 根据该进程的命名日志中Provider Data中的信息进行命名,日志的最后一段如下:

    2025-04-25 17:03:13.466[INFO] [4000] Provider(Jar) Data: 
    Cmdline={"-spring.cloud.nacos.config.namespace":"mall-248","-spring.cloud.nacos.config.server-addr":"http://192.168.1.248:8848","-spring.cloud.nacos.discovery.group":"DEFAULT_GROUP","-spring.cloud.nacos.discovery.namespace":"mall-248","-spring.cloud.nacos.discovery.server-addr":"http://192.168.1.248:8848","-spring.profiles.active":"prod","Xms512m":"","Xmx1024m":"","file.encoding":"utf-8","jar":""}
    Local={"containerName":"Jar","cwd":"/data/chaos-mall/mall-auth","exe":"/data/chaos-mall/base-java/jdk1.8.0_60/bin/java","mainJar":"mall-auth-1.0-SNAPSHOT.jar","name":"java"}
    Env={"HISTCONTROL":"ignoredups","HISTSIZE":"1000","HISTTIMEFORMAT":"%F %T","HOME":"/root","HOSTNAME":"pm3","JAVA_HOME":"/data/chaos-mall/base-java/jdk1.8.0_60","LANG":"zh_CN.UTF-8","LESSOPEN":"||/usr/bin/lesspipe.sh %s","LOGNAME":"root","LS_COLORS":"rs","MAIL":"/var/spool/mail/root","PATH":"/data/chaos-mall/base-java/jdk1.8.0_60/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data/tools/chaos-tools/chaosblade-1.7.3","PWD":"/data/chaos-mall/mall-auth","SHELL":"/bin/bash","SHLVL":"2","SSH_CLIENT":"192.168.5.84 52228 22","SSH_CONNECTION":"192.168.5.84 52228 192.168.1.248 22","SSH_TTY":"/dev/pts/0","TERM":"xterm-256color","USER":"root","XDG_RUNTIME_DIR":"/run/user/0","XDG_SESSION_ID":"3027","_":"/usr/bin/nohup"}
    FileList[0]={"Build-Jdk-Spec":"11","Created-By":"Maven JAR Plugin 3.2.2","Implementation-Title":"mall-auth","Implementation-Version":"1.0-SNAPSHOT","Main-Class":"org.springframework.boot.loader.JarLauncher","Manifest-Version":"1.0","Spring-Boot-Classes":"BOOT-INF/classes/","Spring-Boot-Classpath-Index":"BOOT-INF/classpath.idx","Spring-Boot-Layers-Index":"BOOT-INF/layers.idx","Spring-Boot-Lib":"BOOT-INF/lib/","Spring-Boot-Version":"2.7.0","Start-Class":"com.macro.mall.auth.MallAuthApplication","fileName":"mall-auth-1.0-SNAPSHOT.jar","isDir":"false"}
    
  3. 接下来您需要在naming.yml中配置进程命名规则。

    配置文件路径:/opt/tingyun-oneagent/conf/naming.yml

    配置示例:

    NamingRuleGroups:
       - Container: Jar                  # 对应Provider Data中Local的containerName
         NamingRules:
           - From: Local                 # 按照Local命名
             Match:
               Key: "mainJar"            # 如果Local中的mainJar匹配关键字成功,则按照Naming规则命名
               MatchType: "contains"
               MatchValue: ""            # 空代表匹配任意字符
             Naming:
               Key: "mainJar"            # 新名称从mainJar取
               Default: ""
               MaxValueCount: 1
             Replace:                    # 取完新名称还可以替换其中部分内容
               "-1.0-SNAPSHOT.jar": ""
         NamingJoin: "_"
         PriorityNaming: false
    

    经过上述匹配后,最终进程名称将变为mall-auth

  4. 验证配置后的进程命名:执行命令 /opt/tingyun-oneagent/lib/agenthelper --naming --show-log <PID> ,查看返回结果,其中 Result 中的 Name 即为新名称

注意事项

  • 用户执行agenthelper命令时需要使用和进程相同的用户来执行。
  • naming.yml 修改完成后,刷新时间大概在1分钟内。
  • naming.yml 修改完成2分钟后,再重启应用进程,应用的名称将显示为根据yml定义的名称。
  • naming.yml使用YAML格式描述,结构层次使用“两个空格”进行缩进,需要严格按照YAML规范进行修改,否则可能会导致文件加载失败。

results matching ""

    No results matching ""