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
看到上图已经自动每分钟备份一次日志文件。
相关文章推荐
- nginx(日志管理之日志的使用、定时任务完成日志切割)
- Ngnix的日志管理和用定时任务完成日志切割
- Ngnix的日志管理和用定时任务完成日志切割
- Ngnix的日志管理和用定时任务完成日志切割
- docker 内cron建立定时任务完成nginx 日志轮询切割
- 05 nginx定时任务完成日志切割
- Nginx 笔记与总结(5)访问日志管理:计划任务 + 日志切割
- nginx日志定时切割脚本
- Linux下添加shell脚本使得nginx日志每天定时切割压缩 推荐
- Centos下Nginx配置WEB访问日志并结合shell脚本定时切割
- Nginx日志定时切割脚本
- linux编译安装及配置Nginx(包含pcre), 日志定时切割
- (4)nginx:日志以及定时切割日志小例子
- Nginx切割日志管理简单说明
- nginx日志模块及日志定时切割的方法
- 编写每天定时切割Nginx日志的脚本
- 编写定时切割Nginx日志脚本
- Linux下nginx日志每天定时切割
- Nginx日志定时切割脚本
- 日志文件切割服务logrotate配置及crontab定时任务的使用