Prerequisite
본 문서는 SSM 을 통해 설정하는 것이 아닌 개별적 서버 내 수동 설정하는 방법에 대해 안내합니다.
Amazon Linux 2를 기준으로 안내합니다.
Process
CloudWatch Agent 설치
sudo yum install amazon-cloudwatch-agent
RPM 다운로드 및 설치
wget: https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
sudo rpm -U ./amazon-cloudwatch-agent.rpm
IAM Role 적용
CloudWatch Agent가 CloudWatch로 Data를 보낼 수 있도록 아래의 권한이 포함된 Role을 해당 EC2에 부여해줍니다.
아래의 권한은 AWS Managed Policy입니다.
- CloudWatchAgentServerPolicy
- CloudWatchEventsFullAccess
이외 Log Group으로 Log를 수집하는 경우, 아래와 같이 Parameter로 보존정책을 수정할 수 있도록 권한을 추가해줍니다. (Optional)
신규로 정책을 생성해서 추가해줍니다.
예> Policy Name: CloudWatchAgentPutLogsRetention
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:PutRetentionPolicy",
"Resource": "*"
}
]
}
CloudWatch Agent Paramater 추가
CloudWatch Agent가 동작하는데 필요한 Parameter 를 정의해줍니다.
CloudWatch Agent는 최대 2개의 Paramater Group을 동시에 실행할 수 있습니다.
하여, 일반적으로 리소스 지표를 수집하기 위한 Parameter와 Log 수집을 위한 Parameter를 수집하도록 하는 설정을 기준으로 안내합니다.
(Parameter 파일은 적당한 위치에 .json 파일로 생성합니다.)
지표수집을 위한 Parameter
기본적인 수집 지표인 disk와 memory의 지표를 수집합니다.
예> Location: /tmp/mainparameter.json
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"append_dimensions": {
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}",
"AutoScalingGroupName": "${aws:AutoScalingGroupName}"
},
"aggregation_dimensions": [
["AutoScalingGroupName"],
["InstanceId", "InstanceType"],
["InstanceId"]
],
"metrics_collected": {
"disk": {
"measurement": ["disk_used_percent", "disk_inodes_free"],
"metrics_collection_interval": 60,
"resources": ["*"]
},
"mem": {
"measurement": ["mem_used_percent"],
"metrics_collection_interval": 60
}
}
}
}
기본적인 지표를 수집하기 위해 CloudWatch Agent를 fetch-config 옵션으로 실행합니다.
CloudWatch agent가 실행되며 Pramater의 설정에 따라 지표를 수집하기 시작합니다.
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/tmp/mainparameter.json
Log 수집을 위한 Parameter
로그 위치, 수집될 Log_Group명 지정 등 세부적인 설정을 합니다.
예> Location: /tmp/collectlog.json
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [{
"file_path": "/home/ec2-user/log/local_log.log",
"log_group_name": "Business_Server_Log",
"log_stream_name": "[system] {instance_id} (local_log)",
"retention_in_days": 365
}]
}
}
}
}
Log 수집 Parameter를 추가실행하기 위해 CloudWatch Agent를 append-config 옵션으로 실행합니다.
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config -m ec2 -s -c file:/tmp/collectlog.json
CloudWatch Agent Log 확인
CloudWatch Agent가 정상적으로 지표 또는 Log를 수집하는지 확인합니다.
Location: /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
2023/05/15 13:36:45 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json ...
2023/05/15 13:36:45 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/mainparameter ...
2023/05/15 13:36:45 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/collectlog ...
2023/05/15 13:36:45 I! Valid Json input schema.
2023/05/15 13:36:45 I! Detected runAsUser: root
2023/05/15 13:36:45 I! Changing ownership of [/opt/aws/amazon-cloudwatch-agent/logs /opt/aws/amazon-cloudwatch-agent/etc /opt/aws/amazon-cloudwatch-agent/var] to 0:0
2023-05-15T04:36:45Z I! Starting AmazonCloudWatchAgent 1.247355.0
2023-05-15T04:36:45Z I! AWS SDK log level not set
2023-05-15T04:36:45Z I! Loaded inputs: disk logfile mem
2023-05-15T04:36:45Z I! Loaded aggregators:
2023-05-15T04:36:45Z I! Loaded processors: ec2tagger
2023-05-15T04:36:45Z I! Loaded outputs: cloudwatch cloudwatchlogs
2023-05-15T04:36:45Z I! Tags enabled: host=ip-xxx-xx-xxx-xx.ap-northeast-2.compute.internal3
2023-05-15T04:36:45Z I! [agent] Config: Interval:1m0s, Quiet:false, Hostname:"ip-xxx-xx-xxx-xx.ap-northeast-2.compute.internal3", Flush Interval:1s
2023-05-15T04:36:45Z I! [processors.ec2tagger] ec2tagger: Check ec2 metadata
2023-05-15T04:36:45Z I! [logagent] starting
2023-05-15T04:36:45Z I! [logagent] found plugin cloudwatchlogs is a log backend
2023-05-15T04:36:45Z I! [logagent] found plugin logfile is a log collection
2023-05-15T04:36:45Z I! [processors.ec2tagger] ec2tagger: EC2 tagger has started initialization.
2023-05-15T04:36:45Z I! [processors.ec2tagger] ec2tagger: Check ec2 metadata
2023-05-15T04:36:45Z I! [processors.ec2tagger] ec2tagger: EC2 tagger has started initialization.
2023-05-15T04:36:45Z I! cloudwatch: get unique roll up list [[AutoScalingGroupName] [InstanceId InstanceType] [InstanceId]]
2023-05-15T04:36:45Z I! cloudwatch: publish with ForceFlushInterval: 1m0s, Publish Jitter: 31s
2023-05-15T04:36:45Z I! [processors.ec2tagger] ec2tagger: Initial retrieval of tags succeded
2023-05-15T04:36:45Z I! [processors.ec2tagger] ec2tagger: EC2 tagger has started, finished initial retrieval of tags and Volumes
2023-05-15T04:36:45Z I! [processors.ec2tagger] ec2tagger: Initial retrieval of tags succeded
2023-05-15T04:36:45Z I! [processors.ec2tagger] ec2tagger: EC2 tagger has started, finished initial retrieval of tags and Volumes
2023-05-15T04:36:46Z I! [inputs.logfile] Reading from offset 8803925 in /home/ec2-user/log/local_log.log
CloudWatch - All metrics - CWAgent 및 CloudWatch Log Group에 지표 또는 로그가 수집되는지 확인됩니다.
Reference
댓글
댓글 0개
댓글을 남기려면 로그인하세요.