AWS CloudWatch를 통해 지표, 로그 모니터링하기 설정

형기브·2023년 8월 25일
0

AWS

목록 보기
2/3

CloudWatch Agent

여러 모니터링 도구중에 그나마 쉽고 간단해 보이는 cloudWatch를 선택하게 되었습니다.
어떤 설정을 하지 않아도 기본적으로 제공되는 지표가 있는데 cpu, mem 등 제공하지 않는 지표를 모니터링 하기 위해서 Cloud Watch Agent를 사용하게 되었습니다.

프리티어를 사용하지 않는다면 요금이 발생할 수 있다고 합니다.


사전 설정 IAM 역할 부여하기

먼저 IAM -> 역할 -> 역할 생성

아래 단계를 실행해 줍니다.


다음 역할 이름을 정해주고 생성합니다.

이제 인스턴스로 가서 작업-> 보안 -> IAM 역할 수정에서 생성한 역할을 지정해줍니다.


agent 설치하기

잠깐!!! >> CloudWatch 에이전트 패키지 다운로드 공식문서 <<
링크에 들어가 사용하는 서버 OS에 맞는 명령어를 찾으세요.
저는 ubuntu를 사용중입니다.

업데이트 한번 해주고

sudo apt-get update
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb

sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

위는 .deb 파일을 다운로드하는 명령어
아래는 다운로드 받은 것을 설치하는 명령어 입니다. -i는 설치(install)을 의미합니다.
-E는 이미 설치된 패키지가 있으면 무시하겠다는 것입니다.

공식문서에서 그냥 긁어오면 띄어쓰기 때문에 안먹히니 잘 확인 하시고 명령을 입력하세요.


config 설정

이제 agent의 config를 설정해야합니다. Json형식으로 설정하는데
직접 수동으로 작성하셔도되고 Wizard( 킹법사 ) 를 사용하셔도 됩니다.

저는 필요한 설정만 하려고 찾아보면서 했는데 엄청난 시행착오를 겪고 실패 후 그냥 마법사를 사용하도록 했습니다.

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

마법사를 실행하면 하나씩 선택해야하는데 이렇게 선택하면 자동으로 JSON 코드를 만들어 줍니다.

{
        "agent": {
                "metrics_collection_interval": 60,
                "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/myapp/application.log",
                                                "log_group_name": "Hide-Production-Logs",
                                                "log_stream_name": "{instance_id}",
                                                "retention_in_days": 30
                                        }
                                ]
                        }
                }
        },
        "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"
                        }
                }
        }
}

큰 단위는
agent, metrics, log 입니다.

agent에서 지표 수집을 60초마다, root사용자의 권한으로 실행한다는 의미입니다.

metrics는 수집할 지표에 대한 설정이고

log는 수집할 로그에 대한 설정입니다.

마법사에 대한 자세한 내용은 공식문서나 구글링을 통해 알아보시고 프로젝트에 맞게 설정하시길 바랍니다.


설정파일 적용

아래 코드로 설정파일을 적용하고 시작합니다.

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

저는 다음과 같은 에러가 발생했습니다.

Configuration validation second phase failed
======== Error Log ========
2023-08-25T01:58:21Z E! [telegraf] Error running agent: Error loading config file /opt/aws/amazon-cloudwatch-agent/etc/amant.toml: error parsing socket_listener, open /usr/share/collectd/types.db: no such file or directory

/usr/share/collectd/types.db 가 없다는 말인데요

sudo apt-get install collectd

collectd를 설치해서 해결했습니다.


젤 뒤에 file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
이부분이 json설정코드가 들어있는 파일입니다.

참고로 설정을 다 하면 자동으로 파일을 만들어주는 것 같던데...

저는 파일이 없어서 그냥 마법사가 만들어준 json코드를 복사해놓고

sudo nano /etc/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.json

이렇게 나노파일에 들어가서 붙여넣어준 뒤 ctrl+k로 저장 ctrl + x로 나와줬습니다.

또 하나 말씀 드리자면 이제 agent를 실행하면 .json 파일이 .toml파일로 바뀌게 되어서 다시 위 명령어로 nano파일로 들어가면 파일이 비어있는 것을 확인할 수 있습니다.


agent 재실행

혹시

ps aux | grep amazon-cloudwatch-agent

명령어로 agent가 실행중인지 확인해보고 agent를 멈추거나 다시 시작하세요.

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start

지표는 잘 생성되었습니다.


++ 숙제...

로그 그룹이 자동으로 생성되어야 하는데 생성되지 않고 있습니다.

아마 서버 호스트 위에 도커 컨테이너 안에서 소스코드가 실행되고 있어서 인 것 같습니다.

시도

재시작도 해보고 설정파일도 바꿔보고...
IAM 권한 정책도 바꿔보고 여러가지 시도해보는데 되지 않고 있습니다.

현재 서버 호스트 위에 도커 컨테이너안에서 소스코드가 실행되고 있습니다.

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>/var/log/myapp/application.log</file>
        <encoder>
            <pattern>%d %-5level [%thread] %logger{35} - %msg %X{userId} %X{sessionId} %X{requestId} %ex%n</pattern>
        </encoder>
    </appender>

로그파일을 /var/log/myapp/application.log 경로에 생성하는데요

호스트에 /var/log/myapp 디렉터리를 만들어 놓고

github-action.yml 파일에 이렇게 컨테이너의 /var/log/myapp 와 호스트의 /var/log/myapp 디렉토리가 동기화 되게 설정해 놓았습니다.

docker run -d -p 8080:8080 -v /var/log/myapp:/var/log/myapp --name hide_music_container philomuvie/hide_music:latest

그런데도 계속 로그 그룹이 생성이 되지않네요..

해결되면 글을 업데이트 하도록 하겠습니다.

+++ github-action.yml 의 문법 문제 따옴표(")하나가 누락되어서 자동 배포가 실패해서 적용이 되지 않았던 문제였네요...하하하;;;

이제 로그 그룹이 잘 생성되었습니다!

profile
Slow but Steady

0개의 댓글