

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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 代理程式只會使用其中一種方法。如果您指定一個以上的區段，只要 `pid_file` 區段存在，CloudWatch 代理程式會使用此區段。如果不存在，則使用 `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` 的建立程序。從每個程序收集不同的指標。從建立 `example2.pid` 的程序收集的指標是每 10 秒收集一次，而從 `example1.pid` 程序收集的指標是每 60 秒 (預設值) 收集一次。

```
{
    "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"
                    ]
                }
            ]
        }
    }
}
```

### 使用 pattern 來設定
<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 的伺服器收集指標而定，而有不同的語法。例如，`cpu_time` 指標從 Linux 收集時會顯示為 `procstat_cpu_time`，而從 Windows Server 收集時會顯示為 `procstat cpu_time`。


| 指標名稱 | 可用位置 | Description | 
| --- | --- | --- | 
|  `cpu_time` |  Linux |  程序使用 CPU 的時間量。這個指標是以百分之一秒來測量。 單位：計數  | 
|  `cpu_time_guest` |  Linux |  程序處於訪客模式的時間長度。這個指標是以百分之一秒來測量。 類型：浮點數 單位：無  | 
|  `cpu_time_guest_nice` |  Linux |  程式在友善客體中執行的時間長度。這個指標是以百分之一秒來測量。 類型：浮點數 單位：無  | 
|  `cpu_time_idle` |  Linux |  程序處於閒置模式的時間長度。這個指標是以百分之一秒來測量。 類型：浮點數 單位：無  | 
|  `cpu_time_iowait` |  Linux |  程序等待 I/O 操作完成所需的時間。這個指標是以百分之一秒來測量。 類型：浮點數 單位：無  | 
|  `cpu_time_irq` |  Linux |  程序處於服務中斷狀態的時間長度。這個指標是以百分之一秒來測量。 類型：浮點數 單位：無  | 
|  `cpu_time_nice` |  Linux |  程序處於良好模式的時間長度。這個指標是以百分之一秒來測量。 類型：浮點數 單位：無  | 
|  `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 Server 上則是 `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 |  此程序可設定之最高良好優先順序的硬性限制。 單位：無  | 
|  `rlimit_nice_priority_soft` |  Linux |  此程序可設定之最高良好優先順序的彈性限制。 單位：無  | 
|  `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.aws.amazon.com/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** (新增至儀表板)。