이번 포스팅에서는 Nginx 컨테이너의 접근 로그와 에러 로그를 호스트의 볼륨으로 마운트하여 실시간으로 확인하고, 컨테이너가 중지되어도 로그 기록을 유지하도록 구성해볼 것이다. 이를 통해 Nginx 로그에서 특정 시간대의 접근 기록을 확인하여 웹 서버의 접속 현황을 분석해보고자 한다. 즉, Nginx 컨테이너의 접근 및 에러 로그 영역을 볼륨으로 구성하여 실시간 접근 기록 확인 및 장애 시 에러에 대한 정보를 컨테이너가 중지되어도 확인 가능하도록 한다 .
1. Nginx 로그 디렉터리 생성
ubuntu@docker:~$ mkdir nginx-log
nginx-log 라는 디렉터리를 생성하여 Nginx의 로그 파일을 저장할 호스트 디렉터리를 준비해준다.
2. Nginx 컨테이너 실행 및 볼륨 마운트 설정
ubuntu@docker:~$ docker run -d --name=myweb -v /home/ubuntu/nginx-log:/var/log/nginx -p 8011:80 nginx:1.25.0-alpine
차례대로 설명을 해보자면 먼저 nginx 컨테이너를 백그라운드로 실행하고, myweb 이라는 이름을 부여해준다. 이후 볼륨 마운트(-v)를 설정하여 /home/ubuntu/nginx-log 디렉터리를 컨테이너 /var/log/nginx 로 마운드 하여 Nginx의 접근 및 에러 로그가 호스트 디렉터리에 저장되도록 해주었다.
3. 컨테이너 상태 확인
ubuntu@docker:~$ docker ps | grep myweb
6a43d3f0c784 nginx:1.25.0-alpine "/docker-entrypoint.…" 30 seconds ago Up 30 seconds
0.0.0.0:8011->80/tcp, :::8011->80/tcp myweb
myweb 컨테이너가 정삭적으로 실행 중인 것을 확인할 수 있었고, 포트 매핑 정보가 (0.0.0.0:8001 ->80 tcp)와 컨테이너 상태를 확인할 수 있었다.
4. Nginx 로그 파일 확인
ubuntu@docker:~$ ls nginx-log
access.log error.log
5. 실시간 로그 모니터링
ubuntu@docker:~$ tail -f nginx-log/access.log
192.168.56.1 - - [28/Oct/2024:01:41:42 +0000] "GET / HTTP/1.1" 200 615 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" "-"
192.168.56.1 - - [28/Oct/2024:01:41:42 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.56.10:8011/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" "-"
tail -f 명령어를 사용하여 access.log 파일의 실시간 로그를 모니터링 했다. 이 로그에서 클라이언트의 요청이 기록되는 것을 확인 할 수 있었고 , curl 명령어를 통해 접속할 때마다 로그가 추가되는 것을 배울 수 있었다.
test 1. Nginx 접근 테스트
ubuntu@docker:~$ curl http://192.168.56.101:8011
test 2. 특정 시간대의 IP 접근 횟수 분석
awk '$4>"[02/Jan/2024:09:55:00]" && $4<"[02/Jan/2024:09:56:00]"' access.log | \
awk '{ print $1 }' | sort | uniq -c | sort -r | more
Nginx의 접근 로그와 에러로그를 호스트에 마운트하여 실시간 로그를 확인할 수 있었고, 컨테이너 중지 시에도 로그를 유지할 수 있도록 하는 설정을 배울 수 있었다. 또한 접근 로그를 분석하여 특정 시간대에 접속 기록과 접속 횟수를 확인하는 방법을 익힐 수 있었고, 나중에 웹에서 장애가 발생 시 원인을 분석하거나, 웹 서버의 트래픽 현환을 모니터링 하는 데 유용할 것 같다.
'OS > Docker' 카테고리의 다른 글
[Docker] Dokerfile 빌드 (개발 & 배포 과정) (0) | 2024.10.28 |
---|---|
[Docker] Dockerfile 및 명령어 (0) | 2024.10.28 |
[Docker] 암시적 docker volumes (0) | 2024.10.28 |
[Docker] Proxy vs Reverse Proxy 차이 (0) | 2024.10.21 |
[Docker] Volume - Bind mount 실습 (0) | 2024.10.21 |