개요
- CloudWatch Agent를 사용하기까지 각 단계를 스크립트로 자동화 해보겠습니다. 콘솔에서 다뤄본 내용은 아래와 같습니다.
- cloudwatch agent 설치
- cloudwatch agent 구성 파일 생성 및 편집
- cloudwatch agent 시작
스크립트
핵심 부분
- 여기서 스크립트의 핵심은
구성 파일 생성 부분
입니다. 그냥 cat << EOF
명령 시 Permission denied
에러가 발생했고, 해결 방법은 bash -c
를 이용하는 것입니다.
- 그리고 구성 파일에
JSON
을 입력하는 과정에서 ${}
형식을 입력 시 bash 스크립트
가 변수로 인식하기 때문에 JSON
파일에 ${}
를 그대로 입력하고 싶다면, $${}
형식으로 $
를 두 번 입력해야 정상적으로 인식됩니다.
- 구성 파일은
agent
, metrics
, logs
섹션으로 나뉘어져 있습니다. 각 항목의 속성에 대한 자세한 설명은 AWS 공식 문서를 참고하세요.
#!/bin/bash
echo "
#### install cloudwatch-agent ####
...
"
sudo yum install amazon-cloudwatch-agent -y
echo "
Success!
"
echo "
#### Create amazon-cloudwatch-agent.json ####
...
"
sudo touch /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
sudo bash -c 'cat << EOF > /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
"agent": {
"metrics_collection_interval": 10,
"logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
},
"metrics": {
"namespace": "MyCustomNamespace",
"metrics_collected": {
"cpu": {
"resources": [
"*"
],
"measurement": [
{
"name": "cpu_usage_idle",
"rename": "CPU_USAGE_IDLE",
"unit": "Percent"
},
{
"name": "cpu_usage_nice",
"unit": "Percent"
},
"cpu_usage_guest"
],
"totalcpu": false,
"metrics_collection_interval": 10,
"append_dimensions": {
"customized_dimension_key_1": "customized_dimension_value_1",
"customized_dimension_key_2": "customized_dimension_value_2"
}
},
"disk": {
"resources": [
"/",
"/tmp"
],
"measurement": [
{
"name": "free",
"rename": "DISK_FREE",
"unit": "Gigabytes"
},
"total",
"used"
],
"ignore_file_system_types": [
"sysfs",
"devtmpfs"
],
"metrics_collection_interval": 60,
"append_dimensions": {
"customized_dimension_key_3": "customized_dimension_value_3",
"customized_dimension_key_4": "customized_dimension_value_4"
}
},
"diskio": {
"resources": [
"*"
],
"measurement": [
"reads",
"writes",
"read_time",
"write_time",
"io_time"
],
"metrics_collection_interval": 60
},
"swap": {
"measurement": [
"swap_used",
"swap_free",
"swap_used_percent"
]
},
"mem": {
"measurement": [
"mem_used",
"mem_cached",
"mem_total"
],
"metrics_collection_interval": 1
},
"net": {
"resources": [
"eth0"
],
"measurement": [
"bytes_sent",
"bytes_recv",
"drop_in",
"drop_out"
]
},
"netstat": {
"measurement": [
"tcp_established",
"tcp_syn_sent",
"tcp_close"
],
"metrics_collection_interval": 60
},
"processes": {
"measurement": [
"running",
"sleeping",
"dead"
]
}
},
"append_dimensions": {
"ImageId": "$${aws:ImageId}",
"InstanceId": "$${aws:InstanceId}",
"InstanceType": "$${aws:InstanceType}",
"AutoScalingGroupName": "$${aws:AutoScalingGroupName}"
},
"aggregation_dimensions": [
[
"ImageId"
],
[
"InstanceId",
"InstanceType"
],
[
"d1"
],
[]
],
"force_flush_interval": 30
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
"log_group_name": "amazon-cloudwatch-agent.log",
"log_stream_name": "amazon-cloudwatch-agent.log",
"timezone": "UTC"
},
{
"file_path": "/opt/aws/amazon-cloudwatch-agent/logs/test.log",
"log_group_name": "test.log",
"log_stream_name": "test.log",
"timezone": "Local"
}
]
}
},
"log_stream_name": "my_log_stream_name",
"force_flush_interval": 15
}
}
EOF'
echo "
Success!
"
echo "
#### Start cloudwatch-agent ####
...
"
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
sudo systemctl status amazon-cloudwatch-agent
echo "
Success!
"