[EC2] EC2에서 ssh 와 tomcat 로그 CloudWatch에 연동하기

2022-07-22


Photo by Lola Rose on Unsplash

EC2에 접속하는 ssh와 tomcat에서 발생하는 로그 정보를 cloudwatch 등록하는 방법을 알아보자.


1. 패키지 설치

 

# sudo yum install amazon-cloudwatch-agent

 

우선 cloudwatch 등록하기 위해 aws에서 제공하는 agent를 설치해야 한다.


2. 권한설정

 

서버와 cloudwatch 간에 통신을 하기 위해서는 ec2에 권한을 부여해 주어야 한다. aws IAM에서 아래와 같은 역할을 만들어준다. (정책명: CloudWatchAgentServerRole)

해당 역할에는 아래의 정책을 연결해주면 된다.

 

두 가지 중에 CloudWatchAgentServerPolicy 만 넣어줘도 크게 상관없다.


cloudwatch에 연동할 ec2에도 해당 권한을 넣어 준다.

 


추가적으로 EC2 등록된 IAM 계정(사용자)에도 위와 동일한 정책을 연결해 주는 것은 로그 보존 정책을 사용하려면 필요하다. 서버에 사용자 등록과 / IAM 권한이 궁금하면 아래 링크를 확인하자.

https://seeminglyjs.tistory.com/399?category=1280624 

 

[AWS S3] 리눅스 서버에 AWS Configure 등록후 S3 접속[S3, CLI]

2022-05-18 서버에서 AWS CLI 명령어를 사용하기 전에 우선적으로 해야 하는 것이 있다. 오늘은 이와 같은 방법을 알아보자. 1. Identity and Access Management(IAM) 우선적으로 IAM의 계정 권한 중 AmazonS3..

seeminglyjs.tistory.com

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent-commandline.html

 

CloudWatch 에이전트와 함께 사용하기 위한 IAM 역할 및 사용자 생성 - Amazon CloudWatch

최근에 당사는 고객들에게 정책을 직접 생성하도록 요구하는 대신 Amazon에서 만든 새로운 CloudWatchAgentServerPolicy 및 CloudWatchAgentAdminPolicy 정책을 사용하여 다음과 같은 절차를 수정했습니다. 파라

docs.aws.amazon.com


3. EC2 설정하기 

 

이제 서버 내에서 설정해야 하는 사항을 살펴보자.

//타입디비 생성 없으면 실행 안됨
# mkdir /usr/share/collectd/
# cd /usr/share/collectd/
# touch types.db

 

/usr/share/collectd/ 해당 위치에 types.db라는 것이 없으면 오류가 나기 때문에 경로에 해당 파일을 만들어주자.


아래의 설정 파일이 있는 디렉터리로 이동한다.

# cd /opt/aws/amazon-cloudwatch-agent/bin

 


config.json은 어떤 방식으로 cloudwatch에 로그 파일을 보낼 것인지에 대한 설정 파일이다.

# vi config.json

 

만약에 해당 파일이 없으면 아래 명령어를 실행하여 기본값으로 진행하면 위의 파일이 생기게 된다.

# cd /opt/aws/amazon-cloudwatch-agent/bin/
# ./amazon-cloudwatch-agent-config-wizard

해당 config의 내용은 아래와 같은 형식으로 구성하면 된다. 

{
        "agent": {
                "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/secure",
                                                "log_group_name": "자신의 원하는 로그 그룹 이름",
                                                "log_stream_name": "자신의 원하는 로그 스트림 이름",
                                                "retention_in_days": -1,
                                                "encoding" : "자신의 서버의 인코딩 방식"
                                        },
                                        {
                                                "file_path": "톰켓 로그가 저장되는 파일",
                                                "log_group_name": "자신의 원하는 로그 그룹 이름",
                                                "log_stream_name": "자신의 원하는 로그 스트림 이름",
                                                "retention_in_days": -1,
                                                "encoding" : "자신의 서버의 인코딩 방식"
                                        }
                                ]
                        }
                }
        },
        "metrics": {
                "aggregation_dimensions": [
                        [
                                "InstanceId"
                        ]
                ],
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "collectd": {
                                "metrics_aggregation_interval": 60
                        },
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }

 

디테일한 파라미터 정보는 아래 링크에서 확인하면 된다.

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html

 

수동으로 CloudWatch 에이전트 구성 파일 생성 또는 편집 - Amazon CloudWatch

disk 지표에는 Partition의 측정기준이 있는데, 이는 생성된 사용자 지정 지표의 수가 인스턴스와 연결된 파티션의 수에 따라 달라짐을 뜻합니다. 보유한 디스크 파티션의 수는 사용 중인 AMI 및 서

docs.aws.amazon.com


4. amazon-cloudwatch-agent 가동

# sudo /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 -s    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

 

config.json 파일의 수정이 완료되면 위의 명령어를 통해서 재실행시키면 세팅은 완료된다.


메인 이미지 출처 : Photo by Lola Rose on Unsplash