Hướng Dẫn Thêm Metrics Sử Dụng Amazon CloudWatch Agent Và Cấu Hình Cảnh Báo CPU Chuyên mục Devops 2024-10-09 2 Lượt xem 1 Lượt thích 0 Bình luận
Amazon CloudWatch là một dịch vụ mạnh mẽ của AWS giúp theo dõi và quản lý các tài nguyên trên đám mây của bạn. Trong bài viết này, tôi sẽ hướng dẫn các bạn cách:
- Cấu hình Amazon CloudWatch Agent để thu thập thêm metrics, cụ thể là CPU.
- Cấu hình cảnh báo khi CPU vượt quá 70%.
- Thiết lập thông báo qua email và webhook (kèm tùy chọn gửi qua SMS).
Bước 1: Cài Đặt Amazon CloudWatch Agent
Nếu bạn chưa cài đặt Amazon CloudWatch Agent, làm theo các bước sau:
-
Cài đặt CloudWatch Agent trên EC2 (hoặc máy chủ tương ứng). Chạy lệnh cài đặt (nếu chưa cài):
sudo yum install amazon-cloudwatch-agent -y
-
Cấu hình CloudWatch Agent: Tạo tệp cấu hình /opt/aws/amazon-cloudwatch-agent/bin/config.json để xác định các metrics mà bạn muốn theo dõi. Một tệp cấu hình ví dụ như sau:
{ "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/mysql-slow.sql", "log_group_name": "prod-tokimekikareshi-DB-slow-query", "log_stream_name": "{instance_id}/var/log/mysql/slow", "retention_in_days": 90 }, { "file_path": "/var/log/mysqld.log", "log_group_name": "prod-tokimekikareshi-DB-errors", "log_stream_name": "{instance_id}/var/log/mysql/errors", "retention_in_days": 90 } ] } } }, "metrics": { "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 }, "disk": { "measurement": [ "used_percent", "inodes_free" ], "metrics_collection_interval": 60, "resources": [ "/", "/mnt" ] }, "diskio": { "measurement": [ "reads", "writes", "read_bytes", "write_bytes", "io_time" ], "metrics_collection_interval": 60 }, "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_user", "cpu_usage_system" ], "totalcpu": true, "resources": [ "*" ], "metrics_collection_interval": 60 } } } }
-
Chạy lại agent với cấu hình mới: Sau khi cấu hình xong, khởi động hoặc restart agent để áp dụng thay đổi:
sudo /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
sudo systemctl enable amazon-cloudwatch-agent sudo systemctl start amazon-cloudwatch-agent
Bước 2: Cấu Hình Cảnh Báo CPU Vượt Quá 70%
-
Truy cập vào Amazon CloudWatch.
- Mở CloudWatch từ AWS Management Console.
- Chọn Alarms từ menu bên trái và nhấn Create Alarm.
-
Chọn Metrics:
- Trong màn hình tạo alarm, nhấn Select Metric.
- Điều hướng đến CWAgent → Per-Instance Metrics → CPU Usage → cpu_usage_idle.
- Chọn cpu_usage_idle và nhấn Select metric.
-
Cấu hình điều kiện cảnh báo:
- Trong phần điều kiện, đặt Threshold type thành Static.
- Chọn Lower threshold và đặt giá trị là 30 (vì CPU idle là phần trăm CPU không được sử dụng, nên nếu nó dưới 30% nghĩa là CPU đang hoạt động trên 70%).
- Datapoints to alarm: Để mặc định là 1/1, tức nếu bất kỳ điểm dữ liệu nào vi phạm, cảnh báo sẽ được kích hoạt ngay lập tức.
Bước 3: Cấu Hình Gửi Thông Báo Qua Email
-
Tạo SNS Topic:
- Trong Amazon SNS (Simple Notification Service), chọn Topics và nhấn Create Topic.
- Đặt tên cho Topic (ví dụ: CPU-Alert).
-
Tạo Subscription cho email:
- Sau khi tạo Topic, nhấn Create Subscription.
- Protocol: Chọn Email.
- Endpoint: Nhập địa chỉ email bạn muốn nhận thông báo.
- Xác nhận email từ hộp thư của bạn.
-
Gắn SNS vào Alarm:
- Quay lại CloudWatch, trong bước tạo alarm, tại phần Notification, chọn SNS Topic bạn vừa tạo.
Bước 4: Cấu Hình Gửi Thông Báo Qua Webhook (Slack)
-
Tạo Webhook trong Slack:
- Trong Slack, tạo một Incoming Webhook cho kênh bạn muốn nhận cảnh báo (tham khảo tài liệu Slack để tạo webhook).
- Lưu lại URL của webhook.
-
Cấu hình hàm Lambda:
- Trong trang Function code, sử dụng mã sau (đảm bảo thay thế
YOUR_SLACK_WEBHOOK_URL
bằng URL webhook Slack của bạn): -
import urllib3 import json http = urllib3.PoolManager() def lambda_handler(event, context): url = "https://hooks.slack.com/services/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" instance_id = "i-04844967ff377e48d" instance_name = "tokimekikareshi-mysql-DB-prod" msg = { "text": f""" インスタンスID: {instance_id} インスタンス名: {instance_name} アラート内容: 該当インスタンスIDにアタッチされているEBSのディスク容量が75%を超えました。 EBSボリュームの容量引き上げ、もしくはログファイルの削除を実施してください。 """ } encoded_msg = json.dumps(msg).encode("utf-8") resp = http.request("POST", url, body=encoded_msg) print( { "message": "OK", "status_code": resp.status, "response": resp.data, } )
- Lưu lại hàm bằng cách nhấn vào nút "Deploy".
- Trong trang Function code, sử dụng mã sau (đảm bảo thay thế
-
Gắn Lambda vào Alarm bằng tùy chọn Lambda action:
- Trong phần "Actions", thay vì chọn SNS, bạn chọn "Lambda function".
(Tuỳ chọn) Bước 5: Cấu Hình Gửi Thông Báo Qua SMS
-
Tạo SNS Subscription cho SMS:
- Trong SNS, tạo Subscription.
- Protocol: Chọn SMS.
- Endpoint: Nhập số điện thoại nhận thông báo.
-
Gắn SNS vào Alarm:
- Quay lại CloudWatch, trong phần tạo alarm, thêm SNS Topic đã tạo cho SMS vào mục Notification.
Kết Luận
Vậy là bạn đã cấu hình thành công Amazon CloudWatch Agent để thu thập metrics CPU, thiết lập cảnh báo khi CPU vượt quá 70% và gửi thông báo qua email, Slack webhook, hoặc SMS (tuỳ chọn). Bạn có thể áp dụng các bước tương tự cho các metrics khác và điều chỉnh cảnh báo để phù hợp với yêu cầu hệ thống của mình.
Bình luận (0)