- ubuntu EC2
- EC2 인스턴스는 CloudWatchAgentServerPolicy 역할을 부여받은 상태
- /root/.. 경로에 저장되는 로그를 수집하고자 함
CloudWatch Agent가 실행될 때 수행할 작업은 /opt/aws/amazon-cloudwatch-agent/bin/config.json에 저장된다.
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "cwagent"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/root/...생략/server.log",
"log_group_name": "shared-contacts/prod/server-logs",
"log_stream_name": "{instance_id}-deploy"
}
]
}
}
},
"metrics": {
"namespace": "EC2/PerformanceMetrics",
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}"
},
"metrics_collected": {
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
위 설정 파일을 바탕으로 CloudWatch Agent를 실행하면 정상적으로 실행이 되는데, Metric 값은 수집하는 것과 달리 로그 데이터를 수집하지 않는 문제가 발생한다.
이 문제가 발생한 이유는 /root 경로에 접근하기 위해서는 root 사용자 권한을 가지고 있어야 한다. 그러나 위 설정 파일을 보면 run_as_user가 cwagent로 되어있기에 /root 경로에 접근하지 못해 로그를 수집하고 못했던 것이다.
따라서 run_as_user를 cwagent에서 root로 수정하면 된다.
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/root/...생략/server.log",
"log_group_name": "shared-contacts/prod/server-logs",
"log_stream_name": "{instance_id}-deploy"
}
]
}
}
},
"metrics": {
"namespace": "EC2/PerformanceMetrics",
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}"
},
"metrics_collected": {
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}