Tóm tắt
Thiết lập cảnh báo cho lưu lượng truyền tải mỗi tháng khi vượt quá 50% hoặc 80% của 4TB (giới hạn miễn phí của gói Lightsail 4GB):
Bước 1: Lấy metric Network In/Out từ CloudWatch.
Bước 2: Tạo cron job tính tổng lưu lượng.
Bước 3: Tạo cảnh báo (alarm) khi vượt ngưỡng.
Trước khi bắt đầu, cài AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
1. Khởi tạo IAM User
Truy cập AWS IAM Console.
Chọn Users > Create user.
Nhập tên:
lightsail-cloudwatch-agent
.Chọn Attach policies directly và gán policy
CloudWatchAgentServerPolicy
.Nhấn Next, thêm tag (tùy chọn), và chọn Create user.
Sau khi tạo, chọn user > Create access key.
Chọn CLI use case, tải file
.csv
chứaAccess key
vàSecret
.
2. Cài đặt và Cấu hình CloudWatch Agent
Bước 1: Cài đặt CloudWatch Agent
sudo apt update
sudo apt install -y wget unzip
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i amazon-cloudwatch-agent.deb
Bước 2: Thiết lập credential profile
aws configure --profile AmazonCloudWatchAgent
Nhập
Access Key
vàSecret
từ bước trước.Region:
ap-southeast-1
Output format: để trống hoặc
json
.
3. Cấu hình CloudWatch Agent
Bước 1: Tạo file config metric
sudo nano /opt/aws/amazon-cloudwatch-agent/bin/config.json
Dán nội dung sau:
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root",
"region": "ap-southeast-1"
},
"metrics": {
"append_dimensions": {
"InstanceId": "${aws:InstanceId}"
},
"metrics_collected": {
"net": {
"measurement": [
"bytes_recv",
"bytes_sent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
],
"total": true
}
}
}
}
Bước 2: Thiết lập profile sử dụng
sudo nano /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
Dán nội dung sau:
[credentials]
shared_credential_profile = "AmazonCloudWatchAgent"
Lưu lại bằng tổ hợp Ctrl + O
, Enter
, sau đó Ctrl + X
.
Bước 3: Khởi động Agent
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
Kiểm tra trạng thái:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status
4. Kiểm tra Metric Trên CloudWatch
Vào CloudWatch Console.
Chọn Metrics > All metrics > Browse.
Kiểm tra tại Custom namespaces > CWAgent.
Để tìm Instance ID
và interface
:
aws cloudwatch list-metrics \
--namespace "CWAgent" \
--metric-name "net_bytes_recv" \
--region ap-southeast-1 \
--output json
5. Cron Job Tính Tổng Lưu Lượng Mỗi Tháng
Bước 1: Tạo script
nano ~/network_monthly_usage.sh
Dán nội dung sau (chỉnh INSTANCE_ID
và INTERFACE_NAME
):
#!/bin/bash
export AWS_PROFILE=AmazonCloudWatchAgent
INSTANCE_ID="i-07b283c143999f4d0"
INTERFACE_NAME="eth0"
REGION="ap-southeast-1"
START_DATE="$(date -u +%Y-%m-01T00:00:00Z)"
END_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
RECV=$(aws cloudwatch get-metric-data --metric-data-queries "[{\"Id\":\"recv\",\"MetricStat\":{\"Metric\":{\"Namespace\":\"CWAgent\",\"MetricName\":\"net_bytes_recv\",\"Dimensions\":[{\"Name\":\"InstanceId\",\"Value\":\"$INSTANCE_ID\"},{\"Name\":\"interface\",\"Value\":\"$INTERFACE_NAME\"}]} ,\"Period\":86400,\"Stat\":\"Sum\"},\"ReturnData\":true}]" --start-time "$START_DATE" --end-time "$END_DATE" --region "$REGION" --query 'MetricDataResults[0].Values' --output text | awk '{sum+=$1} END {print sum+0}')
SENT=$(aws cloudwatch get-metric-data --metric-data-queries "[{\"Id\":\"sent\",\"MetricStat\":{\"Metric\":{\"Namespace\":\"CWAgent\",\"MetricName\":\"net_bytes_sent\",\"Dimensions\":[{\"Name\":\"InstanceId\",\"Value\":\"$INSTANCE_ID\"},{\"Name\":\"interface\",\"Value\":\"$INTERFACE_NAME\"}]} ,\"Period\":86400,\"Stat\":\"Sum\"},\"ReturnData\":true}]" --start-time "$START_DATE" --end-time "$END_DATE" --region "$REGION" --query 'MetricDataResults[0].Values' --output text | awk '{sum+=$1} END {print sum+0}')
TOTAL_BYTES=$(echo "$RECV + $SENT" | bc)
TOTAL_GB=$(echo "scale=3; $TOTAL_BYTES / 1024 / 1024 / 1024" | bc)
aws cloudwatch put-metric-data \
--namespace "Custom/MonthlyNetworkTraffic" \
--metric-name "TotalNetworkTrafficBytes" \
--value "$TOTAL_BYTES" \
--unit Bytes \
--region "$REGION"
echo "Total monthly traffic so far for $INSTANCE_ID ($INTERFACE_NAME): ${TOTAL_GB} GiB"
echo "Metric pushed to CloudWatch: Custom/MonthlyNetworkTraffic → TotalNetworkTrafficBytes"
Cấp quyền thực thi:
chmod +x ~/network_monthly_usage.sh
Bước 2: Tạo cron job
crontab -e
Thêm dòng sau (chạy mỗi phút):
* * * * * /bin/bash /home/ubuntu/network_monthly_usage.sh >> /home/ubuntu/network_usage.log 2>&1
Kiểm tra log:
tail -n 50 /home/ubuntu/network_usage.log
6. Tạo Alarm Cảnh Báo
Truy cập CloudWatch Console.
Vào Alarms > All alarms > Create alarm > Select metric.
Chọn namespace:
Custom/MonthlyNetworkTraffic
.Chọn metric:
TotalNetworkTrafficBytes
.Thiết lập threshold:
- Statistic: Average
- Period: 1 minute
- Threshold type: Static
- Condition: Greater than or equal to `2199023255552` (Bytes = 50% của 4TB)
- Chọn gửi cảnh báo qua email với SNS:
- Chọn Create new topic
- Đặt tên và nhập email nhận cảnh báo
- Xác nhận email khi nhận được
- Đặt tên cho alarm, xác nhận và tạo.
7. Tạo Alarm thứ hai (80%)
Lặp lại các bước trên, thay giá trị ngưỡng thành 3518437208883
Bytes (~80% của 4TB).
✅ Kết luận
- Khi lưu lượng vượt ngưỡng 50% hoặc 80%/tháng, hệ thống sẽ gửi cảnh báo email.
Top comments (0)