Cloud/AWS
[AWS] EC2에 CloudWatch Agent 구성하여 로그 중앙 집중화
`작은거인`
2021. 7. 16. 13:15
Amazon Linux 2에 CloudWatch Agent를 설치하고 구성하여 로그 중앙 집중화하는 방법을 알아보겠습니다.
- EC2 인스턴스 로그 수집 및 모니터링
- CloudWatch Logs를 사용하면 로그 데이터를 통해 애플리케이션과 시스템을 모니터링 할 수 있음
- CloudWatch Logs는 모니터링하는데 로그 데이터를 사용하므로 코드를 변경할 필요가 없음
- CloudWatch Logs에서는 애플리케이션 로그에서 발생하는 오류의 수를 추적하고 오류 비율이 지정한 임계값을 초과할 때마다 알림 전송이 가능
- CloudWatch Logs 로그 보존
- 기본적으로 로그는 무기한 저장되고 만료 기간은 없음 ( 데이터 보존 기관 설정 가능 )
- CloudWatch Logs를 사용하여 내구성이 뛰어난 스토리지에 로그데이터를 저장
- 필터 패턴을 사용하여 로그 이벤트에서 일치하는 단어, 구문 또는 값을 검색이 가능
- CloudWatch Logs 설정 방법
- EC2 에서 사용할 IAM Role을 생성 및 설정
- CloudWatch Logs 에이전트 설치 및 설정
- CloudWatch Logs 에서 수집된 로그 확인
(AWS) EC2 에서 사용할 IAM Role을 생성 및 설정
- IAM Role 생성 시 trusted entity를 EC2로 선택하고
CloudWatchAgentServerPolicy
를 추가 합니다. CloudWatchAgentServerPolicy
내용을 살펴보면 아래와 같습니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "ec2:DescribeVolumes", "ec2:DescribeTags", "logs:PutLogEvents", "logs:DescribeLogStreams", "logs:DescribeLogGroups", "logs:CreateLogStream", "logs:CreateLogGroup" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:GetParameter" ], "Resource": "arn:aws:ssm:*:*:parameter/AmazonCloudWatch-*" } ] }
- EC2 인스턴스를 선택하고 보안 → IAM 역할 수정을 선택하여 위에서 생성한 Role을 연결합니다.
(EC2) CloudWatch Logs 에이전트 설치 및 설정
Agent 구성방식은 AWS 에서 제공하는 Wizard를 사용하는 방법과 구성파일을 수동으로 생성하는 방법이 있습니다. 포스팅에서는 수동으로 구성하는 방법에 대해서 설명하겠습니다.
EC2
CloudWatch Agent RPM 다운로드 합니다.[ec2-user@ip-10-0-11-111 ~]$ sudo su - [root@ip-10-0-11-111 ~]# wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm; --2021-07-16 12:00:42-- https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm Resolving s3.amazonaws.com (s3.amazonaws.com)... 52.216.128.53 Connecting to s3.amazonaws.com (s3.amazonaws.com)|52.216.128.53|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 41427996 (40M) [application/octet-stream] Saving to: ‘amazon-cloudwatch-agent.rpm’ 100%[================================================================================>] 41,427,996 8.49MB/s in 5.6s 2021-07-16 12:00:49 (7.04 MB/s) - ‘amazon-cloudwatch-agent.rpm’ saved [41427996/41427996]
EC2
CloudWatch Agent RPM 설치 & 확인 합니다.[root@ip-10-0-11-111~]# rpm -Uvh amazon-cloudwatch-agent.rpm; Preparing... ################################# [100%] create group cwagent, result: 0 create user cwagent, result: 0 Updating / installing... 1:amazon-cloudwatch-agent-1.247348.################################# [100%] [root@ip-10-0-11-229 nginx]# rpm -qa | grep amazon-cloudwatch-agent amazon-cloudwatch-agent-1.247348.0b251302-1.x86_64
EC2
Heredoc 문법을 사용하여 config.json 파일에 설정 파일을 만듭니다.cat <<EOF > /opt/aws/amazon-cloudwatch-agent/bin/config.json { "agent": { "metrics_collection_interval": 30, "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/nginx/access.log", "log_group_name": "WEB_LogGroup", "log_stream_name": "[WEB] {instance_id} (access.log)" }, { "file_path": "/var/log/nginx/error.log", "log_group_name": "WEB_LogGroup", "log_stream_name": "[WEB] {instance_id} (error.log)" } ] } } } } EOF
EC2
CloudWatch 에이전트를 시작합니다.[root@ip-10-0-11-111 nginx]# /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; ****** processing amazon-cloudwatch-agent ****** /opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source file:/opt/aws/amazon-cloudwatch-agent/bin/config.json --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp Start configuration validation... /opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --input-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default 2021/07/16 12:08:13 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp ... Valid Json input schema. I! Detecting run_as_user... No csm configuration found. No metric configuration found. Configuration validation first phase succeeded /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml Configuration validation second phase succeeded Configuration validation succeeded ****** processing amazon-cloudwatch-agent ****** Redirecting to /bin/systemctl stop amazon-cloudwatch-agent.service
EC2
CloudWatch 에이전트를 잘 동작하는지 확인 해보도록 하겠습니다.[root@ip-10-0-11-111 nginx]# /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status; { "status": "running", "starttime": "2021-07-16T03:09:07+0000", "configstatus": "configured", "cwoc_status": "stopped", "cwoc_starttime": "", "cwoc_configstatus": "not configured", "version": "1.247348.0b251302" } [root@ip-10-0-11-111 nginx]# ps -ef | grep cloudwatch root 4308 1 0 12:09 ? 00:00:05 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml -envconfig /opt/aws/amazon-cloudwatch-agent/etc/env-config.json -pidfile /opt/aws/amazon-cloudwatch-agent/var/amazon-cloudwatch-agent.pid root 4501 3794 0 12:46 pts/1 00:00:00 grep --color=auto cloudwatch
EC2
config.json 구성 파일에서 설정한 값이 어떻게 CloudWatch Logs로 보여줄지 amazon-cloudwatch-agent.toml 파일을 통해서 확인할 수 있습니다.# cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml [agent] collection_jitter = "0s" debug = false flush_interval = "1s" flush_jitter = "0s" hostname = "" interval = "30s" logfile = "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log" logtarget = "lumberjack" metric_batch_size = 1000 metric_buffer_limit = 10000 omit_hostname = false precision = "" quiet = false round_interval = false [inputs] [[inputs.logfile]] destination = "cloudwatchlogs" file_state_folder = "/opt/aws/amazon-cloudwatch-agent/logs/state" [[inputs.logfile.file_config]] file_path = "/var/log/nginx/access.log" from_beginning = true log_group_name = "WEB_LogGroup" log_stream_name = "[WEB] i-012345665656e42fd03 (access.log)" pipe = false [[inputs.logfile.file_config]] file_path = "/var/log/nginx/error.log" from_beginning = true log_group_name = "WEB_LogGroup" log_stream_name = "[WEB] i-012345665656e42fd03 (error.log)" pipe = false [inputs.logfile.tags] metricPath = "logs" [outputs] [[outputs.cloudwatchlogs]] force_flush_interval = "5s" log_stream_name = "i-012345665656e42fd03" region = "ap-northeast-2" tagexclude = ["metricPath"] [outputs.cloudwatchlogs.tagpass] metricPath = ["logs"]
- (선택)
EC2
편의성을 위해 마법사를 사용하여 에이전트 구성 파일을 생성할 수 있습니다. 나중에 파일을 수동으로 편집하여 지표 또는 로그를 추가하거나 제거할 수 있습니다.$ /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard ...
(AWS) CloudWatch Logs 에서 수집된 로그 확인
AWS
Cloudwatch Logs에서 정상적으로 로그가 수집되는 것을 보실 수 있습니다.