linux CentOS7 下 Nginx 1.13.7 日志管理(定时任务完成日志切割)

来源:互联网 发布:java 线程池 串行 编辑:程序博客网 时间:2024/06/09 14:32

默认日志

默认情况下nginx使用logs/access_log 日志文件。

为了运维需要我们会定时备份access_log。

可是nginx在运行期间备份access_log后即便修改了名字依旧会向修改后的access_log中写入日志(与linux文件系统管理方法有关inode)。

解决办法一、停止nginx服务,再备份access_log文件。

解决办法二(推荐)、无需停止nginx服务,使用usr1命令

1、修改access.log文件名为备份文件名如access.bak.log

2、找到nginx进程id  ps -aux | nginx

3、kill -s usr1 79123

这是在进入logs目录查看产生了一个新的access.log文件,并且nginx正在写入日志(有访问的情况下)。

突发奇想的解决办法三(强烈不推荐)、无需停止nginx服务

1、修改nginx.conf中配置文件名称

2、使用reload或usr1命令,从新加载配置文件。

日志内容

日志记录内容项在nginx.conf中配置。
默认的日志策略是main。你也可以自行编辑使用的策略。
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

1:remote_addr 远程访问ip地址---[192.168.1.5]
2:remote_user 远程访问用户
3:timelocal 访问时间---[02/Dec/2017:14:32:35+xxxx]
4:request 访问方式以及协议---[GET/HTTIP1.1]
5:status 返回状态---[304]
6:body_bytes_sent 发送给客户端的字节数
7:http_referer 从哪个页面链接过来的
8:http_user_agent 用户代理/蜘蛛 ,被转发的请求的原始IP
9:http_x_forwarded_for:在经过代理时,代理把你的本来IP加在此头信息中,传输你的原始IP
具体可以看官网 http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format


单独为每个server配置日志

nginx可以单独为每个server配置日志文件。
在server下增加access_log项,文件位于logs/host.access.log ,使用main日志策略。

 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                     '"$http_user_agent" "$http_x_forwarded_for"';    server {        listen       80;        server_name  localhost;access_log  logs/host.access.log  main;        location / {            root   html;            index  index.html index.htm;        }} 

退出保存nginx.conf,
重新加载配置或重启nginx服务。



可以看出reload后新的日志文件有了大小的变化。

使用定时任务完成日志分隔

1、首先建一个shell脚本runlog.sh,位于/bin/bash /usr/local/nginx/data下。

这个脚本的作用是将日志文件备份并新建日志文件,通知nginx使用新的日志文件

#!/bin/bash#日志文件所在位置LOGPATH=/usr/local/nginx/logs/host.access.log#备份后的位置BASEPATH=/usr/local/nginx/data#备份后的文件名称(按年月日编名)bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).host.access.log#echo $bak#移动备份文件mv $LOGPATH $bak#新建的日志文件touch $LOGPATH#通知nginx使用新的日志文件kill -usr1 $(cat /usr/local/nginx/logs/nginx.pid)

2、创建计划任务

这个任务是每分钟执行一次。主要是便于测试

$crontab -e

*/1 * * * * /bin/bash /usr/local/nginx/data/runlog.sh


看到上图已经自动每分钟备份一次日志文件。

原创粉丝点击