

# 使用 procstat 插件收集流程指标
<a name="CloudWatch-Agent-procstat-process-metrics"></a>

 *procstat* 插件让您能够从各个流程收集指标。该插件在 Linux 服务器上以及运行支持的 Windows Server 版本的服务器上受支持。本节介绍如何为 procstat 配置 CloudWatch 代理以及如何查看 CloudWatch 代理导入的指标。还列出了 procstat 收集的指标。

**注意**  
Amazon ECS 环境中的 Fargate 启动类型不支持 `procstat` 插件。

**Topics**
+ [为 procstat 配置 CloudWatch 代理](#CloudWatch-Agent-procstat-configuration)
+ [Procstat 收集的指标](#CloudWatch-Agent-procstat-process-metrics-collected)
+ [查看由 CloudWatch 代理导入的进程指标](#CloudWatch-view-procstat-metrics)

## 为 procstat 配置 CloudWatch 代理
<a name="CloudWatch-Agent-procstat-configuration"></a>

要使用 procstat 插件，请在 CloudWatch 代理配置文件的 `metrics_collected` 部分中添加 `procstat` 部分。您可以通过以下三种方式指定要监控的进程。您可以仅使用其中一个方法，但您可以使用该方法来指定一个或多个要监控的进程。
+ `pid_file`：按照它们创建的进程标识号 (PID) 文件的名称选择进程。
+ `exe`：使用正则表达式匹配规则，选择进程名称与您指定的字符串相匹配的进程。匹配是“包含”匹配，这意味着如果您指定 `agent` 作为要匹配的术语，则具有类似于 `cloudwatchagent` 的名称的进程将匹配该术语。有关更多信息，请参阅[语法](https://github.com/google/re2/wiki/Syntax)。
+ `pattern`：通过用于启动进程的命令行选择进程。将使用正则表达式匹配规则选择命令行与指定的字符串匹配的所有进程。将检查整个命令行，包括用于命令行的参数和选项。

   匹配是“包含”匹配，这意味着如果您指定 `-c` 作为要匹配的术语，则具有类似于 `-config` 的参数的进程将匹配该术语。

CloudWatch 代理仅使用其中一个方法，即使您包含多个以上部分。如果您指定多个部分，CloudWatch 代理将使用 `pid_file` 部分（如果存在）。否则，它使用 `exe` 部分。

在 Linux 服务器上，您在 `exe` 或 `pattern` 部分中指定的字符串的计算结果为正则表达式。在运行 Windows Server 的服务器上，这些字符串的计算结果为 WMI 查询。例如，`pattern: "%apache%"` 就是一个示例。有关更多信息，请参阅 [LIKE 运算符](https://docs.microsoft.com/en-us/windows/desktop/WmiSdk/like-operator)。

无论使用哪种方法，您都可以包含一个可选 `metrics_collection_interval` 参数，该参数以秒为单位指定收集这些指标的频率。如果省略该参数，则使用 60 秒的默认值。

在以下部分的示例中，`procstat` 部分是唯一包含在代理配置文件的 `metrics_collected` 部分中的部分。实际配置文件也在 `metrics_collected` 中包含其他部分。有关更多信息，请参阅 [手动创建或编辑 CloudWatch 代理配置文件](CloudWatch-Agent-Configuration-File-Details.md)。

### 使用 pid\$1file 进行配置
<a name="CloudWatch-Agent-procstat-configuration-pidfile"></a>

以下示例 `procstat` 部分监控创建 PID 文件 `example1.pid` 和 `example2.pid` 的进程。从每个进程收集不同的指标。默认情况下，每 10 秒收集一次从创建 `example2.pid` 的进程中收集的指标，每 60 秒收集一次从 `example1.pid` 进程中收集的指标。

```
{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "pid_file": "/var/run/example1.pid",
                    "measurement": [
                        "cpu_usage",
                        "memory_rss"
                    ]
                },
                {
                    "pid_file": "/var/run/example2.pid",
                    "measurement": [
                        "read_bytes",
                        "read_count",
                        "write_bytes"
                    ],
                    "metrics_collection_interval": 10
                }
            ]
        }
    }
}
```

### 使用 exe 进行配置
<a name="CloudWatch-Agent-procstat-configuration-exe"></a>

以下示例 `procstat` 部分监控名称与字符串 `agent` 或 `plugin` 相匹配的所有进程。从每个进程收集相同的指标。

```
{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "exe": "agent",
                    "measurement": [
                        "cpu_time",
                        "cpu_time_system",
                        "cpu_time_user"
                    ]
                },
                {
                    "exe": "plugin",
                    "measurement": [
                        "cpu_time",
                        "cpu_time_system",
                        "cpu_time_user"
                    ]
                }
            ]
        }
    }
}
```

### 使用模式进行配置
<a name="CloudWatch-Agent-procstat-configuration-pattern"></a>

以下示例 `procstat` 部分监控命令行与字符串 `config` 或 `-c` 相匹配的所有进程。从每个进程收集相同的指标。

```
{
    "metrics": {
        "metrics_collected": {
            "procstat": [
                {
                    "pattern": "config",
                    "measurement": [
                        "rlimit_memory_data_hard",
                        "rlimit_memory_data_soft",
                        "rlimit_memory_stack_hard",
                        "rlimit_memory_stack_soft"
                    ]
                },
                {
                    "pattern": "-c",
                    "measurement": [
                        "rlimit_memory_data_hard",
                        "rlimit_memory_data_soft",
                        "rlimit_memory_stack_hard",
                        "rlimit_memory_stack_soft"
                    ]
                }
            ]
        }
    }
}
```

## Procstat 收集的指标
<a name="CloudWatch-Agent-procstat-process-metrics-collected"></a>

下表列出可以使用 `procstat` 插件收集的指标。

CloudWatch 代理将 `procstat` 添加到以下指标名称的开头。有不同的语法，具体取决于是从 Linux 服务器还是从运行 Windows Server 的服务器收集指标。例如，从 Linux 中收集时，`cpu_time` 指标显示为 `procstat_cpu_time`；从 Windows Server 中收集时，它显示为 `procstat cpu_time`。


| 指标名称 | 可用于 | 说明 | 
| --- | --- | --- | 
|  `cpu_time` |  Linux |  进程使用 CPU 的时间量。该指标以百分之一秒为单位。 单位：个  | 
|  `cpu_time_guest` |  Linux |  进程处于来宾模式的时间。该指标以百分之一秒为单位。 类型：浮点值 单位：无  | 
|  `cpu_time_guest_nice` |  Linux |  进程在 nice 来宾模式下运行的时间。该指标以百分之一秒为单位。 类型：浮点值 单位：无  | 
|  `cpu_time_idle` |  Linux |  进程处于空闲模式的时间。该指标以百分之一秒为单位。 类型：浮点值 单位：无  | 
|  `cpu_time_iowait` |  Linux |  进程等待 I/O 操作完成的时间。该指标以百分之一秒为单位。 类型：浮点值 单位：无  | 
|  `cpu_time_irq` |  Linux |  进程处理中断的时间。该指标以百分之一秒为单位。 类型：浮点值 单位：无  | 
|  `cpu_time_nice` |  Linux |  进程处于 nice 模式的时间。该指标以百分之一秒为单位。 类型：浮点值 单位：无  | 
|  `cpu_time_soft_irq` |  Linux |  进程处理软件中断的时间。该指标以百分之一秒为单位。 类型：浮点值 单位：无  | 
|  `cpu_time_steal` |  Linux |  在虚拟化环境中运行时，在其他操作系统上运行的时间。该指标以百分之一秒为单位。 类型：浮点值 单位：无  | 
|  `cpu_time_stolen` |  Linux、Windows Server |  进程的*被抢占时间*，这是在虚拟化环境中的其他操作系统上所花的时间。该指标以百分之一秒为单位。 类型：浮点值 单位：无  | 
|  `cpu_time_system` |  Linux、Windows Server、macOS |  进程处于系统模式的时间量。该指标以百分之一秒为单位。 类型：浮点值 单位：个  | 
|  `cpu_time_user` |  Linux、Windows Server、macOS |  进程处于用户模式的时间量。该指标以百分之一秒为单位。 单位：个  | 
|  `cpu_usage` |  Linux、Windows Server、macOS |  进程在任何容量中处于活动状态的时间百分比。 单位：百分比  | 
|  `memory_data` |  Linux、macOS |  进程用于数据的内存量。 单位：字节  | 
|  `memory_locked` |  Linux、macOS |  进程已锁定的内存量。 单位：字节  | 
|  `memory_rss` |  Linux、Windows Server、macOS |  进程使用的实际内存量（驻留集）。 单位：字节  | 
|  `memory_stack` |  Linux、macOS |  进程使用的堆栈内存量。 单位：字节  | 
|  `memory_swap` |  Linux、macOS |  进程使用的交换内存量。 单位：字节  | 
|  `memory_vms` |  Linux、Windows Server、macOS |  进程使用的虚拟内存量。 单位：字节  | 
|  `num_fds` |  Linux |  此进程打开的文件描述符数量。 单位：无  | 
|  `num_threads` |  Linux、Windows、macOS |  进程中的线程数。 单位：无  | 
|  `pid` |  Linux、Windows Server、macOS |  进程标识符 (ID)。 单位：无  | 
|  `pid_count` |  Linux、Windows Server、macOS |  与此进程关联的进程 ID 的数量。 在 Linux 服务器和 macOS 电脑上，此指标的完整名称为 `procstat_lookup_pid_count`；在 Windows 服务器上则为 `procstat_lookup pid_count`。 单位：无  | 
|  `read_bytes` |  Linux、Windows Server |  进程已从磁盘中读取的字节数。 单位：字节  | 
|  `write_bytes` |  Linux、Windows Server |  进程已写入到磁盘的字节数。 单位：字节  | 
|  `read_count` |  Linux、Windows Server |  进程已执行的磁盘读取操作的数目。 单位：无  | 
|  `rlimit_realtime_priority_hard` |  Linux |  可以为此进程设置的实时优先级硬限制。 单位：无  | 
|  `rlimit_realtime_priority_soft` |  Linux |  可以为此进程设置的实时优先级软限制。 单位：无  | 
|  `rlimit_signals_pending_hard` |  Linux |  此进程可以排队的最大信号数硬限制。 单位：无  | 
|  `rlimit_signals_pending_soft` |  Linux |  此进程可以排队的最大信号数软限制。 单位：无  | 
|  `rlimit_nice_priority_hard` |  Linux |  此进程可以设置的最大 nice 优先级硬限制。 单位：无  | 
|  `rlimit_nice_priority_soft` |  Linux |  此进程可以设置的最大 nice 优先级软限制。 单位：无  | 
|  `rlimit_num_fds_hard` |  Linux |  此进程可以打开的最大文件描述符数硬限制。 单位：无  | 
|  `rlimit_num_fds_soft` |  Linux |  此进程可以打开的最大文件描述符数软限制。 单位：无  | 
|  `write_count` |  Linux、Windows Server |  进程已执行的磁盘写入操作的数目。 单位：无  | 
|  `involuntary_context_switches` |  Linux |  进程不自觉上下文切换的次数。 单位：无  | 
|  `voluntary_context_switches` |  Linux |  进程自觉上下文切换的次数。 单位：无  | 
|  `realtime_priority` |  Linux |  进程的实时优先级的当前使用率。 单位：无  | 
|  `nice_priority` |  Linux |  进程的良好状态优先级的当前使用率。 单位：无  | 
|  `signals_pending` |  Linux |  等待由进程处理的信号数量。 单位：无  | 
|  `rlimit_cpu_time_hard` |  Linux |  进程的硬 CPU 时间资源限制。 单位：无  | 
|  `rlimit_cpu_time_soft` |  Linux |  进程的软 CPU 时间资源限制。 单位：无  | 
|  `rlimit_file_locks_hard` |  Linux |  进程的硬文件锁资源限制。 单位：无  | 
|  `rlimit_file_locks_soft` |  Linux |  进程的软文件锁资源限制。 单位：无  | 
|  `rlimit_memory_data_hard` |  Linux |  进程上用于数据的内存的硬资源限制。 单位：字节  | 
|  `rlimit_memory_data_soft` |  Linux |  进程上用于数据的内存的软资源限制。 单位：字节  | 
|  `rlimit_memory_locked_hard` |  Linux |  进程上用于锁定的内存的硬资源限制。 单位：字节  | 
|  `rlimit_memory_locked_soft` |  Linux |  进程上用于锁定的内存的软资源限制。 单位：字节  | 
|  `rlimit_memory_rss_hard` |  Linux |  进程上用于物理内存的硬资源限制。 单位：字节  | 
|  `rlimit_memory_rss_soft` |  Linux |  进程上用于物理内存的软资源限制。 单位：字节  | 
|  `rlimit_memory_stack_hard` |  Linux |  进程堆栈的硬资源限制。 单位：字节  | 
|  `rlimit_memory_stack_soft` |  Linux |  进程堆栈的软资源限制。 单位：字节  | 
|  `rlimit_memory_vms_hard` |  Linux |  进程上用于虚拟内存的硬资源限制。 单位：字节  | 
|  `rlimit_memory_vms_soft` |  Linux |  进程上用于虚拟内存的软资源限制。 单位：字节  | 

## 查看由 CloudWatch 代理导入的进程指标
<a name="CloudWatch-view-procstat-metrics"></a>

将进程指标导入到 CloudWatch 后，您可以以时间序列图形的形式查看这些指标，并创建可监视这些指标的告警，并在它们超出指定的阈值时通知您。以下程序介绍了如何以时间序列图形的方式查看进程指标。有关设置告警的更多信息，请参阅 [使用 Amazon CloudWatch 告警](CloudWatch_Alarms.md)。

**在 CloudWatch 控制台中查看进程指标**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.amazonaws.cn/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择**指标**。

1. 为该代理收集的指标选择命名空间。默认情况下，该命名空间为 **CWAgent**，但您可能已经在 CloudWatch 代理配置文件中指定了不同的命名空间。

1. 选择指标维度（例如 **Per-Instance Metrics（每个实例的指标）**）。

1. **All metrics** 选项卡显示命名空间中该维度的所有指标。您可执行以下操作：

   1. 要为指标绘制图表，请选中该指标旁的复选框。要选择所有指标，请选中表的标题行中的复选框。

   1. 要对表进行排序，请使用列标题。

   1. 要按资源进行筛选，请选择资源 ID，然后选择 **Add to search**。

   1. 要按指标进行筛选，请选择指标名称，然后选择 **Add to search**。

1. （可选）要将此图表添加到 CloudWatch 控制面板，请选择 **Actions（操作）**，然后选择 **Add to dashboard（添加到控制面板）**。