Nginx日志

  • 来源:新网
  • 更新日期:2018-04-18

摘要:Nginx记录遇到不同级别的问题信息到错误日志。Error_log指令设置日志记录到特定文件,stderr,或syslog并记录最小消息级别到日志。默认,错误日志位于logs/error.log(绝对路径依赖于操作系统和安装)。

1设置错误日志

Nginx记录遇到不同级别的问题信息到错误日志。Error_log指令设置日志记录到特定文件,stderr,或syslog并记录最小消息级别到日志。默认,错误日志位于logs/error.log(绝对路径依赖于操作系统和安装)。

配置将错误消息的最小严重级别从error改变为warn:

error_log logs/error.log warn;

在这种情况下,warn、error、crit、alert、emerg级别被记录。

错误日志默认设置作用在全局范围。为了覆盖它,放置error_log指令在main配置上下文中。设置在main上下文总是被其它配置级别继承。error_log指令也能指定在http、stream、server和location级别并覆盖继承自高级别的设置。在错误的情况下,消息只写一个错误日志,一个最接近发生错误的级别。然而,如果几个error_log指令指定在相同级别,消息写入所有指定日志。

注意:能够指定多个error_log指令在相同配置级别。

t01c2f8168e28df16e8.jpg

2设置访问日志

客户端请求处理后,Nginx记录客户端请求到访问日志。默认,访问日志位于logs/access.log,以预定义的格式写入日志。为了覆盖默认设置,使用log_format指令改变记录消息的格式,access_log指令指定日志的位置和格式。日志格式使用变量定义。

下面例子定义日志格式继承预定义组合格式,使用值表示响应的gzip压缩率。格式应用到启用压缩的虚拟服务器。

http {

log_format compression \'$remote_addr - $remote_user [$time_local] \'

\'"$request" $status $body_bytes_sent \'

\'"$http_referer" "$http_user_agent" "$gzip_ratio"\';

 

server {

gzip on;

access_log /spool/logs/nginx-access.log compression;

...

}

}

日志格式的其它例子,跟踪Nginx和upstream服务器之间不同的时间值,可能有助于诊断问题,如果你的网站体验放缓。你能使用以下变量记录时间值:

$upstream_connect_time——与upstream建立连接花费的时间

$upstream_header_time——建立连接和从upstream服务器接收响应头的第一个字节花费的时间

$upstream_response_time——建立连接和从upstream服务器接收响应头的最后一个字节花费的时间

$request_time——统计处理请求花费的时间

所有时间值以秒和毫秒为单位。

http {

log_format upstream_time \'$remote_addr - $remote_user [$time_local] \'

\'"$request" $status $body_bytes_sent \'

\'"$http_referer" "$http_user_agent"\'

\'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"\';

 

server {

access_log /spool/logs/nginx-access.log upstream_time;

...

}

}

时间值规则如下所示:

当请求通过多个服务器处理时,变量包含逗号分隔的多个值。 当有一个从upstream组到另一个的内部重定向,值通过分号分隔。 当请求不能达到upstream服务器或完整头不能接收,变量包含“0” 在内部错误的情况下,当连接到一个upstream或当从缓存返回,变量包含“-”

启用日志消息缓存和频繁使用包含变量的日志文件的描述符缓存优化日志。使用access_log指令的buffer参数启用缓存并指定缓存大小。当下一条日志消息不符合缓存以及其它情况,缓存消息写入日志文件。

为了启用日志文件描述符的缓存,使用open_log_file_cache指令。

类似于error_log指令,access_log指令定义在特定配置级别覆盖上一个级别的设置。当请求处理完成时,配置在当前级别或继承自上一个级别的消息写入日志。如果一个级别定义多个访问日志,它们都被写入。

3启用条件日志

条件日志允许从访问日志排除琐碎或不重要的日志条目。在Nginx中,条件日志通过access_log指令通过if参数启用。

该例子使用HTTP状态码2xx(成功)和3xx(重定向)排除请求:

map $status $loggable {

~^[23] 0;

default 1;

}

 

access_log /path/to/access.log combined if=$loggable;

4记录系统日志

syslog工具是一个标准的计算机消息日志,允许在单个syslog服务器从不同指令收集日志消息。在Nginx中,记录系统日志使用syslog配置:error_log和access_log指令。

系统日志消息能发送到指定域名、IP地址或UNIX域名套接字路径的服务器上。域名或IP地址使用端口覆盖默认端口。UNIX域名套接字路径要指定unix:前缀:

error_log server=unix:/var/log/nginx.sock debug;

access_log syslog:server=[2001:db8::1]:1234,facility=local7,tag=nginx,severity=info;

在例子中,Nginx错误日志消息被写入Unix域名套接字,访问日志写入IPv6地址和1234端口的系统日志服务器。

facility=参数指定记录消息的程序类型。默认值是local7.其它可能值是:auth、authpriv、daemon、cron、ftp、lpr、kern、mail、news、syslog、user、uucp、local0...local7。

tag=参数应用自定义标签记录系统消息。

serverity=参数设置访问日志的系统日志消息严重级别。可能值顺序:debug、info、notice、error(默认)、crit、alert和emerg。消息记录指定级别和所有更严重级别。