본문 바로가기

Monitoring

EC2의 accesslog를 cloudwatch로 수집하기

EC2에서 apache2를 설치하여 호스팅을 한 후, 수집된 accesslog를 cloudawatch로 푸쉬해, 확인할 수 있도록 한다. 다음과 같은 순서로 진행된다.

  1. EC2 설정
  2. apache2 설치 및 호스팅
  3. cloudwatch 에이전트 설치
  4. 수집된 로그 확인

EC2 설정

  • VPC내 퍼블릭 서브넷에 EC2를 생성한다. 인터넷에서 쉽게 접속하기 위해서이다.
  • 퍼블릭 IP 주소를 자동으로 할당하게 한다.
  • 보안그룹을 ssh, http가 접속 가능하게 한다.
  • Ubuntu 20.04를 사용한다.
  • cloudwatch로 전송하기 위해 EC2 역할을 부여해야만 한다. 새 역할을 만들어 cloudwatch full access 를 부여하도록 한다. 역할 권한은 최소화하는게 좋지만, cloudwatch 로그 그룹 생성, 로그 스트림 생성 등 다양한 역할을 하므로 전체권한을 부여한다.

이렇게 하면 EC2 설정은 끝난다.


Apache2 설치 및 호스팅

간단하다! 다음과 같이 ssh로 EC2에 접속하여 설치 후, EC2의 퍼블릭 IP로 접속을 시도해보자

sudo apt-get update
sudo apt-get install apache2

다음과 같은 페이지가 나온다면, Apache2가 정상적으로 호스팅되고 있다는 뜻이다.

진짜 로그가 쌓일까? apache2의 access log는 다음과 같은 경로에 저장되어 있다. /var/log/apache2/access.log 파일을 열어 직접 확인해보자.

cat /var/log/apache2/access.log

CloudWatch 에이전트 설치

Ubuntu를 기준으로 다음과 같이 설치한다.

wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

마법사를 실행하여 구성파일을 생성한다.

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

필요에 따라, 마법사 질문에 답하면 다음과 같은 config.json 파일이 /opt/aws/amazon-cloudwatch-agent/bin/ 에 생성된다. 주의할 점은 수집하고 싶은 로그 파일 경로를 /var/log/apache2/access.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

이로써 EC2에서 cloudwatch에 성공적으로 로그 파일을 푸시할 준비가 되었다.


수집된 로그 확인

퍼블릭 IP로 여러번 접속하여 일부러 로그를 남겨본다. 그리고 cloudwatch에서 로그를 확인해본다.

118.38.64.61 - - [11/Jul/2022:12:26:52 +0000] "GET / HTTP/1.1" 200 3477 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"

위와 같이 client IP, method, status, port 등등 url 접속 로그를 수집했다.

과제를 잘 수행하기 위해서 더 필요한 정보가 있고, 필요하지 않은 정보도 있다. 이는 apache2에 쌓이는 로그를 조금 수정하는 방법을 찾아보아야겠다.

그리고, referersession ID , email , responseTime 을 추가할 방법을 고민해봐야겠다.

이를 트리거로 lambda함수를 생성하여 googlesheet API를 통해 업데이트 하면 되지 않을까? 생각이 든다.