Nginx日志和监控
2015 年 02 月 23 日
nginx

    本文将讲述Nginx中如何配置错误和请求处理的日志处理, 以及运行时监控Nginx和Nginx Plus。

  • 设置错误日志

  • 我们可以通过error_log指令设置nginx日志,nginx日志分为很多级别 [debug | info | notice | warn | error | crit | alert | emerg] ,如下面的配置将会把warn级别以上的日志输出到{prefix}/logs/error.log, prefix为安装nginx时指定的--error-log-path,若未指定,则使用--prefixerror_log支持多个上下文: main, http, server, location。 如果在同一上下文中定义了多个error_log,那么日志将被记录到所有日志文件中(Nginx1.5.2+)。
  • error_log logs/error.log warn;
        
  • 设置访问日志

  • 我们可以通过access_log指令来记录客户端请求的日志。 日志的格式可以通过log_format指令设置, 如
  • 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;
            ...
        }
    }
        
  • 访问日志可以通过缓冲区进行优化。如
  • access_log /spool/logs/nginx-access.log compression buffer=32k;
        
  • 下面这些情况会引起日志被写到文件中
  • 1. 下一行日志不适于写入缓冲区。
    2. 缓冲区的数据存在时间超过flush参数。
    3. worker process重新打开日志文件或被关闭。

  • 启用条件日志

  • access_logif参数允许我们使用条件进行日志记录,这样可以忽略一些不重要的日志。如
  • # 排除2xx和3xx状态码的请求
    map $status $loggable {
        ~^[23]  0;
        default 1;
    }
    access_log /path/to/access.log combined if=$loggable;
        
  • 将日志记录到Syslog

  • Syslog是计算机消息日志的标准,允许在单个syslog服务器上从不同的设备收集日志。 access_logerror_log指令都允许通过syslog: 前缀来配置输出日志到syslog。
  • access_log syslog:server=192.168.1.1 debug;
    error_log syslog:server=unix:/var/log/nginx.sock;
    error_log syslog:server=[2001:db8::1]:12345,facility=local7,tag=nginx,severity=info combined;
        
好人,一生平安。