如何在沒有網際網路存取權的 Auto Scaling 群組中設定 EC2 執行個體,將指標和日誌傳送至 CloudWatch?

2 分的閱讀內容
0

在沒有網際網路存取權的 Amazon EC2 Auto Scaling 群組中,我有一個 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。我希望執行個體將日誌和指標傳送至 Amazon CloudWatch。

解決方法

1.    在 Amazon EC2 執行個體上安裝 CloudWatch 代理程式。此執行個體必須有網際網路連線。或者,您可以選擇已經在使用 CloudWatch 代理程式,將日誌和指標推送至 CloudWatch 的 EC2 執行個體。

2.    驗證 CloudWatch 代理程式是否正在從 EC2 執行個體推送指標和日誌。

3.    為 Auto Scaling 群組建立啟動範本。在啟動範本中,完成進階設定中的下列步驟:
針對 IAM 執行個體設定檔,請選取相關的正確 AWS Identity and Access Management (IAM) 角色,以允許執行個體將指標和日誌推送至 CloudWatch。
針對使用者資料,請輸入類似下列範例的指令碼。使用此指令碼的自訂版本,根據步驟 1** 中的 JSON 組態安裝和設定 CloudWatch 代理程式:
注意:** 下列使用者資料指令碼會在 EC2 Linux 執行個體中安裝 CloudWatch 代理程式。該指令碼會設定代理程式以監控記憶體和磁碟使用率,然後啟動代理程式。您必須使用 Auto Scaling 群組特定 AWS 區域的下載連結

#!/bin/bash
cd /tmp
wget https://s3.<region>.amazonaws.com/amazoncloudwatch-agent-<region>/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
rpm -U ./amazon-cloudwatch-agent.rpm
cat << EOF > /opt/aws/amazon-cloudwatch-agent/bin/config.json
{
  "agent": {
    "metrics_collection_interval": 60
  },
  "metrics": {
    "append_dimensions": {
      "InstanceId": "${aws:InstanceId}"
    },
    "metrics_collected": {
      "disk": {
        "measurement": [
          "disk_used_percent"
        ],
        "resources": [
          "*"
        ]
      },
      "mem": {
        "measurement": [
          "mem_used_percent"
        ]
      }
    }
  }
}
EOF
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s

4.    針對 CloudWatch 監控和 Amazon CloudWatch Logs 新增介面虛擬私有雲端 (VPC) 端點,以託管私有子網路的 VPC。若要尋找正確的端點,請參閱 Amazon CloudWatch 端點和配額。若要在這些 VPC 端點中僅允許必要的 CloudWatch 動作,請使用自訂政策更新端點政策。

請參閱下列 CloudWatch 監控 VPC 端點的政策範例:

{
  "Statement": [
    {
      "Sid": "PutOnly",
      "Principal": "*",
      "Action": [
        "cloudwatch:PutMetricData"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

請參閱下列 CloudWatch Logs VPC 端點的政策範例:

{
  "Statement": [
    {
      "Sid": "PutOnly",
      "Principal": "*",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

如需詳細資訊,請參閱建立介面 VPC 端點的考量一節。

5.    針對 Amazon Simple Storage Service (Amazon S3) 新增虛擬私有雲端 (VPC) 閘道端點,以託管私有子網路的 VPC。這可讓私有子網路的執行個體中的使用者資料指令碼,從 Amazon S3 存取和下載 CloudWatch 代理程式套件。

6.    使用您在步驟 3 中建立的啟動範本建立 Auto Scaling 群組 (已啟用私有子網路)。CloudWatch 代理程式會在此 Auto Scaling 群組中啟動的執行個體中執行。代理程式也會透過您在步驟 4 中建立的 VPC 介面端點傳送指標和日誌。

建立介面 VPC 端點的考量

  • 請務必使用與 Auto Scaling 群組的區域對應的端點。例如,如果 Auto Scaling 群組位於倫敦區域,則指標的端點為 monitoring.eu-west-2.amazonaws.com。在這種情況下,日誌的端點為 logs.eu-west-2.amazonaws.com
  • 確認您已開啟啟用私有 DNS 名稱選項。只有在 VPC 的啟用 DNS 主機名稱啟用 DNS 支援屬性設定為 true 時,您才可以開啟此選項。如果關閉此選項,則 VPC 介面端點不會映射至服務端點。因此,執行個體無法連線到公有服務端點。開啟此選項會將服務端點映射至 VPC 介面端點,並將與服務端點的通訊設定為私有。依預設,CloudWatch 代理程式會連線到此端點。如有必要,您可以使用代理程式組態檔案中的 endpoint_override 參數覆寫預設端點。
  • 確認安全群組規則允許在端點網路介面和 VPC 中與服務通訊的資源之間進行通訊。用於推送日誌和指標的 API 呼叫是 HTTPS 型 GET/POST 請求。端點網路介面安全群組需要來自來源 IP 的 HTTPS 通訊協定傳入規則。來源 IP 地址是推送指標和日誌的 EC2 執行個體或 VPC CIDR 的 IP 地址。
  • 當執行個體屬於 Auto Scaling 群組時,請在代理程式組態檔案中將其中一個維度指定為 Auto Scaling 群組名稱。為了尋找 Auto Scaling 群組的名稱,代理程式會從 Amazon EC2 端點取得與執行個體相關聯的標籤。您必須新增 Amazon EC2 服務的 VPC 介面端點。代理程式會從 EC2 執行個體的中繼資料取得 ImageIdInstanceIdInstanceType 值。

AWS 官方
AWS 官方已更新 1 年前