[AWS] EC2 오토스케일링 환경에서 웹서버 로그 보관하는 방법(클라우드와치 에이전트)
온프레미스 환경에선 주기적으로 압축하여 보관하거나 복사하거나 해서 관리 후 삭제 하기도 하는데. 오토스케일링 사용으로 EC2가 없어지는 경우 이런 방식이 필요하다. 물론 EFS를 사용하는 방법도 있겠지만 난 그러고 싶지 않다.
● 클라우드와치 Agent를 설치 한다.
yum -y install amazon-cloudwatch-agent
▷ 아래는 테스트 하기 위한 로그를 2초에 한번 씩 발생 시킨다.
while true; do (curl http://localhost; sleep 2); done
프라이빗 네트워크라면 아래와 같이 하면 됩니다. www.test.com은 인증서가 있는 가상호스트
curl -k --resolve www.test.com:443:127.0.0.1 -H "Host: www.test.com" https://www.test.com/index.php
* 위 스크립트에 대한 설명
while true; do ...; done은 주어진 명령어를 무한히 반복합니다.
curl -k는 SSL 인증서 검증을 비활성화합니다.
--resolve www.test.com:443:127.0.0.1는 www.test.com을 443 포트에서 127.0.0.1 주소로 해석하도록 합니다.
-H "Host: www.test.com"는 HTTP 요청 헤더에 Host: www.test.com을 추가하여, 웹 서버가 올바른 가상 호스트로 요청을 처리하도록 합니다.
https://www.test.com/index.php는 요청할 URL입니다.
sleep 2는 매 요청 사이에 2초간 대기합니다.
● EC2에서 CloudWatch agent 설정하기
▷ 접근할수 있는 정보 넣어주고 리전을 아래와 같이 변경해 준다.
# aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: ap-northeast-2
Default output format [None]:
● 클라우드 워치 에이전트 설정 위자드
▷ 질문을 통해 설정하는 프로그램 실행
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
▷ 실행을 하고 나면 아래 파일이 있을 것이다.
log_group_name은 클라우드와치 그룹에 보이는것으로 잘못 되었으면 변경해 두는 것이 좋다.
/opt/aws/amazon-cloudwatch-agent/bin/config.json
▷ 아래와 같은 오류를 만나게 되면 추가 설치가 필요 하다
======== Error Log ========
2023-03-12T09:21:28Z E! [telegraf] Error running agent: Error loading config file /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml: error parsing socket_listener, open /usr/share/collectd/types.db: no such file or directory
yum -y install collectd
▷ 시작,상태,멈춤
EC2 인스턴스가 부팅될 때마다 특정 작업을 자동으로 실행하도록 설정하는 것이 가능한데 이를 위해 systemd 서비스를 사용하여 CloudWatch Agent를 시작하도록 설정할 수 있다.
vim /etc/systemd/system/cloudwatch-agent.service
[Unit]
Description=Amazon CloudWatch Agent
After=network-online.target
[Service]
Type=simple
ExecStart=/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
Restart=on-failure
[Install]
WantedBy=multi-user.target
▷ 위에서 필요한 경우 아래 참고 하여 더 추가 할 수 있다 - 별도 스크립트 필요 할듯
ExecStartPre=: 서비스의 ExecStart 명령어가 실행되기 전에 실행됩니다.
ExecStartPost=: 서비스의 ExecStart 명령어가 실행된 후에 실행됩니다.
ExecReload=: 서비스가 재시작되지 않고 설정이 다시 로드될 때 실행됩니다.
ExecStop=: 서비스가 정지될 때 실행됩니다.
ExecStopPost=: 서비스가 정지된 후에 실행됩니다.
▷ 서버 시작할 때 자동 실행 시키기
테스트용에선 shutdown -r now 한번 해보자 잘 뜨는지!!
systemctl enable cloudwatch-agent.service
systemctl start cloudwatch-agent.service
▷ 프로세스 있는지 확인
ps augx | grep amazon-cloudwatch-agent
● 참고 할곳
- https://awlhdla.tistory.com/154
- https://devlog-wjdrbs96.tistory.com/326
- [AWS] 클라우드와치 로그그룹을 S3에 저장 > AWS.클라우드