进程命名规则

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. 使用 /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
        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规范进行修改,否则可能会导致文件加载失败。

results matching ""

    No results matching ""