• Nginx日志格式以及相关配置


    一、Nginx日志格式以及参数说明
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"'
                          '"$request_time" "$upstream_response_time" "$upstream_addr" "$request_body"';

    以上配置结果在日志中的显示内容如下:
    111.26.32.80 - - [05/Jun/2017:03:07:19 +0800] "GET /css/indexPage.css?v=0.3469464244735898 HTTP/1.1" 200 3117 "http://live.100doc.cn/index?code=0312AIRe0Rf2xx1z22Te0K7CRe02AIRG&state=1" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Mobile/14D27 MicroMessenger/6.5.8 NetType/4G Language/zh_CN"
                          
    其中各字段的含义如下:
    1、$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
    2、$remote_user :等同于用户名,由ngx_http_auth_basic_module认证;
    3、$time_local : 用来记录访问时间与时区;
    4、$request : 用来记录请求的url与http协议;
    5、$status : 用来记录请求状态;成功是200,
    6、$body_bytes_s ent :记录发送给客户端文件主体内容大小;
    7、$http_referer :用来记录从那个页面链接访问过来的;
    8、$http_user_agent :记录客户端浏览器的相关信息;
    9、$request_time:
    官网描述:request processing time in seconds with a millisecondsresolution; time elapsed between the first bytes were read from theclient and the log write after the last bytes were sent to theclient 。
    指的就是从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。
    10、$upstream_response_time
    官网描述:keeps times of responses obtained from upstream servers;times are kept in seconds with a milliseconds resolution. Severalresponse times are separated by commas and colons like addresses inthe $upstream_addr variable
    是指从Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间。
    从上面的描述可以看出,$request_time肯定比$upstream_response_time值大,特别是使用POST方式传递参数时,因为Nginx会把requestbody缓存住,接受完毕后才会把数据一起发给后端。所以如果用户网络较差,或者传递数据较大时,$request_time会比$upstream_response_time大很多。
    所以如果使用nginx的accesslog查看php程序中哪些接口比较慢的话,记得在log_format中加入$upstream_response_time。
    11、$upstream_addr:后台upstream的地址,即真正提供服务的主机地址
    12、当 nginx 尚未读取请求体的时候,或者请求体有一部分或者全部缓冲到临时文件的时候,$request_body 和 $echo_request_body 都将是空值。
    Nginx 读取请求体是按需的,如果使用 ngx_proxy 模块的话,读取发生在 content 请求处理阶段。所以如果在早于 content 阶段之前的阶段(比如 rewrite 阶段)去读取 $request_body,则必是空值
    处理办法在nginx.conf配置文件中添加了两个配置项:
    fastcgi_buffers 32 8k;#指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答。
    client_body_buffer_size 1024k; #缓冲区代理缓冲用户端请求的最大字节数
    13、$ssl_protocol:SSL协议版本
    14、$ssl_cipher:交换数据中的算法

    二、Nginx日志配置
    1、log_format指令
    语法: log_format name string ...;
    默认值: log_format combined "...";
    配置段: http
    name表示格式名称,string表示等义的格式。log_format有一个默认的无需设置的combined日志格式,相当于apache的combined日志格式,如下所示:
    log_format  combined  '$remote_addr - $remote_user  [$time_local]  '
                                       ' "$request"  $status  $body_bytes_sent  '
                                       ' "$http_referer"  "$http_user_agent" ';                                
    如果nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址了。 $remote_addr获取反向代理的IP地址。
    反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,用来记录 客户端IP地址和客户端请求的服务器地址。如下所示:
    log_format  porxy  '$http_x_forwarded_for - $remote_user  [$time_local]  '
                                 ' "$request"  $status $body_bytes_sent '
                                 ' "$http_referer"  "$http_user_agent" ';

    2、open_log_file_cache指令
    语法: 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来设置日志文件缓存(默认是off),格式如下:
    参数注释如下:
    max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
    inactive:设置存活时间,默认是10s
    min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
    valid:设置检查频率,默认60s
    off:禁用缓存
    例如:
    open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

    3、log_not_found指令
    语法: log_not_found on | off;
    默认值: log_not_found on;
    配置段: http, server, location
    是否在error_log中记录不存在的错误。默认是。

    4、log_subrequest指令
    语法: log_subrequest on | off;
    默认值: log_subrequest off;
    配置段: http, server, location
    是否在access_log中记录子请求的访问日志。默认不记录。

    5、rewrite_log指令
    由ngx_http_rewrite_module模块提供的。用来记录重写日志的。对于调试重写规则建议开启。 Nginx重写规则指南
    语法: rewrite_log on | off;
    默认值: rewrite_log off;
    配置段: http, server, location, if
    启用时将在error log中记录notice级别的重写日志。

    6、error_log指令
    语法: error_log file | stderr | syslog:server=address[,parameter=value] [debug | info | notice | warn | error | crit | alert | emerg];
    默认值: error_log logs/error.log error;
    配置段: main, http, server, location
    配置错误日志。

  • 相关阅读:
    JStack分析cpu消耗过高问题
    Machine Learning in Action – PCA和SVD
    Machine Learning in Action -- FP-growth
    Machine Learning in Action -- 树回归
    Machine Learning in Action -- 回归
    Kafka 0.8 配置参数解析
    统计学习方法笔记 -- 隐马尔可夫模型
    Machine Learning in Action -- AdaBoost
    统计学习方法笔记 -- Boosting方法
    Andrew Ng机器学习公开课笔记–Reinforcement Learning and Control
  • 原文地址:https://www.cnblogs.com/fansik/p/6944115.html
Copyright © 2020-2023  润新知