>  기사  >  운영 및 유지보수  >  Nginx에서 로깅을 사용자 정의하고 로그 버퍼를 활성화하는 방법

Nginx에서 로깅을 사용자 정의하고 로그 버퍼를 활성화하는 방법

WBOY
WBOY앞으로
2023-05-14 13:07:33990검색

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 derek

get http/1.1 http / 200 0.001 370 usa mi

"ann arbor" - 200 0.001 "-" "curl/7.47.0"



이 로그 구성을 사용해야 하는 경우 access_log 지시어와 함께 사용해야 합니다. 매개 변수로 사용되는 로그 디렉터리 및 구성 이름:

server {
  access_log /var/log/nginx/access.log geoproxy;
  ...
}

access_log는 여러 컨텍스트에서 사용할 수 있으며 각 컨텍스트는 자체 로그 디렉터리 및 로그 기록 형식을 정의할 수 있습니다.

결론: nginx의 로그 모듈을 사용하면 다양한 로그 파일을 보기 위해 다양한 시나리오에 대한 로그 형식을 구성할 수 있습니다.

실제 적용에서는 상황에 따라 다양한 로그를 구성하는 것이 매우 유용합니다. 기록된 로그 내용은 간단한 정보일 수도 있고 필요한 모든 정보를 자세하게 기록할 수도 있습니다. 뿐만 아니라 로그 내용은 텍스트를 지원하는 것 외에도 json 형식 및 xml 형식으로 데이터를 기록할 수도 있습니다. 실제로 nginx 로그는 서버 트래픽, 클라이언트 사용량, 클라이언트 원본과 같은 정보를 이해하는 데 도움이 됩니다. 또한 액세스 로그는 업스트림 서버 또는 특정 URI와 관련된 응답 및 문제를 찾는 데도 도움이 될 수 있습니다. 액세스 로그는 트래픽을 분석하고 실제 사용자 상호 작용 시나리오를 시뮬레이션하는 데 사용할 수 있으므로 테스트에도 유용합니다. 로그는 문제 해결, 디버깅, 애플리케이션 분석 및 비즈니스 조정에 없어서는 안 될 요소입니다.

오류 로그

nginx의 오류 로그를 정확하게 찾으려면 내장된 error_log 지시어를 사용하여 오류 로그 디렉터리와 오류 로그 기록 수준을 정의하세요. 구성은 다음과 같습니다.

error_log /var/log/nginx/error.log warn;
error_log 지시어에는 디렉터리를 구성할 때 필수 로그와 선택적 오류 수준 옵션이 필요합니다.
if 지시어를 제외하고 error_log 지시어는 모든 상황에서 사용할 수 있습니다. 오류 로그 수준에는

디버그, 정보, 알림, 경고, 오류, 치명적, 경고 및 응급이 포함됩니다. 주어진 로그

수준 순서는 가장 작은 기록부터 가장 엄격한 기록까지의 로그 수준 순서입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제