Amazon EC2에서 취득하고 있는 Nginx 로그를 Amazon CloudWatch로 전송하여 관리해 봤습니다.

Amazon EC2에서 취득하고 있는 Nginx 로그를 Amazon CloudWatch로 전송하여 관리해 봤습니다.

Amazon EC2에서 취득하고 있는 Nginx 로그를 Amazon CloudWatch로 전송하여 관리해 봤습니다.
Clock Icon2025.02.27

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Amazon EC2에서 취득하고 있는 Nginx 로그를 Amazon CloudWatch로 전송하여 관리해 봤습니다.

사전 준비

jw-blgtestcloud-1

Amazon EC2에서 CloudWatch로 로그를 전송하기 위해서는 특정 정책이 필요합니다.

  • CloudWatchAgentServerPolicy
  • CloudWatchAgentAdminPolicy

둘 중 하나의 정책을 EC2 인스턴스에 연결합니다.

$ sudo apt update
$ sudo apt install nginx

이어서 상기 명령어를 통해 nginx를 설치합니다.

※ 이번 블로그는 Ubuntu OS를 기준으로 진행합니다.

$ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2025-02-27 04:07:58 UTC; 9s ago
       Docs: man:nginx(8)
    Process: 4068 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 4069 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 4162 (nginx)
      Tasks: 2 (limit: 1130)
     Memory: 4.8M
        CPU: 21ms
     CGroup: /system.slice/nginx.service
             ├─4162 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─4165 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Feb 27 04:07:58 ip-10-0-7-217 systemd[1]: Starting A high performance web server and a reverse proxy server...
Feb 27 04:07:58 ip-10-0-7-217 systemd[1]: Started A high performance web server and a reverse proxy server.

설치가 끝나고, nginx의 버전과 상태를 확인합니다.

jw-blgtestcloud-2

웹 페이지도 문제없이 출력되므로 사전 준비는 끝입니다.

CloudWatch Logs 에이전트 설정

사전 준비가 끝났다면, CloudWatch 에이전트를 설치하고 설정을 합니다.

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

wget을 통해 직접 설치합니다.

$ cat /opt/aws/amazon-cloudwatch-agent/bin/CWAGENT_VERSION
1.300052.0b1024

제대로 설치가 되었는지 버전을 확인합니다.

$ sudo vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json

CloudWatch Logs 설정을 정의하는 json 파일을 작성합니다.

{
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/var/log/nginx/access.log",
                        "log_group_name": "nginx-access-logs",
                        "log_stream_name": "{instance_id}"
                    },
                    {
                        "file_path": "/var/log/nginx/error.log",
                        "log_group_name": "nginx-error-logs",
                        "log_stream_name": "{instance_id}"
                    }
                ]
            }
        }
    }
}

nginx의 경우 아래의 경로에서 액세스 로그와 에러 로그를 관리하고 있습니다.

  • /var/log/nginx/access.log
  • /var/log/nginx/error.log

해당 로그를 CloudWatch Logs에서 관리할 수 있도록 설정합니다.

상세한 설정 값은 아래 AWS 공식 문서에서 확인할 수 있습니다.

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html#agent-configuration-file

$ sudo systemctl enable amazon-cloudwatch-agent
$ sudo systemctl restart amazon-cloudwatch-agent

마지막으로 CloudWatch 에이전트를 사용 가능한 상태로 변경하고 재시작합니다.

로그 확인

jw-blgtestcloud-3

CloudWatch 콘솔 화면에서 로그 그룹으로 이동하면 생성된 [nginx-error-logs]와 [nginx-access-logs]를 확인할 수 있습니다.

jw-blgtestcloud-4

이어서 [nginx-access-logs]의 로그 그룹으로 들어와 보면, 출력된 로그를 확인할 수 있습니다.

웹 페이지에 액세스하면 5초 이내에 로그 그룹에 로그가 출력되는 것을 확인할 수 있습니다.

본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 jaewookkim533@yahoo.com로 보내주시면 감사하겠습니다.

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.