Infra

Nginx - 로그 포맷 설정

GOMJ 2024. 1. 24. 23:11

Nginx에서 로그 포맷을 설정하여 모니터링에 필요한 정보를 남길 수 있다.

실제 클라이언트 IP 부터 국가, 도시, 타운 정보까지 다양한 정보를 얻을 수 있다고 한다. 물론 Spring 단에서도 로그를 남기고 있지만 더욱 자세한 정보를 얻기 위해 Nginx 로그 포맷을 따로 설정해줬다.

본인은 Nginx 1.14.0 버전이기에 /etc/nginx/nginx.conf 파일에 로그 포맷을 설정해주기로 결정하였다.

 

cd /etc/nginx

vi nginx.conf


# http 바디에 다음 로그 포맷 설정
log_format  mybingo
                '[$time_local] $remote_addr '
                '$realip_remote_addr $remote_user '
                '$request_method $server_protocol '
                '$scheme $server_name $uri $status '
                '$request_time $body_bytes_sent '
                '$geoip_city_country_code3 $geoip_region '
                '"$geoip_city" $http_x_forwarded_for '
                '$upstream_status $upstream_response_time '
                '"$http_referer" "$http_user_agent"';

 

해당 문구의 의미는 mybingo라는 로그 포맷을 만들건데 포맷은 다음과 같다 라는 의미를 가진다. 로컬 시간부터, 실제 클라이언트 IP, 도시정보, 요청 시간등 다양한 정보를 얻을 수 있다. 다른 정보가 더 필요하다면 Nginx 공식 가이드를 참고하여 추가하면 된다.

이제 실제 도메인에 mybingo 라는 로그 포맷을 사용할 것이라 적용을 해줘야 한다.

 

# server body에 다음과 같이 추가
access_log ${your_log_path} mybingo

 

${your_log_path} 경로에 mybingo 포맷팅을 적용한 로그를 남긴다는 의미다. 실제 적용후 결과는 다음과 같다.

 

[24/Jan/2024:22:59:56 +0900] 121.140.216.191 121.140.216.191 - POST HTTP/1.1 ${url} ${uri} 200 0.116 704 KOR 00 "Dongjak-gu" - 200 0.116 "-" "PostmanRuntime/7.29.0"
[24/Jan/2024:23:09:20 +0900] 220.72.204.174 220.72.204.174 - GET HTTP/1.1 ${url} ${uri} 200 0.196 849 KOR 00 "Nowon-gu" - 200 0.196 ${client_url} "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"