

# CloudWatch 代理收集的指标
<a name="metrics-collected-by-CloudWatch-agent"></a>

 您可以在服务器上安装 CloudWatch 代理以从服务器中收集指标。您可以同时在 Amazon EC2 实例和本地服务器上安装该代理。还可以在运行 Linux、Windows Server 或 macOS 的计算机上安装该代理。如果在 Amazon EC2 实例上安装该代理，则除了在 Amazon EC2 实例上默认启用的指标以外，该代理还会收集一些其他指标。有关在实例上安装 CloudWatch 代理的信息，请参阅 [使用 CloudWatch 代理采集指标、日志和跟踪数据](Install-CloudWatch-Agent.md)。您可以使用本节了解 CloudWatch 代理收集的指标。

## Windows Server 实例上的 CloudWatch 代理收集的指标
<a name="windows-metrics-enabled-by-CloudWatch-agent"></a>

通过在运行 Windows Server 的服务器上安装 CloudWatch 代理，您可以收集与 Windows 性能监视器中的计数器关联的指标。在创建这些计数器的 CloudWatch 指标名称时，将在对象名称和计数器名称之间添加空格。例如，在 CloudWatch 中为 `Processor` 对象的 `% Interrupt Time` 计数器指定指标名称 `Processor % Interrupt Time`。有关 Windows 性能监视器计数器的更多信息，请参阅 Microsoft Windows Server 文档。

CloudWatch 代理收集的指标的默认命名空间为 `CWAgent`，不过您可以在配置该代理时指定其他命名空间。

## Linux 和 macOS 实例上的 CloudWatch 代理收集的指标
<a name="linux-metrics-enabled-by-CloudWatch-agent"></a>

下表列出了您可以使用 Linux 服务器和 macOS 电脑上的 CloudWatch 代理收集的指标。


