EC2 등 AWS 인스턴스의 사용자 지정 로그 파일을 모니터링, 저장 엑세스 하는 기능입니다.
AWS를 사용하는 여러 시스템, 어플리케이션의 로그를 중앙 집중화하여 관리할 수 있습니다. 모은 로그를 바탕으로 패턴 기반 검색, 필터링, 시각화, 백업할 수 있습니다.
로그 데이터에 쿼리를 수행하여 원하는 조건을 만족하는 정보를 조회할 수 있습니다.
로그 데이터를 통해 어플리케이션과 시스템을 모니터링 할 수 있습니다. 이를 바탕으로 특정한 상황에 알림을 보낼 수도 있겠죠.
로그를 보존하는 기능을 제공합니다.
IAM 권한 설정 페이지로 들어가서 새로운 역할을 생성합니다.
AWS 서비스, EC2를 선택 후 다음을 누릅시다.
여러 권한 정책 중 CloudWatchAgentServerPolicy
를 클릭하고 다음으로 넘어가봅시다.
적절한 이름과 설명을 추가 후 역할을 생성해봅시다.
이후 원하는 EC2에 역할을 부여해줍시다.
CloudWatch Logs를 시작하려면 먼저 CloudWatch agent를 설치해야 합니다.
wget {주소}
주소는 AWS 링크에서 본인 환경에 맞게 찾으면 됩니다.
다운로드가 끝났나면 다음 명령어를 통해 해당 디렉토리로 패키지를 풀어봅시다.
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
이제 설정 파일을 만들러 가봅시다.
agent
: agent에 대한 일반적인 설정 내용입니다. metrics
: CloudWatch로 수집할 지표들입니다. 오직 로그 수집만 한다면 파일로 내보낼 수 있습니다. logs
: 어떤 로그 파일을 CloudWatch Logs로 내보낼지 설정합니다. {
"agent": {
"metrics_collection_interval": 60,
"region": "ap-northeast-2",
"logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
"debug": false
}
,
"metrics": {
"metrics_collected": {
"collectd": {},
"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": {
"test": "test1",
"date": "2017-10-01"
}
},
"netstat": {
"measurement": [
"tcp_established",
"tcp_syn_sent",
"tcp_close"
],
"metrics_collection_interval": 60
},
"disk": {
"measurement": [
"used_percent"
],
"resources": [
"*"
],
"drop_device": true
},
"processes": {
"measurement": [
"running",
"sleeping",
"dead"
]
}
},
"append_dimensions": {
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}",
"AutoScalingGroupName": "${aws:AutoScalingGroupName}"
},
"aggregation_dimensions": [
[
"AutoScalingGroupName"
],
[
"InstanceId",
"InstanceType"
],
[]
]
},
"logs":
{
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "{보낼 로그 파일 위치}",
"log_group_name": "amazon-cloudwatch-agent.log",
"log_stream_name": "my_log_stream_name_1",
"timestamp_format": "%H: %M: %S%y%b%-d"
}
]
},
"windows_events": {
"collect_list": [
{
"event_name": "System",
"event_levels": [
"INFORMATION",
"ERROR"
],
"log_group_name": "System",
"log_stream_name": "System"
},
{
"event_name": "CustomizedName",
"event_levels": [
"INFORMATION",
"ERROR"
],
"log_group_name": "CustomizedLogGroup",
"log_stream_name": "CustomizedLogStream"
}
]
}
},
"log_stream_name": "my_log_stream_name"
}
}
공식 홈페이지의 예시를 바탕으로 구성해본 Config입니다. 여기서 필요한 메트릭을 추가/제거 하거나 수정하면 됩니다.
EC2 환경인 경우 다음 명령어를 실행해봅시다.
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:{configuration-file-path}
{configuration-file-path}에 config 파일 경로를 넣어주시면 됩니다. 절대경로로 넣어주시는 걸 추천합니다👍.
이런 에러가 뜬다면, 에러에 명시된 파일을 빈 파일로 만들어 주면 해결됩니다.
sudo mkdir /usr/share/collectd
sudo touch /usr/share/collectd/types.db
AWS에서 CloudWatch 서비스에 접속해봅시다.
모든 지표에 가보면 수집중인 지표들을 확인할 수 있습니다.
로그 그룹을 확인하면
뭔가 로그 그룹이 하나 생겼네요!
정상적으로 내보낸 로그를 확인할 수 있습니다. 다음 글에서는 수집한 로그를 바탕으로 이상 동작 알람 기능을 도입해봅시다.
AWS Docs - Amazon CloudWatch Logs란 무엇인가요?
AWS Docs - Manually create or edit the CloudWatch agent configuration file
AWS Docs - Installing and running the CloudWatch agent on your servers
EC2에 CloudWatch Agent 구성하여 모니터링하는 방법