让Nginx日志更个性化


 日志对于日常工作排错,安全预警非常重要;所以日志分析有利于我们掌握系统的全面信息,本次仅记录关于Nginx的日志配置和切割方法,目前在公司环境中使用的;

 
nginx有一个非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。
日志格式通过log_format命令来定义。ngx_http_log_module是用来定义请求日志格式的。
 
默认值: access_log logs/access.log main;
配置段: http, server, location, if in location, limit_except
gzip压缩等级。
buffer设置内存缓存区大小。
flush保存在缓存区中的最长时间。
不记录日志:access_log off;
使用默认main格式记录日志:access_log logs/access.log 或 access_log logs/access.log main;
 
 
Nginx默认的访问日志格式:
 
  1. #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' 
  2. #                  '$status $body_bytes_sent "$http_referer" ' 
  3. #                  '"$http_user_agent" "$http_x_forwarded_for"'; 
 
我们自己定义一个proxy名的日志:
 
  1. log_format  proxy '$remote_addr - $remote_user [$time_local] "$request" ' 
  2.                   '$status $body_bytes_sent "$http_referer" ' 
  3.                   '"$http_user_agent" ==> ' 
  4.                   '$upstream_addr $upstream_response_time [$request_time] '; 
 
仔细看也区别不大;
 
 
调用时:
 
  1. access_log /var/log/nginx/access.log proxy; 
 
 相关说明解释:
1.$remote_addr :与$http_x_forwarded_for 用以记录客户端的ip地址;
2.$remote_user :用来记录客户端用户名称;
3.$time_local :用来记录访问时间与时区;(注意,前后必须加上中括号]
4.$request  :用来记录请求的url与http协议;
5.$status  :用来记录请求状态;成功是200,
6.$body_bytes_sent :记录发送给客户端文件主体内容大小;
7.$http_referer :用来记录从那个页面链接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;
9.$upstream_addr :请求到后端哪个节点上
10.$upstream_response_time :请求程序的响应时间
11.$request_time :响应时间
 
 
日志的切割:
 
  1. #!/bin/bash 
  2. # Rotate nginx logs 
  3. # Default log name : access.log 
  4. # Author : swper 
  5.  
  6. NGX_PID=/var/run/nginx.pid 
  7. LOGS_DIR=/var/log/nginx 
  8. LOG_NAME=access.log 
  9. cd $LOGS_DIR 
  10. /bin/mv access.log access_$(date +%F -d -1day).log 
  11. /usr/sbin/nginx -s reload 
添加定时任务:[每天晚上00:00切割]
  1. 00 00 * * * /bin/bash /scripts/rotate-nginx-logs.sh >/dev/null 2>&1