이번 글에서는 위의 그림과 같이 EC2에 설치된 Nginx Access Log
를 CloudWatch로 전송하는 법에 대해서 정리해보겠습니다.
역할
에다 CloudWatchAgentServerPolicy
정책을 추가하겠습니다.
그리고 원하는 역할 이름
을 정하고 정책이 잘 선택되었는지 확인 후에 역할을 생성하겠습니다.
저는 새로 EC2 Linux2
버전으로 만들 것이기 때문이 위와 같이 IAM 역할
을 추가하겠습니다. (만약 기존에 존재하는 EC2를 사용할 것이라면 위에서 만든 역할을 해당 EC2에게 적용해주면 됩니다.)
EC2가 생성이 되었으면 접속을 한 후에 CloudWatch Agent 설치
를 해보겠습니다.
그 전에 먼저 LAMP 웹 서버
를 설치하겠습니다.
sudo yum update -y
sudo amazon-linux-extras install -y php7.2
sudo yum install -y httpd
sudo systemctl start httpd (Apache 웹 서버 시작(d는 daemon 임))
sudo systemctl enable httpd (Apache 웹 서버가 매번 시스템이 부팅할 때마다 시작되도록 함)
sudo systemctl is-enabled httpd (httpd 가 실행되고 있는지 확인하는 명령어)
위의 명령어를 통해서 설치하면 /var/www
경로가 생겼을 것입니다. 거기로 이동해서 CloudWatch Agent
를 설치하겠습니다. (EC2 Linux2를 만들면 /var/www가 없기 때문에 Apache 웹서버는 필요 없지만.. 설치는 하겠습니다.)
cd /var/www
sudo wget https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip
그러면 위와 같이 zip
파일 하나가 생깁니다. 스크립트 압축 파일을 해제하겠습니다.
sudo unzip AmazonCloudWatchAgent.zip -d AmazonCloudWatchAgent
그리고 해당 디렉토리로 이동 후에 설치 스크립트를 이용해 에이전트를 설치하겠습니다.
sudo rm AmazonCloudWatchAgent.zip
cd AmazonCloudWatchAgent
sudo ./install.sh
CloudWatch Agents는 손쉽게 설치할 수 있도록 설치 마법사를 제공합니다. 설치 마법사를 실행하겠습니다.
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
위의 질문에 모두 1
을 치고 엔터 누르겠습니다. 그러면 계속 다음 설정에 대한 질문들이 나옵니다.
위에서 보이는 것 같이 질문에 대한 답을 하고 엔터를 누르겠습니다.
위의 보이는 질문과 답에 맞게 입력하고 엔터를 치고 설정을 하겠습니다.
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 (설치된 CloudAgent 실행)
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status (올바르게 실행되었는지 확인)
그러면 위와 같이 running
이 잘 뜨고 있는 것을 확인할 수 있습니다.
sudo netstat -tnlp
sudo kill -9 PID (80번 포트의 PID)
ex) sudo kill -9 5142
그리고 이번 실습에서는 Nginx를 사용할 것이기 때문에 위에서 웹 서버를 설치했던 웹서버를 위의 명령어를 통해서 80번 포트를 kill 하겠습니다.
sudo amazon-linux-extras install -y nginx1 (nginx 설치)
nginx -v (설치확인)
sudo service nginx start (nginx 서비스 시작)
그리고 EC2 인스턴스에서 CloudWatch
에이전트가 로그 파일도 모니터링해서 CloudWatch Logs로 보낼 수 있게 설정 파일을 편집하겠습니다.
sudo vi /opt/aws/amazon-cloudwatch-agent/bin/config.json
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/nginx/access.log", // EC2 Nginx log가 저장되는 위치
"log_group_name": "Spring-log", // CloudWatch 로그 그룹 이름
"log_stream_name": "{instance_id}"
}
]
}
}
}
위와 같이 입력하고 :wq
를 통해서 저장하겠습니다.
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 -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
그리고 아래와 같이 EC2 IP로 접속하면 Nginx default 화면이 보일텐데요. 아래와 같이 접속을 하면 /var/log/nginx/access.log
에 로그가 생기고 그 로그는 CloudWatchAgent를 통해서 CloudWatch 로그 그룹으로 이동할 것입니다.
그러면 위와 같이 Nginx
관련 로그가 CloudWatch
에도 저장이 되는 것을 확인할 수 있습니다.