zoukankan      html  css  js  c++  java
  • nginx系列之三:日志配置

    前言

    nginx系列之一:nginx入门
    nginx系列之二:配置文件解读
    nginx系列之三:日志配置
    nginx系列之四:web服务器
    nginx系列之五: 负载均衡
    nginx系列之六:cache服务
    nginx系列之七:限流配置
    nginx系列之八:使用upsync模块实现负载均衡

    转自:在此感谢原博主的整理分享

    一、nginx access日志配置

    1.1 access_log日志配置

    access_log用来定义日志级别,日志位置。语法如下:
    日志级别: debug > info > notice > warn > error > crit > alert > emerg

    语法格式: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
    access_log off;

    默认值 : access_log logs/access.log combined;
    作用域 : http, server, location, if in location, limit_except

    实例一:

    access_log /var/logs/nginx-access.log compression buffer=32k;
    

    1.2 log_format 定义日志格式

    语法格式: log_format name [escape=default|json] string …;
    默认值 : log_format combined “…”;
    作用域 : http

    实例一:

    log_format compression '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $bytes_sent '
                           '"$http_referer" "$http_user_agent" "$gzip_ratio"';
    access_log /var/logs/nginx-access.log compression buffer=32k;
    

    1.3 open_log_file_cache

    使用open_log_file_cache来设置日志文件缓存(默认是off)。

    • max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
    • inactive:设置存活时间,默认是10s
    • min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
    • valid:设置检查频率,默认60s
    • off:禁用缓存

    语法格式: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
    open_log_file_cache off;
    默认值: open_log_file_cache off;
    作用域: http, server, location

    实例一

    open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
    

    1.4 日志中常用的全局变量

    • $remote_addr, $http_x_forwarded_for 记录客户端IP地址
    • $remote_user记录客户端用户名称
    • $request记录请求的URL和HTTP协议(GET,POST,DEL,等)
    • $status记录请求状态
    • $body_bytes_sent发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
    • $bytes_sent发送给客户端的总字节数。
    • $connection连接的序列号。
    • $connection_requests 当前通过一个连接获得的请求数量。
    • $msec 日志写入时间。单位为秒,精度是毫秒。
    • $pipe如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
    • $http_referer 记录从哪个页面链接访问过来的
    • $http_user_agent记录客户端浏览器相关信息
    • $request_length请求的长度(包括请求行,请求头和请求正文)。
    • $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
    • $time_iso8601 ISO8601标准格式下的本地时间。
    • $time_local通用日志格式下的本地时间。

    二、nginx日志调试技巧

    2.1 仅记录固定 IP 的错误

    当你设置日志级别成 debug,如果你在调试一个在线的高流量网站的话,你的错误日志可能会记录每个请求的很多消息,这样会变得毫无意义。

    events{...}中配置如下内容,可以使 Nginx 记录仅仅来自于你的 IP 的错误日志。

    events {
            debug_connection 1.2.3.4;
    }
    

    2.2 调试 nginx rewrite 规则

    调试rewrite规则时,如果规则写错只会看见一个404页面,可以在配置文件中开启nginx rewrite日志,进行调试。

    server {
            error_log    /var/logs/nginx/example.com.error.log;
            rewrite_log on;
    }
    

    rewrite_log on; 开启后,它将发送所有的 rewrite 相关的日志信息到 error_log 文件中,使用 [notice] 级别。随后就可以在error_log 查看rewrite信息了。

    2.3 使用location记录指定URL的日志

    server {
            error_log    /var/logs/nginx/example.com.error.log;
            location /static/ {
            error_log /var/logs/nginx/static-error.log debug; 
        }         
    }
    

    配置以上配置后,/static/ 相关的日志会被单独记录在static-error.log文件中。

    nginx日志共三个参数

    1. access_log: 定义日志的路径及格式。
    2. log_format: 定义日志的模板。
    3. open_log_file_cache: 定义日志文件缓存。

    proxy_set_header X-Forwarded-For :如果后端Web服务器上的程序需要获取用户IP,从该Header头获取。proxy_set_header X-Forwarded-For $remote_addr;

    三、常用例子

    3.1 main格式

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"'
                           '$upstream_addr $upstream_response_time $request_time ';
    access_log  logs/access.log  main;
    

    3.2 json格式

    log_format logstash_json '{"@timestamp":"$time_iso8601",'
           '"host": "$server_addr",'
           '"client": "$remote_addr",'
           '"size": $body_bytes_sent,'
           '"responsetime": $request_time,'
           '"domain": "$host",'
           '"url":"$request_uri",'
           '"referer": "$http_referer",'
           '"agent": "$http_user_agent",'
           '"status":"$status",'
           '"x_forwarded_for":"$http_x_forwarded_for"}';
    

    坑点:
    使用$uri 可以在nginx对URL进行更改或重写,但是用于日志输出可以使用$request_uri代替,如无特殊业务需求,完全可以替换。

    3.3 压缩格式

    日志中增加了压缩的信息。

    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;
            ...
        }
    }
    

    3.4 upstream格式

    增加upstream消耗的时间。

    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;
            ...
        }
    }
    

    四、附录:参考文档

    4.1 统计status 出现的次数

    awk '{print $9}' access.log | sort | uniq -c | sort -rn
    
    36461 200 
    483 500
    87 404
    9 400
    3 302
    1 499
    1 403
    1 301
    

    4.2 显示返回302状态码的URL。

    awk '($9 ~ /302/)' access.log | awk '{print $7}' | sort | uniq -c | sort -rn
    1 /wp-login.php
    1 /wp-admin/plugins.php?action=activate&plugin=ewww-image-optimizer%2Fewww-image-optimizer.php&_wpnonce=cc4a379131
    1 /wp-admin/
    

    参考文档

    How to Configure Custom Access and Error Log Formats in Nginx
    如何在Nginx中配置自定义访问和错误日​​志格式

  • 相关阅读:
    Brute Force
    2014 Asia AnShan Regional Contest --- HDU 5073 Galaxy
    dp --- 2014 Asia AnShan Regional Contest --- HDU 5074 Hatsune Miku
    2014 Asia AnShan Regional Contest --- HDU 5078 Osu!
    搜索 + 剪枝 --- POJ 1101 : Sticks
    Brute Force & STL --- UVA 146 ID Codes
    Brute Force --- UVA 10167: Birthday Cake
    UVA题目分类
    对全概率公式和贝叶斯公式的理解
    APPLE ID随意转区到US或者HK.不需要信用卡
  • 原文地址:https://www.cnblogs.com/daozhangblog/p/12446405.html
Copyright © 2011-2022 走看看