
# 配置应用发现规则
应用发现是指AOM通过配置的规则发现和收集您主机上部署的应用和关联的指标。从是否需要您来操作的角度区分应用发现方式，则有两种，自动发现和手动配置。本章节介绍手动配置操作。
- **自动发现**
  您的主机[安装ICAgent](https://support.huaweicloud.com/usermanual-aom/aom_02_0012.html)后，ICAgent会根据[内置发现规则]发现主机上的应用，并呈现在"应用监控"界面。
  
- **手动配置**
  您可在"应用发现"界面添加一条自定义的应用发现规则，并应用至已[安装ICAgent](https://support.huaweicloud.com/usermanual-aom/aom_02_0012.html)的主机上，ICAgent会根据您配置的应用发现规则发现主机上的应用，并呈现在"应用监控"界面。
  
#### 过滤规则
ICAgent会在目标主机上进行周期性探测，类似**ps -e -o pid,comm,lstart,cmd \| grep -v defunct** 命令的效果，查出目标主机的所有进程。然后将每一个进程分别与过滤规则（过滤规则详见[表1]）进行匹配。如果进程满足过滤规则，则进程会被过滤掉，不会被AOM发现；如果进程不满足过滤规则，则进程不会被过滤，会被AOM发现。
探测结果类似如下回显信息：
```
PID COMMAND                          STARTED CMD
     1 systemd         Tue Oct  2 21:12:06 2018 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
     2 kthreadd        Tue Oct  2 21:12:06 2018 [kthreadd]
     3 ksoftirqd/0     Tue Oct  2 21:12:06 2018 (ksoftirqd/0)
  1140 tuned           Tue Oct  2 21:12:27 2018 /usr/bin/python -Es /usr/sbin/tuned -l -P
  1144 sshd            Tue Oct  2 21:12:27 2018 /usr/sbin/sshd -D
  1148 agetty          Tue Oct  2 21:12:27 2018 /sbin/agetty --keep-baud 115200 38400 9600 hvc0 vt220
  1154 docker-containe Tue Oct  2 21:12:29 2018 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --runtime docker-runc --metrics-interval=0
```
 表1过滤规则 
| 过滤规则                                                                                                                                            | 举例                                                                       |
|:---|:---|
| 如果进程的"COMMAND"列的值为"docker-containe"、"vi"、"vim"、"pause"、"sshd"、"ps"、"sleep"、"grep"、"tailf"、"tail"或"systemd-udevd"，且为非容器内的进程，则该类进程会被过滤掉，不会被AOM发现。 | 例如，上面信息中"PID"为"1154"的进程，因为其"COMMAND"列的值为"docker-containe"，所以该进程不会被AOM发现。 |
| 如果进程的"CMD"列的值以"\["开头，且以"\]"结尾，则该类进程会被过滤掉，不会被AOM发现。                                                                                              | 例如，上面信息中"PID"为"2"的进程，因为其"CMD"列的值为"\[kthreadd\]"，所以该进程不会被AOM发现。           |
| 如果进程的"CMD"列的值以"("开头，且以")"结尾，则该类进程会被过滤掉，不会被AOM发现。                                                                                                | 例如，上面信息中"PID"为"3"的进程，因为其"CMD"列的值为"(ksoftirqd/0)"，所以该进程不会被AOM发现。          |
| 如果进程的"CMD"列的值以"/sbin/"开头，则该类进程会被过滤掉，不会被AOM发现。                                                                                                   | 例如，上面信息中"PID"为"1148"的进程，因为其"CMD"列的值以"/sbin/"开头，所以该进程不会被AOM发现。            |
   
 #### 内置发现规则
AOM提供了Sys_Rule和Default_Rule两个内置的发现规则，内置的发现规则会在所有主机上执行，包括后续新增的主机。其中Sys_Rule优先级大于Default_Rule，即优先在主机上执行Sys_Rule，如果满足Sys_Rule，则不执行Default_Rule，如果不满足Sys_Rule，则执行Default_Rule。规则内容如下：
**Sys_Rule**（不能停用）
使用**Sys_Rule**规则的场景下，组件名和应用名配对使用，必须同时设置组件名和应用名信息，取值优先级如下：
- 应用名称取值优先级：
  1. 取进程的启动命令中"Dapm_application"字段的值。
  
  2. 如果[1]为空，则取环境变量"JAVA_TOOL_OPTIONS"中"Dapm_application"字段的值。
  
  3. 如果[2]为空，则取环境变量"PAAS_MONITORING_GROUP"的值。
  
  4. 如果[3]为空，则取进程的启动命令中"DAOM.APPN"字段的值。
   
- 组件名称取值优先级：
  1. 取进程的启动命令中"DAOM.PROCN"字段的值，如果为空则取"Dapm_tier"字段的值。
  
  2. 如果[1]为空，则取环境变量"JAVA_TOOL_OPTIONS"中"Dapm_tier"字段的值。
  
  3. 如果[2]为空，则取环境变量"PAAS_APP_NAME"的值。
   
如下示例所示，则组件名为atps-demo，应用名为atpd-test。
```
PAAS_MONITORING_GROUP=atpd-test
PAAS_APP_NAME=atps-demo
JAVA_TOOL_OPTIONS=-javaagent:/opt/oss/servicemgr/ICAgent/pinpoint/pinpoint-bootstrap.jar -Dapm_application=atpd-test -Dapm_tier=atps-demo
```
**Default_Rule** （可停用）
- 如果进程的"COMMAND"列的值为"java"，则组件名依次按照优先级从命令行中的jar包名、命令行中主类名、命令行中第一个非-开头的关键字获取，应用名使用默认值unknownapplicationname。
- 如果进程的"COMMAND"列的值为"python"，则组件名取命令行中第一个py/pyc脚本名，应用名使用默认值unknownapplicationname。
- 如果进程的"COMMAND"列的值为"node"，则组件名取命令行中第一个js脚本名，应用名使用默认值unknownapplicationname。
 
#### 自定义发现规则
1. 在左侧导航栏中选择"配置管理 \> 应用发现"。
2. 单击"添加自定义应用发现规则"，配置应用发现规则。
3. 选择预探测主机。 
   1. 自定义一个规则规则名称（例如，rule-test）。
   
   2. 选择一个典型的主机（例如，host-test），用于在应用发现规则配置过程中预验证规则的有效性，最终在哪些主机上执行本规则，将会在[6]进行配置。完成后单击"下一步"。
   
   
   
   
4. 设置应用发现规则。 
   1. 单击"添加检查项"，使满足检查项的进程能被AOM发现。
      AOM将发现满足检查项的进程，例如，命令行参数包含"ovs-vswitchd unix:"，且环境变量中包含"SUDO_USER=paas"的进程。
      ![](https://support.huaweicloud.com/usermanual-aom/public_sys-resources/note_3.0-zh-cn.png)
      - 为了能精准的探测到符合您预期的进程，建议您在添加检查项时，填写进程的独有特征，即填写更容易识别出预期进程的关键字作为检查项。
      
      - 您至少要添加一条检查项，检查项您最多可添加5条。当有多条检查项时，所有检查项同时满足，AOM才能发现进程。
        
   
   2. 添加检查项完成后，单击"开始探测"，查找符合的进程。 如果20s后未探测到符合条件的进程，您需要修改发现规则后继续探测；如果探测到符合的进程，将可进入下一步的操作，否则不能进入后续操作。
      
   
   
   
   
5. 设置应用名称及组件名称。 
   设置应用名称。
   1. 设置应用名称。 在"应用名称设置"下单击"添加命名项"，为已发现的进程设置应用名。
      ![](https://support.huaweicloud.com/usermanual-aom/public_sys-resources/note_3.0-zh-cn.png)
      - 若您未设置应用名，则应用名默认为unknownapplicationname。
      
      - 当添加了多条命名项时，所有命名项将拼接在一起作为进程的应用名，同应用件的指标将被汇聚在一起。
        
   
   2. 设置组件名称。
      输入应用类型后，在"组件名称设置"下单击"添加命名项"，为已发现的进程设置组件名。例如，添加固定文字"app-test"拼接起来作为组件名。
      ![](https://support.huaweicloud.com/usermanual-aom/public_sys-resources/note_3.0-zh-cn.png)
      - 应用类型用于标记应用的分类，仅用于规则分类和界面展示，可以填写任意字段。如按技术栈分类可写Java，Python。按作用分类可填写collector(采集)，database(数据库)等。
      
      - 若您未设置组件名，则组件名默认为unknownapplicationname。
      
      - 当添加了多条命名项时，所有命名项将拼接在一起作为进程的组件名，同组件的指标将被汇聚在一起。
        
   
   3. 预览组件名称。 若不符合要求，您可在"组件名称预览"表中单击![](https://support.huaweicloud.com/usermanual-aom/zh-cn_image_0263893493.png)对其重新命名。
      
    
   
   
6. 设置优先级和探测范围。
   
   1. 设置优先级：优先级即当有多个规则时，优先使用哪个规则发现组件。您可输入1\~9999，数字越小优先级越高，例如，1优先级最高，9999优先级最小。
   
   2. 配置探测范围：选择可探测的主机，即已配置规则将会在哪个主机上执行。如果不选任何主机，规则将会在所有主机上执行，包含后续新增的主机。
   
   
   
   
7. 单击"添加"，完成配置。AOM会采集进程的指标数据。
8. 等待大约两分钟后，您可在左侧导航栏中选择"监控 \> 组件监控"，在集群下拉列表框中选择主机，找到已被监控的组件。
 
#### 更多应用发现规则操作
应用发现规则添加完成后，您还可以执行[表2]中的操作。
 表2相关操作 
| 操作     | 说明                                                                                                                                                                                                                                                                                          |
|:---|:---|
| 查看规则详情 | 在"名称"列单击规则的名称。                                                                                                                                                                                                                                                                              |
| 启、停规则  | - 单击"操作"列的"启用"。  - 单击"操作"列的"停用"。停用后，AOM将不采集进程的指标数据。                                                                                     |
| 删除规则   | - 删除一个发现规则：在"操作"列选择"删除"。  - 删除一个或多个发现规则：选中一个或多个发现规则前的复选框，单击页面上方的"删除"。   说明： 内置发现规则不支持删除操作。 |
| 修改规则   | 在"操作"列选择"修改"。 说明： 内置发现规则不支持修改操作。                                                                                                                                                                                              |
   
