개발
서버 개발 일지
Nginx 서버 로그 기록 설정 및 커스터마이징
59 views as of October 10, 2024.
Nginx 서버를 운용하다보면 참 여러가지 서버 트래픽이 발생한다.

제일 무난한 관리방법은 역시 모든 엑세스에 대해서 철저하게 로깅해놓고 지속적으로 모니터링하면서 필요한 타이밍에 제어를 하는것이다.

경험이 많으신 서버 관리자는 더 효율적인 방법과 자료로 질이 나쁜 트래픽이나 엑세스 요청을 유효하게 거르시겠지만 나같은 경우에는 이미 실서비스를 운용하면서 맨땅에 헤딩하는식으로 이런 자료과 경험을 쌓아가야해서 자연적으로 로깅을 잘하고 모니터링할 수 있는 환경을 구축하는것이 중요했다.

뭐 거두절미하고 관련 설정을 여기에 기록해보자한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
http {    
    ...
 
    # log_format 설정
    log_format main '[$time_local] $remote_addr "$host" '
                '"$request" $status $body_bytes_sent "$http_referer" '
                '"$http_user_agent"';
 
    access_log /var/log/nginx/access.log main;
 
    # 특정 확장자에 대한 로그 비활성화 설정
    map $request_uri $loggable {
       "~*^.+\.(jpg|jpeg|png|gif|css|js|map|svg|ico|woff|woff2|ttf|eot)(\?.*)?$"  0;  # 해당 파일 확장자일 때 0 (로그 비활성화)
        default                                                                     1;  # 그 외 요청일 때는 1 (로그 활성화)
    }
 
    # 로그 비활성화 조건을 모든 서버에 적용
    access_log /var/log/nginx/access.log main if=$loggable;
 
    ...
cs

참 여러번 수정한 nginx.conf 로그 설정이다.

우선 로그라는것은 보기 좋아야하므로 로그를 아래와 같은 순서로 나오게 조율했다.

1.[타임스탬프]
2.접속자IP
3.요청Domain
4.요청내용(Method, URI, Protocol)
5.HTTP응답코드
6.응답바이트
7.이전URL
8.유저에이전트

1
2
[09/Oct/2024:20:59:56 +0000] 0.0.0.0 "domain.or.kr" "GET / HTTP/1.1" 200 158303 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
[09/Oct/2024:20:59:57 +0000] 0.0.0.0 "domain.com" "GET /spb3/sboard3/write.php?db=regist&page=3&mode=write&time=1549556661 HTTP/1.1" 301 169 "-" "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)"
cs

실제로 찍히는 access.log 데이터는 위와 같다. (아이피정보랑 도메인명은 바꿨습니다)

이 내용을 이제 적절히 파싱해서 쓰면 적절한 모니터링을 할 수 있는 정보가 생성되는 것이다.

나같은 경우는 이 로그정보를 하루에 한번씩 주기적으로 1000개 정도를 짤라내서 ERP 내부에서 조회할 수 있게 파싱한다음에 아래와같이 표로 출력해서 모니터링 한다.

위 로그파일을 가져와서 배열로 파싱한 후 테이블로 랜더링

주로 이상한 URI로 요청하는 엑세스나 유저 에이전트 검사를 통해 과도하게 크롤링을 하는 봇들을 추려서 아이피 차단을 걸곤한다.

지금 상상으로는 이런 서버 엑세스로그에 AI를 접목시켜서 알아서 이상건을 추려내는 그런 시스템을 떠올리기는하는데 최소한의 자원으로 이런 내용을 어떻게 구현할지 참 고민이 많긴하다.

어찌되었든 터미널화면에서 모니터링을 이제 안해도된다라는거는 나에겐 행복한일인건 분명하다.
×