![2019 년 최고의 iOS 11 / iPhone 앱 10 대](/f/a2df196eaea348b2eeb7f28b7777ea0a.jpg?width=100&height=100)
엔진엑스 HTTP 서버에는 사용자 정의가 가능한 경이적인 로깅 기능이 있습니다. 이 기사에서는 Linux에서 Nginx에 대한 액세스 및 오류 로그에 대한 고유한 형식을 구성하는 방법을 설명합니다.
이 가이드의 목적은 로그가 생성되는 방식을 이해하여 다음 목적에 맞게 사용자 정의 로그 형식을 구성하는 것입니다 웹 서버와 웹 애플리케이션(예: 추적 요청).
또한 읽기: Linux를 위한 4가지 좋은 오픈 소스 로그 모니터링 및 관리 도구
이 문서는 구성에 대해 알려줄 세 가지 섹션으로 구성되어 있습니다. 액세스/오류 로그 Nginx에서 조건부 로깅을 활성화하는 방법.
아래의 엔진엑스, 서버에 대한 모든 클라이언트 요청은 액세스 로그 를 사용하여 지정된 형식으로 ngx_http_log_module 기준 치수.
기본 로그 파일은 로그/액세스.로그 (대개 /var/log/nginx/access_log Linux 시스템에서) 및 로깅의 기본 형식은 일반적으로 결합 또는 기본 형식입니다(이는 배포판마다 다를 수 있음).
NS 액세스 로그 지시문(컨텍스트를 제외한 위치 및 제한에 있는 경우 http, 서버, 위치에 적용 가능)은 로그 파일 및 로그 형식 지시문(http 컨텍스트에서만 적용 가능)은 로그 형식을 설정하는 데 사용됩니다. 로그 형식은 공통 변수와 로그가 작성될 때만 생성되는 변수로 설명됩니다.
로그 형식을 구성하는 구문은 다음과 같습니다.
log_format format_name 'set_of_variables_to_define_format';
액세스 로그를 구성하는 구문은 다음과 같습니다.
access_log /경로/to/log_file 형식 이름; #가장 간단한 형식 또는. access_log /path/to/log_file [형식 [버퍼=크기] [gzip[=레벨]] [플러시=시간] [if=조건]];
다음은 기본 Nginx 구성 파일에서 발췌한 것입니다. /etc/nginx/nginx.conf ~에 센트OS 7.
/etc/nginx/nginx.conf
http { #메인 로그 형식 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log; }
이 로그 형식은 다음 로그 항목을 생성합니다.
127.0.0.1 - dbmanager [20/Nov/2017:18:52:17 +0000] "GET / HTTP/1.1" 401 188 "-" "Mozilla/5.0(X11; 우분투; 리눅스 x86_64; rv: 47.0) Gecko/20100101 Firefox/47.0"
다음은 일부를 사용하여 웹 애플리케이션에 대한 요청을 추적하는 데 사용하는 또 다른 유용한 로깅 형식입니다. 기본 변수, 가장 중요한 것은 요청 ID가 있고 클라이언트 위치 세부 정보(국가, 국가 코드, 지역 및 도시).
/etc/nginx/nginx.conf
log_format 사용자 정의 '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_x_forwarded_for" $request_id ' '$geoip_country_name $geoip_country_code ' '$geoip_region_name $geoip_city ';
다음과 같이 사용할 수 있습니다.
access_log /var/log/nginx/access.log 사용자 정의;
이렇게 하면 다음과 같은 로그 항목이 생성됩니다.
153.78.107.192 - - [21/Nov/2017:08:45:45 +0000] "POST /ngx_pagespeed_beacon? url=https%3A%2F%2Fwww.example.com%2Fads%2Ffresh-oranges-1509260795 HTTP/2.0" 204 0 " https://www.suasell.com/ads/fresh-oranges-1509260795" "모질라/5.0(X11; 우분투; 리눅스 x86_64; rv: 47.0) Gecko/20100101 Firefox/47.0" "-" a02b2dea9cf06344a25611c1d7ad72db 우간다 UG 캄팔라 캄팔라
다음을 사용하여 여러 로그를 지정할 수 있습니다. 액세스 로그 동일한 수준의 지시문에 대해 여기에서는 http 컨텍스트에서 둘 이상의 로그 파일을 사용하고 있습니다.
/etc/nginx/nginx.conf
http{ ##기본 로그 형식 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; ##사용자 지정 형식을 사용하여 추적 요청 log_format 사용자 지정 '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_x_forwarded_for" $request_id ' '$geoip_country_name $geoip_country_code ' '$geoip_region_name $geoip_city '; ##기본 로그 형식을 사용합니다. access_log /var/log/nginx/access.log; ##이것은 사용자 정의 로그 형식을 사용합니다. access_log /var/log/nginx/custom_log custom; }
다음은 압축 관련 변수가 포함된 로그 형식 및 압축된 로그 파일 생성에 유용한 고급 로깅 구성 예입니다.
access_log /var/log/nginx/custom_log 사용자 지정 버퍼 32k; access_log /path/to/log.gz 압축 gzip 플러시=5m;
경우에 엔진엑스 글리치가 발생하면 오류 로그에 관련 정보를 기록합니다. 이러한 문제는 다양한 심각도 수준에 속합니다. 디버그, 정보, 알아 채다, 경고하다, 오류 (이것은 기본 수준이며 전역적으로 작동합니다), 치명타, 알리다, 또는 나타나다.
기본 로그 파일은 로그/오류.로그, 그러나 일반적으로 다음 위치에 있습니다. /var/log/nginx/ Linux 배포판에서. NS 오류 기록 지시문은 로그 파일을 지정하는 데 사용되며 기본, http, 메일, 스트림, 서버, 위치 컨텍스트(순서대로)에서 사용할 수 있습니다.
또한 다음 사항에 유의해야 합니다.
다음 구문을 사용하여 오류 로깅을 구성할 수 있습니다.
error_log /경로/to/log_file log_level;
예를 들어:
error_log /var/log/nginx/error_log 경고;
이것은 Nginx가 모든 유형의 메시지를 기록하도록 지시합니다. 경고하다 더 심각한 로그 수준 치명타, 알리다, 그리고 나타나다 메시지.
다음 예에서 메시지 치명타, 알리다, 그리고 나타나다 레벨이 기록됩니다.
error_log /var/www/example1.com/log/error_log 치명타;
아래 구성을 고려하십시오. 여기에서는 http 및 서버 컨텍스트에서 서로 다른 수준에서 오류 로깅을 정의했습니다. 오류의 경우 메시지는 오류가 발생한 수준에 가장 가까운 하나의 오류 로그에만 기록됩니다.
/etc/nginx/nginx.conf
http { log_format 압축 '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$gzip_ratio"'; error_log /var/log/nginx/error_log 치명타; 서버 { 수신 80; server_name example1.com; #이는 example1.com에 대해서만 오류 메시지를 기록합니다. error_log /var/log/nginx/example1.error_log warn; …... } 서버 { 수신 80; server_name example2.com; #이는 example2.com에 대해서만 오류 메시지를 기록합니다. error_log /var/log/nginx/example1.error_log; ……. } }
1개 이상 사용하는 경우 오류 기록 아래 구성(동일한 수준)에서와 같이 지시문을 사용하면 지정된 모든 로그에 메시지가 기록됩니다.
/etc/nginx/nginx.conf
서버 { 수신 80; server_name example1.com; error_log /var/www/example1.com/log/error_log 경고; error_log /var/log/nginx/example1.error_log 치명타; …... }
어떤 경우에는 Nginx가 메시지의 조건부 로깅을 수행하기를 원할 수 있습니다. 모든 메시지가 Nginx에 의해 기록되어야 하는 것은 아니므로 특정 인스턴스에 대한 액세스 로그에서 중요하지 않거나 덜 중요한 로그 항목을 무시할 수 있습니다.
우리는 사용할 수 있습니다 ngx_http_map_module 값이 다른 변수의 값에 따라 달라지는 변수를 생성하는 모듈입니다. 맵 블록 내부의 매개변수(http 콘텐츠에만 존재해야 함)는 소스와 결과 값 간의 매핑을 지정합니다.
이러한 설정의 경우 조건이 다음과 같이 평가되면 요청이 기록되지 않습니다. “0”
또는 빈 문자열입니다. 이 예에서는 HTTP 상태 코드가 있는 요청을 제외합니다. 2xx 그리고 3xx.
/etc/nginx/nginx.conf
http{ 지도 $status $condition { ~^[23] 0; 기본값 1; } 서버{ access_log /path/to/access.log 사용자 정의 if=$condition; } }
다음은 개발 단계에서 웹 애플리케이션을 디버깅하는 데 유용한 또 다른 예입니다. 모든 메시지를 무시하고 디버그 정보만 기록합니다.
/etc/nginx/nginx.conf
http{ 지도 $info $debuggable { 기본값 0; 디버그 1; } 서버{... access_log /var/log/nginx/testapp_debug_access_log 디버그 if=$debuggable; #logs 기타 요청 access_log /var/log/nginx/testapp_access.log main; ……. } }
syslog에 로깅을 포함하여 더 많은 정보를 찾을 수 있습니다. 여기.
지금은 여기까지입니다! 이 가이드에서는 Nginx에서 액세스 및 오류 로그에 대한 사용자 지정 로깅 형식을 구성하는 방법을 설명했습니다. 아래 피드백 양식을 사용하여 질문하거나 이 기사에 대한 생각을 공유하세요.