Access Log
nginx는 요청을 처리한 후 즉시 액세스 로그에 클라이언트 요청에 대한 정보를 기록합니다. 기본적으로 액세스 로그는 log/access.log에 위치하며, 정보는 미리 정의된 조합 형식으로 로그에 기록됩니다.
접속 정보를 정확하게 기록하려면 아래와 같이 더욱 완전한 접속 로그 형식을 맞춤 설정해야 합니다.
http { log_format geoproxy '[$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"'; ... }
이 로그 구성은 geoproxy라는 이름으로, 많은 nginx 변수를 사용하여 nginx 로깅 기능을 보여줍니다. 구성 옵션에서 각 변수의 구체적인 의미를 자세히 설명합니다.
사용자가 요청을 시작하면 서버 시간 $time_local이 기록되며 $remote_user 값은 기본 인증을 통과한 사용자 이름입니다. nginx에서 geoip_proxy 및 realip_header 지침 IP 주소 및 클라이언트 IP 주소 열기를 처리하는 데 사용됩니다.
그런 다음 http 요청 메서드 $request_method, 프로토콜 $server_protocol 및 http 메서드 $scheme을 기록합니다. http 또는 https
물론, 서버 이름 $server_name, 요청 URI 및 응답 상태 코드
기본 정보 외에도 몇 가지 통계 결과 데이터도 있습니다. 밀리초 수준의 요청 처리 시간 $request_time, 서버 응답의 데이터 블록 크기 $ body_bytes_sent; 또한 클라이언트가 위치한 국가 $geoip_city_country_code3, 지역 $geoip_region 및 도시 정보 $geoip_city도 기록됩니다.
변수 $http_x_forwarded_for는 요청의 x-forwarded-for 헤더 메시지를 기록하는 데 사용됩니다.
업스트림 모듈의 일부 데이터도 로그에 기록됩니다. 프록시 서버 응답 상태 코드 $upstream_status, 연결을 설정하고 업스트림 서버에서 응답 본문의 마지막 바이트를 수신하는 시간 $ upstream_response_time , 업스트림 서버에 연결을 설정하는 시간 $upstream_connect_time , 연결을 설정하고 업스트림 서버 $upstream_header_time 에서 응답 헤더의 첫 번째 바이트를 수신하는 시간.
요청 소스 $http_referer 및 사용자 에이전트 $http_user_agent도 로그에 기록될 수 있습니다.
nginx의 로깅 기능은 매우 강력하고 유연합니다. 로그 형식을 정의하는 데 사용되는 log_format 지시문은 다음에만 적용됩니다. http 블록 클래스 지침 내에서 모든 시간 값은 밀리초 단위이며 밀리초 분해능으로 측정됩니다. .
이 형식의 로그 구성은 다음 유형의 로그를 생성합니다:
[25/feb/2019:16:20:42 +0000] 10.0.1.16 192.168.0.122 derekget http/1.1 http / 200 0.001 370 usa mi
"ann arbor" - 200 0.001 "-" "curl/7.47.0"
이 로그 구성을 사용해야 하는 경우 access_log 지시어와 함께 사용해야 합니다. 매개 변수로 사용되는 로그 디렉터리 및 구성 이름:access_log는 여러 컨텍스트에서 사용할 수 있으며 각 컨텍스트는 자체 로그 디렉터리 및 로그 기록 형식을 정의할 수 있습니다.server { access_log /var/log/nginx/access.log geoproxy; ... }로그인 후 복사
결론: nginx의 로그 모듈을 사용하면 다양한 로그 파일을 보기 위해 다양한 시나리오에 대한 로그 형식을 구성할 수 있습니다.
실제 적용에서는 상황에 따라 다양한 로그를 구성하는 것이 매우 유용합니다. 기록된 로그 내용은 간단한 정보일 수도 있고 필요한 모든 정보를 자세하게 기록할 수도 있습니다. 뿐만 아니라 로그 내용은 텍스트를 지원하는 것 외에도 json 형식 및 xml 형식으로 데이터를 기록할 수도 있습니다. 실제로 nginx 로그는 서버 트래픽, 클라이언트 사용량, 클라이언트 원본과 같은 정보를 이해하는 데 도움이 됩니다. 또한 액세스 로그는 업스트림 서버 또는 특정 URI와 관련된 응답 및 문제를 찾는 데도 도움이 될 수 있습니다. 액세스 로그는 트래픽을 분석하고 실제 사용자 상호 작용 시나리오를 시뮬레이션하는 데 사용할 수 있으므로 테스트에도 유용합니다. 로그는 문제 해결, 디버깅, 애플리케이션 분석 및 비즈니스 조정에 없어서는 안 될 요소입니다.
오류 로그nginx의 오류 로그를 정확하게 찾으려면 내장된 error_log 지시어를 사용하여 오류 로그 디렉터리와 오류 로그 기록 수준을 정의하세요. 구성은 다음과 같습니다.error_log /var/log/nginx/error.log warn;
디버그, 정보, 알림, 경고, 오류, 치명적, 경고 및 응급이 포함됩니다. 주어진 로그
수준 순서는 가장 작은 기록부터 가장 엄격한 기록까지의 로그 수준 순서입니다. nginx 서버를 컴파일할 때 디버그 로그
를 --with-debug 플래그와 함께 사용해야 한다는 점에 유의해야 합니다.
서버 구성에 오류가 있는 경우 먼저 오류 로그를 확인하여 문제를 찾아야 합니다. 오류 로그
는 또한 응용 프로그램 서버(예: fastcgi 서비스)를 찾는 데 유용한 도구입니다. 오류 로그를 통해 작업자 프로세스 연결 오류, 메모리 할당, 클라이언트 IP, 애플리케이션 서버 및 기타 문제를 디버깅할 수 있습니다. 오류 로그 형식은 사용자 정의 로그 형식을 지원하지 않지만 현재 시간, 로그 수준 및 특정 정보와 같은 데이터도 기록합니다.
注意:错误日志的默认设置适用于全局。要覆盖它,请将 error_log 指令放在 main (顶级)配置上下文中。 error_log 在开源 nginx 1.5.2 版中添加了在同一配置级别指定多个指令的功能。
通过 syslog 将日志发送到统一服务器
既然不再需要将日志写到磁盘的某个目录,而是发送到统一的日志服务器,则将原有的目录部分替换为服务器 ip 即可,配置如下:
error_log syslog:server=10.0.1.42 debug; access_log syslog:server=10.0.1.42,tag=nginx,severity=info geoproxy; #error_log server=unix:/var/log/nginx.sock debug; #access_log syslog:server=[2001:db8::1]:1234,facility=local7,tag=nginx,severity=info;
error_log 和 access_log 指令的 syslog 参数紧跟冒号 : 和一些参数选项。包括:必选的 server 标记表示需要连接的 ip、dns 名称或 unix 套接字;
可以使用如上注释的高端玩。
可选参数有 facility 、 severity 、 tag :
server 参数接收带端口的 ip 地址或 dns 名称;默认是 udp 514 端口。
facility 参数设置 syslog 的类型 facility ,值是 syslog rfc 标准定义的 23 个值中一个,默认值为 local7 。其他可能的值是: auth , authpriv , daemon , cron , ftp , lpr , kern , mail , news , syslog , user , uucp , local0 ... local7
tag 参数表示日志文件中显示时候的标题,默认值是 nginx 。
severity 设置消息严重程度,默认是 info 级别日志。
日志缓冲区
当系统处于负载状态时,启用日志缓冲区以降低 nginx worker 进程阻塞。大量的磁盘读写和 cpu 资源使用对于服务器资源也是一种巨大消耗。将日志数据缓冲到内存中可能是很小的一个优化手段, buffer 参数意义是缓冲区的大小,功能是当缓冲区已经写满时,日志会被写入文件中; flush 参数意义是缓冲区内日志在缓冲区内存中保存的最长时间,功能即当缓存中的日志超过最大缓存时间,也会被写入到文件中, 不足的地方即写入到日志文件的日志有些许延迟,即时调试中应当关闭日志缓冲。 。配置如下:
http { access_log /var/log/nginx/access.log main buffer=32k flush=1m; }
위 내용은 Nginx에서 로깅을 사용자 정의하고 로그 버퍼를 활성화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!