我想使用 Amazon CloudWatch 來監控 Amazon Elastic Container Service (Amazon ECS) 容器日誌。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
設定您的日誌驅動程式
您可以使用 Amazon ECS 主控台或 JSON 編輯器來設定日誌驅動程式。
使用 Amazon ECS 主控台
請完成下列步驟:
- 開啟 Amazon ECS console (Amazon ECS 主控台)。
- 在導覽窗格中選擇 Task definitions (任務定義),然後選擇 Create new task definition (建立新任務定義)。
**注意:**若要更新現有任務定義,請選取任務定義,然後選擇 Create new revision (建立新修訂版本)。
- 在 Create new task definition (建立新任務定義) 頁面的 Task definition configuration (工作定義組態) 區段中,輸入您的任務定義系列名稱。
- 在 Infrastructure requirements (基礎架構需求) 區段中,選擇您的啟動類型。
- 在 Container (容器) 區段中,於 Logging (記錄) 中選擇 Use log collection (使用日誌集合)。
- 對於下列金鑰,請保留預設值。如果欄位為空,請輸入值:
awslogs-group
awslogs-region
awslogs-stream-prefix
**注意:**如果日誌群組不存在,請將 awslogs-create-group 參數設為 True。
- 請確認任務執行 AWS Identity and Access Management (IAM) 角色權限包含 CreateLogGroup 動作。
- 選擇 Create (建立)。
使用 JSON 編輯器
若要在 ECS 任務定義中定義 LogConfiguration 參數,請將 ECS 任務定義範本輸入主控台的 JSON 編輯器。
組態範例:
"logConfiguration":
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/my-log-group",
"awslogs-region": "region-code",
"awslogs-stream-prefix": "ecs"
}
}
**注意:**將 my-log-group 替換為您的日誌群組名稱。
如需詳細資訊,請參閱 Amazon ECS 任務定義: 將日誌路由到 CloudWatch,並將 Amazon ECS 日誌傳送到 CloudWatch。
如需有關日誌選項的詳細資訊,請參閱 Docker 網站上的 Amazon CloudWatch Logs 選項。
監控容器日誌並對其進行疑難排解
分析容器日誌
若要使用 CloudWatch Logs Insights 來查詢日誌,請完成下列步驟:
-
開啟 CloudWatch console (CloudWatch 主控台)。
-
在瀏覽窗格中,選擇 Logs。
-
選擇 Logs Insights。
-
選取您的日誌群組。
-
輸入您的查詢。
-
選擇 Run query (執行查詢)。
-
搜尋錯誤關鍵字,以對應用程式問題進行疑難排解。如果您的應用程式日誌包含回應時間,請分析緩慢的請求。
查詢範例:
fields @timestamp, @message
| filter @message like /error/
| sort @timestamp desc
fields @timestamp, @message, response_time
| filter response_time > 2000
| sort response_time desc
如需詳細資訊,請參閱使用 CloudWatch Logs Insights 分析日誌資料。
建立警示
請完成下列步驟:
- 從日誌事件建立指標篩選器。
- 建立 CloudWatch 警示。
對錯誤進行疑難排解
若要對 OutOfMemory 或 ConnectionTimeout 錯誤進行疑難排解,請參閱如何對 Fargate 上 Amazon ECS 任務的高 CPU 使用率問題進行疑難排解?
若要對大量的 5xx HTTP 狀態碼進行疑難排解,請參閱 HTTP 500: 內部伺服器錯誤。
與 AWS 服務整合
使用訂閱來存取來自 CloudWatch Logs 的即時日誌事件摘要。CloudWatch 會將日誌事件提供給 Amazon Kinesis 串流或 AWS Lambda 等服務,以處理、分析或載入其他系統。
控制 CloudWatch Logs 的成本
修改保留原則
最佳做法是在開發環境中使用較短的保留期,而在生產環境中則保留日誌較長的時間。
您可以選擇的保留期範圍從 1 天至 10 年,也可以選擇無限期保留日誌。為避免不必要的成本,請檢閱保留設定,以確認保留日誌的時間不會超過所需時間。
若要 set retention policies (設定保留政策),請完成下列步驟:
- 開啟 CloudWatch console (CloudWatch 主控台)。
- 在瀏覽窗格中,選擇 Logs。
- 選擇 Log groups (日誌群組)。
- 選取您的日誌群組。
- 選擇 Actions (動作),然後選擇 Edit retention setting (編輯保留設定)。
- 選取保留期。例如,選擇 1 週、1 個月或自訂值。
- 選擇 Save (儲存)。
或者,執行以下 put-retention-policy AWS CLI 命令:
aws logs put-retention-policy --log-group-name "/ecs/production-web-app" --retention-in-days retention-period>
**注意:**將 log-group-name 替換為您的日誌組名稱,將 retention-period 替換為您的保留期。
分析日誌指標
若要降低並最佳化成本,請使用 AWS Cost Explorer 分析與每個日誌群組相關的成本。
匯出和封存日誌
若要以較低的成本進行長期儲存,請將日誌移至 Amazon Simple Storage Service (Amazon S3) 或封存解決方案。若要將日誌匯出至 Amazon S3,請使用 CloudWatch 主控台或執行 create-export-task 命令:
aws logs create-export-task --log-group-name "/ecs/production-web-app" \--from start-timestamp --to end-timestamp --destination "s3-log-archive"
**注意:**將 log-group-name 替換為您的日誌群組名稱,將 start-timestamp 替換為您的開始時間,將 end-timestamp 替換為您的結束時間。
實作 Amazon S3 Lifecycle 政策
使用 S3 Lifecycle 組態,在指定時間後自動將舊日誌轉換為 Amazon S3 Glacier,以進行封存或刪除。
避免過度記錄
將應用程式設定為僅傳送相關日誌。如需詳細資訊,請參閱記錄最佳做法。
相關資訊
Amazon Elastic Container Service 中的記錄與監控