Introduction
Amazon CloudWatch Agent là gì?
Amazon CloudWatch Agent là một công cụ được cung cấp bởi AWS (Amazon Web Services), cho phép bạn thu thập và gửi các dữ liệu hệ thống, log files, và metrics từ các server được quản lý bởi AWS (EC2 instances) hoặc các server on-premises tới Amazon CloudWatch để giám sát và phân tích.
Tại sao lại sử dụng CloudWatch Agent?
- Giám sát metrics chi tiết: CloudWatch Agent cho phép thu thập dữ liệu metrics chi tiết như CPU, RAM, disk, network, process,.. từ hệ thống của bạn. Điều này giúp bạn có cái nhìn sâu sắc hơn về hoạt động của hệ thống.
- Log monitoring: CloudWatch Agent cho phép thu thập và gửi các log files từ các ứng dụng và hệ thống lên CloudWatch Logs, giúp bạn theo dõi và phân tích log một cách hiệu quả.
- Tự động hóa: Có thể kết hợp với CloudWatch Alarm để gửi cảnh báo khi có vấn đề xảy ra, giúp bạn kịp thời phát hiện và xử lý sự cố.
- Đa nền tảng: CloudWatch Agent có thể cài đặt và hoạt động trên nhiều hệ điều hành khác nhau, bao gồm Windows, Linux, và cả các môi trường on-premises.
- Tối ưu hóa chi phí: Bằng cách giám sát hiệu suất hệ thống và sử dụng tài nguyên, bạn có thể phát hiện ra các điểm bất thường hoặc lãng phí tài nguyên, từ đó đưa ra các quyết định tối ưu hóa chi phí.
Từ đó có thể thấy combo CloudWatch Agent kết hợp với CloudWatch không chỉ giúp bạn giám sát hệ thống một cách toàn diện, mà còn giúp tối ưu hóa hiệu suất, phát hiện và xử lý sự cố nhanh chóng, đảm bảo rằng dịch vụ của bạn luôn hoạt động ổn định và hiệu quả. Đây là công cụ không thể thiếu đối với bất kỳ admin nào đang tìm cách nâng cao khả năng quản lý và giám sát hệ thống của mình trên AWS.
Mục tiêu bài lab
Bài lab này giới thiệu cách tạo script user data để tự động cài đặt và cấu hình CloudWatch Agent trên EC2 (Linux) ngay khi khởi động, giúp tiết kiệm thời gian trong việc collect metrics và log lên CloudWatch.
Lab Details
- Duration: 15 phút
- AWS Region: us-east-1
Task Details
- Create Instance Profile (IAM role) cho EC2
- Create EC2 với user data script (cài đặt và cấu hình CloudWatch Agent)
- Verify kết quả
- Clean up
1. Create Instance Profile (IAM role) cho EC2
Trước tiên, chúng ta cần tạo Instance Profile cho EC2, phải có quyền tối thiểu là CloudWatchAgentServerPolicy
để cho phép:
- Cài đặt và cấu hình CloudWatch Agent
- Gửi logs và metrics từ CloudWatch Agent đến CloudWatch
Tại Console IAM, thực hiện tạo Role như sau:
- Use case:
EC2
- Permissions policies
CloudWatchAgentServerPolicy
- Role name:
EC2CloudWatchAgentRole
2. Create EC2 với user data script
Tiếp theo chúng ta sẽ tạo EC2 ở default VPC. Default thì Region nào cũng có default VPC, nếu bạn không xoá thì nó sẽ ở đó - không ảnh hưởng gì đến hệ thống cả. Nếu bạn nào vô tình xoá thì cũng có thể tạo lại được
Tại EC2 console, chọn Instance ở menu bên trái, click Launch Instances
Name: clw-agent-demo
OS Images (AMI): Amazon Linux 2023
Instance type: t2.micro (loại này support free tier)
Key pair: chọn key pair đã có sẵn hoặc tạo mới
Network: Sử dụng default VPC, chọn default SG
Configue storage: để default
Mở Advanced details
IAM instance profile: gắn role EC2CloudWatchAgentRole
vừa tạo ở step 1
Kéo xuống User data: setting user data (lưu ý copy chính xác script bên dưới)
User data script sẽ thực hiện các việc sau:
- Cài đặt CloudWatch Agent
- Collect 2 metrics với namespace (
CWAgent
), Aggregation Dimension ( InstanceId
)- Metric 1:
mem_used_percent
- Metric 2:
disk_used_percent
- Collect logs của CloudWatch Agent và đẩy vào CloudWatch Log group name:
/aws/ec2/CLW-AGENT-LOGS-DEMO
User data script:
set -e # Exit immediately if a command exits with a non-zero status
# Variables
LOG_FILE_PATH="/var/log/amazon/ssm/amazon-ssm-agent.log"
CONFIG_FILE_PATH="/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json"
CONFIG_TEMP_FILE="/tmp/amazon-cloudwatch-agent.json"
CWAGENT_INSTALL_URL="https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm"
LOG_GROUP_NAME="/aws/ec2/CLW-AGENT-LOGS-DEMO"
# Function to log messages
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1"
}
# Check for package manager and install CloudWatch Agent
if command -v dnf &> /dev/null; then
log_message "Installing CloudWatch Agent using dnf"
sudo dnf -y install amazon-cloudwatch-agent
elif command -v yum &> /dev/null; then
log_message "Installing CloudWatch Agent using yum"
yum install -y $CWAGENT_INSTALL_URL
else
log_message "Neither dnf nor yum found. Exiting."
exit 1
fi
# Check if CloudWatch Agent is installed
if ! command -v amazon-cloudwatch-agent-ctl &> /dev/null; then
log_message "CloudWatch Agent installation failed. Exiting."
exit 1
fi
# Create the CloudWatch Agent configuration file
log_message "Creating CloudWatch Agent configuration file"
tee $CONFIG_TEMP_FILE > /dev/null <<EOF
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "$LOG_FILE_PATH",
"log_group_name": "$LOG_GROUP_NAME",
"log_stream_name": "{instance_id}"
}
]
}
}
},
"metrics": {
"namespace": "CWAgent",
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"ImageId": "\${aws:ImageId}",
"InstanceId": "\${aws:InstanceId}",
"InstanceType": "\${aws:InstanceType}"
},
"metrics_collected": {
"mem": {
"measurement": [
"used_percent"
]
},
"disk": {
"measurement": [
"used_percent"
]
},
}
}
}
EOF
# Ensure the configuration directory exists
log_message "Ensuring configuration directory exists"
mkdir -p $(dirname $CONFIG_FILE_PATH)
# Move the configuration file to the correct location
log_message "Moving configuration file to $CONFIG_FILE_PATH"
mv $CONFIG_TEMP_FILE $CONFIG_FILE_PATH
# Configure the CloudWatch Agent
log_message "Configuring CloudWatch Agent"
amazon-cloudwatch-agent-ctl -a stop
amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:$CONFIG_FILE_PATH
# Enable and start the CloudWatch Agent
log_message "Enabling and starting CloudWatch Agent"
systemctl enable amazon-cloudwatch-agent
systemctl start amazon-cloudwatch-agent
# Verify the Agent is running
log_message "Verifying CloudWatch Agent status"
if systemctl is-active --quiet amazon-cloudwatch-agent; then
log_message "CloudWatch Agent is running successfully"
else
log_message "CloudWatch Agent failed to start"
exit 1
fi
Click chọn Launch instance
Đợi một chút thì EC2 đã running và Status check đã passed hoàn toàn
3. Verify kết quả
3.1. Verify Log group
CloudWatch console > Log groups : /aws/ec2/CLW-AGENT-LOGS-DEMO
đã được tạo thành công
Click chọn /aws/ec2/CLW-AGENT-LOGS-DEMO
Log streams đã được tạo thành công và group theo instance ID
Click chọn instance ID
CloudWatch Log đã collect thành công Log events từ CloudWatch Agent
3.2. Verify metrics
CloudWatch console > All metrics : Custom namespaces CWAgent
đã được tạo thành công
Click chọn CWAgent
Aggregation Dimension InstanceId
đã được tạo thành công
Click InstanceId
Đã collect thành công 2 metrics:
mem_used_percent
disk_used_percent
Có thể tick chọn metrics để xem biểu đồ của các metrics theo thời gian
Tại đây chúng ta có thể tạo Alarm
cho metrics để gửi cảnh báo khi có vấn đề xảy ra.
Tham khảo link dưới đây:
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Alarm-On-Metrics.html
4. Clean up
- Xoá EC2
- Xoá IAM Role
- Xoá Log group
Challenge:
Tổng kết
Như vậy vừa rồi mọi người đã cùng CloudMentorPro tìm hiểu cách setup CloudWatch Agent bằng user data script để collect metrics và log sau đó gửi đến CloudWatch. Từ đó tối ưu hóa được quá trình cài đặt và config CloudWatch Agent một cách nhanh chóng, cũng như monitoring được metrics và log của hệ thống trên CloudWatch. Ngoài ra còn rất nhiều tính năng xịn xò khác mà CloudWatch cung cấp như Dashboard, Alarm, Logs Insights, X-Ray traces, ..vv không chỉ giúp bạn giám sát hệ thống một cách toàn diện, mà còn giúp tối ưu hóa hiệu suất, phát hiện và xử lý sự cố nhanh chóng, đảm bảo rằng dịch vụ của bạn luôn hoạt động ổn định và hiệu quả.
Lời cuối cùng CloudMentorPro cám ơn mọi người đã theo dõi bài blog này, hi vọng bài blog sẽ hữu ích cho mọi người. Nếu có chỗ nào chưa rõ cần trao đổi thêm hoặc các bạn muốn tụi mình viết thêm blog về chủ đề nào đó thì đừng ngần ngại hãy comment cho chúng mình biết nhé!
Hẹn gặp lại mọi người ở các bài blog tiếp theo nha !
Tài liệu Tham khảo: