DEV Community

Vuong Bach Doan for AWS Community Builders

Posted on • Edited on

[VN] Hướng dẫn Cài đặt CloudWatch Agent để Giám sát Lưu lượng Lightsail (Ubuntu OS)

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
Enter fullscreen mode Exit fullscreen mode

1. Khởi tạo IAM User

  1. Truy cập AWS IAM Console.

  2. Chọn Users > Create user.

  3. Nhập tên: lightsail-cloudwatch-agent.

  4. Chọn Attach policies directly và gán policy CloudWatchAgentServerPolicy.

  5. Nhấn Next, thêm tag (tùy chọn), và chọn Create user.

  6. Sau khi tạo, chọn user > Create access key.

  7. Chọn CLI use case, tải file .csv chứa Access keySecret.


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

Enter fullscreen mode Exit fullscreen mode

Bước 2: Thiết lập credential profile

aws configure --profile AmazonCloudWatchAgent
Enter fullscreen mode Exit fullscreen mode
  • Nhập Access KeySecret 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
Enter fullscreen mode Exit fullscreen mode

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
      }
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

Bước 2: Thiết lập profile sử dụng

sudo nano /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml

Enter fullscreen mode Exit fullscreen mode

Dán nội dung sau:

[credentials]
shared_credential_profile = "AmazonCloudWatchAgent"

Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Kiểm tra trạng thái:

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status

Enter fullscreen mode Exit fullscreen mode

4. Kiểm tra Metric Trên CloudWatch

  1. Vào CloudWatch Console.

  2. Chọn Metrics > All metrics > Browse.

  3. Kiểm tra tại Custom namespaces > CWAgent.

Để tìm Instance IDinterface:

aws cloudwatch list-metrics \
  --namespace "CWAgent" \
  --metric-name "net_bytes_recv" \
  --region ap-southeast-1 \
  --output json
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Dán nội dung sau (chỉnh INSTANCE_IDINTERFACE_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"
Enter fullscreen mode Exit fullscreen mode

Cấp quyền thực thi:

chmod +x ~/network_monthly_usage.sh
Enter fullscreen mode Exit fullscreen mode

Bước 2: Tạo cron job

crontab -e
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Kiểm tra log:

tail -n 50 /home/ubuntu/network_usage.log
Enter fullscreen mode Exit fullscreen mode

6. Tạo Alarm Cảnh Báo

  1. Truy cập CloudWatch Console.

  2. Vào Alarms > All alarms > Create alarm > Select metric.

  3. Chọn namespace: Custom/MonthlyNetworkTraffic.

  4. Chọn metric: TotalNetworkTrafficBytes.

  5. 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)
Enter fullscreen mode Exit fullscreen mode
  1. 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
Enter fullscreen mode Exit fullscreen mode
  1. Đặ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)