您的位置:首页 > 运维架构 > Nginx

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

2017-12-02 17:34 671 查看

默认日志

默认情况下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:1
4000
4: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




看到上图已经自动每分钟备份一次日志文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: