

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

# 使用 Amazon CloudWatch 監控 AWS PCS 執行個體
<a name="monitoring-cloudwatch_instances"></a>

AWS PCS 會視需要啟動 Amazon EC2 執行個體，以符合 PCS 運算節點群組中定義的擴展需求。您可以在使用 Amazon CloudWatch 執行時監控這些執行個體。您可以透過登入並使用互動式命令列工具來檢查執行中執行個體的日誌。不過，根據預設，CloudWatch 指標資料只會在執行個體終止後保留一段有限期間，且執行個體日誌通常會與傳回執行個體的 EBS 磁碟區一起刪除。若要保留 PCS 在終止執行個體之後啟動的指標或記錄資料，您可以使用 EC2 啟動範本在執行個體上設定 CloudWatch 代理程式。本主題提供監控執行中執行個體的概觀，並提供如何設定持久性執行個體指標和日誌的範例。

## 監控執行中的執行個體
<a name="monitoring-cloudwatch_instances_running"></a>

### 尋找 AWS PCS 執行個體
<a name="monitoring-cloudwatch_instances_finding"></a>

 若要監控 PCS 啟動的執行個體，請尋找與叢集或運算節點群組相關聯的執行中執行個體。然後，在指定執行個體的 EC2 主控台中，檢查**狀態和警示**以及**監控**區段。如果已針對這些執行個體設定登入存取，您可以連線到這些執行個體，並檢查執行個體上的各種日誌檔案。如需識別哪些執行個體由 PCS 管理的詳細資訊，請參閱 [尋找 AWS PCS 中的運算節點群組執行個體](working-with_compute-instances.md)。

### 啟用詳細指標
<a name="monitoring-cloudwatch_instances_enable-metrics"></a>

 根據預設，執行個體指標會以 5 分鐘的間隔收集。若要每隔一分鐘收集指標，請在運算節點群組啟動範本中啟用詳細的 CloudWatch 監控。如需詳細資訊，請參閱[開啟詳細的 CloudWatch 監控](working-with_launch-templates_parameters.md#working-with_launch-templates_parameters_cw)。

## 設定持久性執行個體指標和日誌
<a name="monitoring-cloudwatch_instances_config-metrics"></a>

 您可以在執行個體上安裝和設定 Amazon CloudWatch 代理程式，以保留其指標和日誌。這包含三個主要步驟：

1.  建立 CloudWatch 代理程式組態。

1.  將組態存放在 PCS 執行個體可以擷取的位置。

1.  撰寫 EC2 啟動範本，安裝 CloudWatch 代理程式軟體、擷取您的組態，並使用組態啟動 CloudWatch 代理程式。

 如需詳細資訊，請參閱《Amazon [ CloudWatch 使用者指南》中的使用 CloudWatch 代理程式收集指標、日誌和追蹤](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)，以及 [搭配 AWS PCS 使用 Amazon EC2 啟動範本](working-with_launch-templates.md)。 *Amazon CloudWatch *

### 建立 CloudWatch Agent 組態
<a name="monitoring-cloudwatch_instances_agent-config"></a>

 在執行個體上部署 CloudWatch 代理程式之前，您必須產生 JSON 組態檔案，指定要收集的指標、日誌和追蹤。您可以使用精靈或使用文字編輯器手動建立組態檔案。系統會為此示範手動建立組態檔案。

 在已安裝 AWS CLI 的電腦上，使用下列內容建立名為 **config.json** 的 CloudWatch 組態檔案。您也可以使用下列 URL 下載檔案的副本。

```
https://aws-hpc-recipes.s3.amazonaws.com/main/recipes/pcs/cloudwatch/assets/config.json
```

**備註**
+ 範例檔案中的日誌路徑適用於 Amazon Linux 2。如果您的執行個體將使用不同的基礎作業系統，請視需要變更路徑。
+ 若要擷取其他日誌，請在 下新增其他項目`collect_list`。
+ 中的值`{brackets}`是範本變數。如需支援變數的完整清單，請參閱《Amazon [ CloudWatch 使用者指南》中的手動建立或編輯 CloudWatch 代理程式組態檔案](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html)。 *Amazon CloudWatch *
+ 您可以選擇省略 `logs`或 ，`metrics`如果您不想收集這些資訊類型。

```
{
    "agent": {
        "metrics_collection_interval": 60
    },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/var/log/cloud-init.log",
                        "log_group_class": "STANDARD",
                        "log_group_name": "/PCSLogs/instances",
                        "log_stream_name": "{instance_id}.cloud-init.log",
                        "retention_in_days": 30
                    },
                    {
                        "file_path": "/var/log/cloud-init-output.log",
                        "log_group_class": "STANDARD",
                        "log_stream_name": "{instance_id}.cloud-init-output.log",
                        "log_group_name": "/PCSLogs/instances",
                        "retention_in_days": 30
                    },
                    {
                        "file_path": "/var/log/amazon/pcs/bootstrap.log",
                        "log_group_class": "STANDARD",
                        "log_stream_name": "{instance_id}.bootstrap.log",
                        "log_group_name": "/PCSLogs/instances",
                        "retention_in_days": 30
                    },
                    {
                        "file_path": "/var/log/slurmd.log",
                        "log_group_class": "STANDARD",
                        "log_stream_name": "{instance_id}.slurmd.log",
                        "log_group_name": "/PCSLogs/instances",
                        "retention_in_days": 30
                    },
                    {
                        "file_path": "/var/log/messages",
                        "log_group_class": "STANDARD",
                        "log_stream_name": "{instance_id}.messages",
                        "log_group_name": "/PCSLogs/instances",
                        "retention_in_days": 30
                    },
                    {
                        "file_path": "/var/log/secure",
                        "log_group_class": "STANDARD",
                        "log_stream_name": "{instance_id}.secure",
                        "log_group_name": "/PCSLogs/instances",
                        "retention_in_days": 30
                    }
                ]
            }
        }
    },
    "metrics": {
        "aggregation_dimensions": [
            [
                "InstanceId"
            ]
        ],
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "cpu": {
                "measurement": [
                    "cpu_usage_idle",
                    "cpu_usage_iowait",
                    "cpu_usage_user",
                    "cpu_usage_system"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ],
                "totalcpu": false
            },
            "disk": {
                "measurement": [
                    "used_percent",
                    "inodes_free"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "diskio": {
                "measurement": [
                    "io_time"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "mem": {
                "measurement": [
                    "mem_used_percent"
                ],
                "metrics_collection_interval": 60
            },
            "swap": {
                "measurement": [
                    "swap_used_percent"
                ],
                "metrics_collection_interval": 60
            }
        }
    }
}
```

 此檔案會指示 CloudWatch 代理程式監控數個檔案，這些檔案有助於診斷執行個體引導、身分驗證和登入以及其他故障診斷網域中的錯誤。其中包含：
+ `/var/log/cloud-init.log` – 執行個體組態初始階段的輸出
+ `/var/log/cloud-init-output.log` – 從執行個體組態期間執行的命令輸出
+ `/var/log/amazon/pcs/bootstrap.log` – 從執行個體組態期間執行的 PCS 特定操作輸出
+ `/var/log/slurmd.log` – 從 Slurm 工作負載管理員的協助程式 slurmd 輸出
+ `/var/log/messages` – 來自核心、系統服務和應用程式的系統訊息
+ `/var/log/secure` – 與身分驗證嘗試相關的日誌，例如 SSH、sudo 和其他安全事件

 日誌檔案會傳送至名為 的 CloudWatch 日誌群組`/PCSLogs/instances`。日誌串流是執行個體 ID 和日誌檔案基本名稱的組合。日誌群組的保留時間為 30 天。

 此外， 檔案會指示 CloudWatch 代理程式收集數個常見的指標，並依執行個體 ID 彙總它們。

### 存放組態
<a name="monitoring-cloudwatch_instances_store-config"></a>

 CloudWatch 代理程式組態檔案必須存放在 PCS 運算節點執行個體可存取的位置。有兩種常見的方法可以執行此操作。您可以將其上傳至運算節點群組執行個體可透過其執行個體描述檔存取的 Amazon S3 儲存貯體，或者，您可以將其儲存為 Amazon Systems Manager 參數存放區中的 SSM 參數。

#### 上傳至 S3 儲存貯體
<a name="monitoring-cloudwatch_instances_store-config_s3"></a>

 若要將檔案存放在 S3 中，請使用以下 AWS CLI 命令。在執行 命令之前，請進行下列取代：
+  使用您自己的 S3*3 儲存貯體名稱取代 amzn-s3-demo-bucket* 

 首先，（如果您有現有的儲存貯體，這是選用的），請建立儲存貯體以保留您的組態檔案 (s)。

```
aws s3 mb s3://amzn-s3-demo-bucket
```

 接著，將檔案上傳至儲存貯體。

```
aws s3 cp ./config.json s3://amzn-s3-demo-bucket/
```

#### 儲存為 SSM 參數
<a name="monitoring-cloudwatch_instances_store-config_ssm"></a>

若要將檔案儲存為 SSM 參數，請使用以下命令。在執行 命令之前，請進行下列取代：
+ 將 *region-code* 取代為您使用 AWS PCS 的 AWS 區域。
+ （選用） 將 *AmazonCloudWatch-PCS* 取代為 參數的自有名稱。請注意，如果您從 變更名稱的字首`AmazonCloudWatch-`，您將需要在節點群組執行個體描述檔中特別新增對 SSM 參數的讀取存取權。

```
aws ssm put-parameter \
   --region region-code \
   --name "AmazonCloudWatch-PCS" \
   --type String \
   --value file://config.json
```

### 撰寫 EC2 啟動範本
<a name="monitoring-cloudwatch_instances_lt"></a>

 啟動範本的特定詳細資訊取決於您的組態檔案是存放在 S3 還是 SSM 中。

#### 使用存放在 S3 中的組態
<a name="w2aac48c14c13b7c13b5"></a>

此指令碼會安裝 CloudWatch 代理程式、從 S3 儲存貯體匯入組態檔案，以及啟動 CloudWatch 代理程式。使用您自己的詳細資訊取代此指令碼中的下列值：
+  *amzn-s3-demo-bucket* – 您的帳戶可從中讀取的 S3 儲存貯體名稱 
+  */config.json* – 相對於儲存組態之 S3 儲存貯體根目錄的路徑 

```
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

packages:
- amazon-cloudwatch-agent

runcmd:
- aws s3 cp s3://amzn-s3-demo-bucket/config.json /etc/s3-cw-config.json
- /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file://etc/s3-cw-config.json

--==MYBOUNDARY==--
```

 節點群組的 IAM 執行個體描述檔必須能夠存取 儲存貯體。以下是上述使用者資料指令碼中儲存貯體的範例 IAM 政策。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        }
    ]
}
```

------

 另請注意，執行個體必須允許 S3 和 CloudWatch 端點的傳出流量。這可以使用安全群組或 VPC 端點來完成，具體取決於您的叢集架構。

#### 使用存放在 SSM 中的組態
<a name="monitoring-cloudwatch_instances_use-ssm"></a>

此指令碼會安裝 CloudWatch 代理程式、從 SSM 參數匯入組態檔案，以及啟動 CloudWatch 代理程式。使用您自己的詳細資訊取代此指令碼中的下列值：
+ （選用） 將 *AmazonCloudWatch-PCS* 取代為 參數的自有名稱。

```
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

packages:
- amazon-cloudwatch-agent

runcmd:
- /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudWatch-PCS

--==MYBOUNDARY==--
```

 節點群組的 IAM 執行個體政策必須連接 **CloudWatchAgentServerPolicy**。

 如果您的參數名稱開頭不是 `AmazonCloudWatch-` ，您將需要在節點群組執行個體描述檔中特別新增對 SSM 參數的讀取存取權。以下是說明 *DOC-EXAMPLE-PREFIX* 字首的範例 IAM 政策。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement" : [
    {
      "Sid" : "CustomCwSsmMParamReadOnly",
      "Effect" : "Allow",
      "Action" : [
        "ssm:GetParameter"
      ],
      "Resource" : "arn:aws:ssm:*:*:parameter/DOC-EXAMPLE-PREFIX*"
    }
  ]
}
```

------

 另請注意，執行個體必須允許 SSM 和 CloudWatch 端點的傳出流量。這可以使用安全群組或 VPC 端點來完成，具體取決於您的叢集架構。