| 指标 | 说明 | 
| --- | --- | 
|  `cpu_time_active` |  CPU 在任何容量中处于活动状态的时间。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_time_guest` |  CPU 为来宾操作系统运行虚拟 CPU 的时间。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_time_guest_nice` |  CPU 为来宾操作系统运行虚拟 CPU 的时间，它具有较低的优先级，可能会被其他进程中断。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_time_idle` |  CPU 处于空闲状态的时间。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_time_iowait` |  CPU 等待 I/O 操作完成的时间。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_time_irq` |  CPU 处理中断的时间。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_time_nice` |  CPU 处于用户模式的时间，它具有低优先级进程，可能很容易被高优先级进程中断。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_time_softirq` |  CPU 处理软件中断的时间。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_time_steal` |  CPU *被盗的时间*，这是在虚拟化环境中的其他操作系统上所花的时间。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_time_system` |  CPU 处于系统模式的时间。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_time_user` |  CPU 处于用户模式的时间。该指标以百分之一秒为单位。 单位：无  | 
|  `cpu_usage_active` |  CPU 在任何容量中处于活动状态的时间百分比。 单位：百分比  | 
|  `cpu_usage_guest` |  CPU 为来宾操作系统运行虚拟 CPU 的时间百分比。 单位：百分比  | 
|  `cpu_usage_guest_nice` |  CPU 为来宾操作系统运行虚拟 CPU 的时间百分比，它具有较低的优先级，可能会被其他进程中断。 单位：百分比  | 
|  `cpu_usage_idle` |  CPU 空闲时间的百分比。 单位：百分比  | 
|  `cpu_usage_iowait` |  CPU 等待 I/O 操作完成的时间百分比。 单位：百分比  | 
|  `cpu_usage_irq` |  CPU 处理中断的时间百分比。 单位：百分比  | 
|  `cpu_usage_nice` |  CPU 处于用户模式的时间百分比，它具有低优先级进程，可能很容易被高优先级进程中断。 单位：百分比  | 
|  `cpu_usage_softirq` |  CPU 处理软件中断的时间百分比。 单位：百分比  | 
|  `cpu_usage_steal` |  CPU *被盗的时间*百分比，或者在虚拟化环境中的其他操作系统上所花的时间。 单位：百分比  | 
|  `cpu_usage_system` |  CPU 处于系统模式的时间百分比。 单位：百分比  | 
|  `cpu_usage_user` |  CPU 处于用户模式的时间百分比。 单位：百分比  | 
|  `disk_free` |  磁盘上的可用空间。 单位：字节  | 
|  `disk_inodes_free` |  磁盘上的可用索引节点数。 单位：个  | 
|  `disk_inodes_total` |  在磁盘上保留的总索引节点数。 单位：个  | 
|  `disk_inodes_used` |  在磁盘上使用的索引节点数。 单位：个  | 
|  `disk_total` |  磁盘上的总空间，包括已使用的空间和可用空间。 单位：字节  | 
|  `disk_used` |  磁盘上已使用的空间。 单位：字节  | 
|  `disk_used_percent` |  已使用总磁盘空间的百分比。 单位：百分比  | 
|  `diskio_iops_in_progress` |  已发出到设备驱动程序但尚未完成的 I/O 请求数。 单位：个  | 
|  `diskio_io_time` |  磁盘已将 I/O 请求排队的时间。 单位：毫秒 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `diskio_reads` |  磁盘读取操作数。 单位：个 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `diskio_read_bytes` |  从磁盘中读取的字节数。 单位：字节 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `diskio_read_time` |  读取请求在磁盘上等待的时间。同时等待的多个读取请求会增加该数字。例如，如果 5 个请求均平均等待 100 毫秒，则报告 500。 单位：毫秒 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `diskio_writes` |  磁盘写入操作数。 单位：个 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `diskio_write_bytes` |  写入到磁盘的字节数。 单位：字节 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `diskio_write_time` |  写入请求在磁盘上等待的时间。同时等待的多个写入请求会增加该数字。例如，如果 8 个请求均平均等待 1000 毫秒，则报告 8000。 单位：毫秒 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `ethtool_bw_in_allowance_exceeded` |  因入站聚合带宽超过实例的最大值而排队和/或丢弃的数据包的数量。 仅当您将此指标列在 CloudWatch 代理配置文件 `metrics_collected` 部分的 `ethtool` 子部分时，才会收集该指标。有关更多信息，请参阅 [收集网络性能指标](CloudWatch-Agent-network-performance.md) 单位：无  | 
|  `ethtool_bw_out_allowance_exceeded` |  因出站聚合带宽超过实例的最大值而排队和/或丢弃的数据包的数量。 仅当您将此指标列在 CloudWatch 代理配置文件 `metrics_collected` 部分的 `ethtool` 子部分时，才会收集该指标。有关更多信息，请参阅 [收集网络性能指标](CloudWatch-Agent-network-performance.md) 单位：无  | 
|  `ethtool_conntrack_allowance_exceeded` |  由于连接跟踪超过实例的最大值且无法建立新连接而丢弃的数据包的数量。这可能会导致进出实例的流量丢失数据包。 仅当您将此指标列在 CloudWatch 代理配置文件 `metrics_collected` 部分的 `ethtool` 子部分时，才会收集该指标。有关更多信息，请参阅 [收集网络性能指标](CloudWatch-Agent-network-performance.md) 单位：无  | 
|  `ethtool_linklocal_allowance_exceeded` |  由于到本地代理服务的流量的 PPS 超出网络接口的最大值而丢弃的数据包数量。这会影响流向 DNS 服务、实例元数据服务和 Amazon Time Sync Service 的流量。 仅当您将此指标列在 CloudWatch 代理配置文件 `metrics_collected` 部分的 `ethtool` 子部分时，才会收集该指标。有关更多信息，请参阅 [收集网络性能指标](CloudWatch-Agent-network-performance.md) 单位：无  | 
|  `ethtool_pps_allowance_exceeded` |  因双向 PPS 超过实例的最大值而排队和/或丢弃的数据包的数量。 仅当您将此指标列在 CloudWatch 代理配置文件 `metrics_collected` 部分的 `ethtool` 子部分时，才会收集该指标。有关更多信息，请参阅 [收集网络性能指标](CloudWatch-Agent-network-performance.md)。 单位：无  | 
|  `mem_active` |  在上一抽样周期以某种方式使用的内存量。 单位：字节  | 
|  `mem_available` |  可以立即分配给进程的可用内存量。 单位：字节  | 
|  `mem_available_percent` |  可以立即分配给进程的可用内存百分比。 单位：百分比  | 
|  `mem_buffered` |  用作缓冲区的内存量。 单位：字节  | 
|  `mem_cached` |  用作文件缓存的内存量。 单位：字节  | 
|  `mem_free` |  未使用的内存量。 单位：字节  | 
|  `mem_inactive` |  在上一采样周期未以某种方式使用的内存量 单位：字节  | 
|  `mem_shared` |  进程之间共享的内存量。 单位：字节  | 
|  `mem_total` |  内存的总量。 单位：字节  | 
|  `mem_used` |  当前使用的内存量。 单位：字节  | 
|  `mem_used_percent` |  当前使用的内存百分比。 单位：百分比  | 
|  `net_bytes_recv` |  网络接口接收的字节数。 单位：字节 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `net_bytes_sent` |  网络接口发送的字节数。 单位：字节 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `net_drop_in` |  该网络接口接收并已丢弃的数据包数。 单位：个 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `net_drop_out` |  该网络接口发送并已丢弃的数据包数。 单位：个 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `net_err_in` |  该网络接口检测到的接收错误数。 单位：个 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `net_err_out` |  该网络接口检测到的发送错误数。 单位：个 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `net_packets_sent` |  该网络接口发送的数据包数。 单位：个 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `net_packets_recv` |  该网络接口接收的数据包数。 单位：个 应该用于该指标的唯一统计数据是 `Sum`。切勿使用 `Average`。  | 
|  `netstat_tcp_close` |  没有状态的 TCP 连接数。 单位：个  | 
|  `netstat_tcp_close_wait` |  等待来自客户端的终止请求的 TCP 连接数。 单位：个  | 
|  `netstat_tcp_closing` |  等待来自客户端的包含确认的终止请求的 TCP 连接数。 单位：个  | 
|  `netstat_tcp_established` |  已建立的 TCP 连接数。 单位：个  | 
|  `netstat_tcp_fin_wait1` |  在关闭连接过程中处于 `FIN_WAIT1` 状态的 TCP 连接数。 单位：个  | 
|  `netstat_tcp_fin_wait2` |  在关闭连接过程中处于 `FIN_WAIT2` 状态的 TCP 连接数。 单位：个  | 
|  `netstat_tcp_last_ack` |  等待客户端发送连接终止确认消息的 TCP 连接数。这是就在关闭连接之前的最后状态。 单位：个  | 
|  `netstat_tcp_listen` |  当前侦听连接请求的 TCP 端口数。 单位：个  | 
|  `netstat_tcp_none` |  具有不活动客户端的 TCP 连接数。 单位：个  | 
|  `netstat_tcp_syn_sent` |  在发送连接请求后等待匹配连接请求的 TCP 连接数。 单位：个  | 
|  `netstat_tcp_syn_recv` |  在发送和接收连接请求后等待连接请求确认的 TCP 连接数。 单位：个  | 
|  `netstat_tcp_time_wait` |  当前等待以确保客户端收到连接终止请求确认的 TCP 连接数。 单位：个  | 
|  `netstat_udp_socket` |  当前 UDP 连接数。 单位：个  | 
|  `processes_blocked` |  已阻止的进程数。 单位：个  | 
|  `processes_dead` |  处于“僵死”状态的进程数，它是由 Linux 上的 `X` 状态代码表示的。 在 macOS 电脑上不会收集此指标。 单位：个  | 
|  `processes_idle` |  处于空闲状态 (睡眠超过 20 秒) 的进程数。仅适用于 FreeBSD 实例。 单位：个  | 
|  `processes_paging` |  处于“分页”状态的进程数，它是由 Linux 上的 `W` 状态代码表示的。 在 macOS 电脑上不会收集此指标。 单位：个  | 
|  `processes_running` |  正在运行的进程数，由 `R` 状态代码表示。 单位：个  | 
|  `processes_sleeping` |  睡眠的进程数，由 `S` 状态代码表示。 单位：个  | 
|  `processes_stopped` |  停止的进程数，由 `T` 状态代码表示。 单位：个  | 
|  `processes_total` |  实例上的总进程数。 单位：个  | 
|  `processes_total_threads` |  组成进程的总线程数。该指标仅适用于 Linux 实例。 在 macOS 电脑上不会收集此指标。 单位：个  | 
|  `processes_wait` |  分页的进程数，它是由 FreeBSD 实例上的 `W` 状态代码表示的。此指标仅在 FreeBSD 实例上可用，在 Linux、Windows Server 或 macOS 实例上不可用。 单位：个  | 
|  `processes_zombies` |  僵尸进程数，由 `Z` 状态代码表示。 单位：个  | 
|  `swap_free` |  未使用的交换空间量。 单位：字节  | 
|  `swap_used` |  当前已使用的交换空间量。 单位：字节  | 
|  `swap_used_percent` |  当前已使用的交换空间百分比。 单位：百分比  | 

## CloudWatch 代理收集的内存指标的定义
<a name="CloudWatch-agent-metrics-definitions"></a>

当 CloudWatch 代理收集内存指标时，来源是主机的内存管理子系统。例如，Linux 内核在 `/proc` 中公开了操作系统维护的数据。对于内存，数据在 `/proc/meminfo` 中。

每种不同的操作系统和架构对进程使用的资源都有不同的计算方式。有关更多信息，请参阅以下部分。

在每个收集间隔内，每个实例上的 CloudWatch 代理会收集实例资源并计算在该实例中运行的所有进程所使用的资源。这些信息将报告回 CloudWatch 指标。您可以在 CloudWatch 代理配置文件中配置收集间隔时长。有关更多信息，请参阅 [CloudWatch 代理配置文件：Agent 部分](CloudWatch-Agent-Configuration-File-Details.md#CloudWatch-Agent-Configuration-File-Agentsection)。

以下列表说明了 CloudWatch 代理收集的内存指标是如何定义的。
+ **活动内存** – 进程正在使用的内存。换句话说，当前正在运行的应用程序所使用的内存。
+  **可用内存** – 系统无需进入交换状态即可立即分配给进程的内存（也称为虚拟内存）。
+ **缓冲内存** – 由以不同速度和优先级运行的硬件设备或程序进程共享的数据区域。
+ **缓存内存** – 用于存储 CPU 接下来可能需要的程序操作中重复使用的程序指令和数据。
+ **空闲内存** – 完全未使用且随时可用的内存。这部分内存完全空闲，可以在需要时供该系统使用。
+ **非活动内存** –“最近”未访问过的页面。
+ **总内存** – 实际物理内存 RAM 的大小。
+ **已用内存** – 程序和进程当前正在使用的内存。

**Topics**
+ [Linux：收集的指标和使用的计算方式](#CloudWatch-agent-metrics-definitions-calculations)
+ [macOS：收集的指标和使用的计算方式](#CloudWatch-agent-metrics-definitions-calculations)
+ [Windows：收集的指标](#CloudWatch-agent-metrics-definitions-calculations)
+ [示例：在 Linux 上计算内存指标](#CloudWatch-agent-metrics-definitions-LinuxExample)

### Linux：收集的指标和使用的计算方式
<a name="CloudWatch-agent-metrics-definitions-calculations"></a>

收集的指标和单位：
+ 活动（字节）
+ 可用（字节）
+ 可用百分比（百分比）
+ 已缓冲（字节）
+ 已缓存（字节）
+ 空闲（字节）
+ 非活动（字节）
+ 总内存（字节）
+ 已用（字节）
+ 已用百分比（百分比）

**已用内存** = 总内存 - 空闲内存 - 缓存内存 - 缓冲内存

**总内存** = 已用内存 \$1 空闲内存 \$1 缓存内存 \$1 缓冲内存

### macOS：收集的指标和使用的计算方式
<a name="CloudWatch-agent-metrics-definitions-calculations"></a>

收集的指标和单位：
+ 活动（字节）
+ 可用（字节）
+ 可用百分比（百分比）
+ 空闲（字节）
+ 非活动（字节）
+ 总内存（字节）
+ 已用（字节）
+ 已用百分比（百分比）

**可用内存** = 空闲内存 \$1 非活动内存

**已用内存** = 总内存 - 可用内存

**总内存** = 可用内存 \$1 已用内存

### Windows：收集的指标
<a name="CloudWatch-agent-metrics-definitions-calculations"></a>

下面列出了在 Windows 主机上收集的指标。所有这些指标的 `Unit` 都是 `None`。
+ 可用字节
+ 缓存中断/秒
+ 页面错误/秒
+ 页数/秒

没有对 Windows 指标使用任何计算方式，因为 CloudWatch 代理会解析来自性能计数器的事件。

### 示例：在 Linux 上计算内存指标
<a name="CloudWatch-agent-metrics-definitions-LinuxExample"></a>

例如，假设在 Linux 主机上输入 **cat /proc/meminfo** 命令会显示以下结果：

```
MemTotal:       3824388 kB
MemFree:         462704 kB
MemAvailable:   2157328 kB
Buffers:         126268 kB
Cached:         1560520 kB
SReclaimable:    289080 kB>
```

在此示例中，CloudWatch 代理将收集以下值：CloudWatch 代理收集和报告的所有值均以字节为单位。
+ `mem_total`：3916173312 字节
+ `mem_available`：2209103872 字节（MemFree \$1 Cached）
+ `mem_free`：473808896 字节
+ `mem_cached`：1893990400 字节（`cached` \$1 `SReclaimable`）
+ `mem_used`：1419075584 字节 (`MemTotal` – (`MemFree` \$1 `Buffers` \$1 (`Cached` \$1 `SReclaimable`)))
+ `mem_buffered`：129667072 字节
+ `mem_available_percent`：56.41%
+ `mem_used_percent`：36.24% (`mem_used` / `mem_total`) \$1 100