Nginx系列3:nginx日志配置与日志切割
2019-04-01 本文已影响0人
joyitsai
1. 日志配置
我们观察nginx的server段,可以看到如下类似信息
#access_log logs/host.access.log main;
其中,access_log
指令用于声明nginx日志的文件路径和日志格式。
这说明该server的访问日志的文件是 相对路径 logs/host.access.log ,使用的main
格式:
-
main格式是什么?
查看配置文件,可以发现下面这段:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
main格式是我们定义好一种日志的格式,并起个名字,便于引用:
-
1. 日志格式是指记录哪些选项:
默认的日志格式main
:
- 远程IP(
$remote_addr
) - 远程用户(
$remote_user
) - [用户时间(
$time_local
)] - 请求方法(
"$request"
) - 请求状态吗(
$status
) - 请求体body长度 (
$body_bytes_sent
) - referer来源信息(
"$http_referer"
) - 用户代理/蜘蛛(
$http-user-agent
) - 被转发的请求的原始IP(
$http_x_forwarded_for
)
2. 日志切割
实际应用: shell+定时任务+nginx信号管理,完成日志按日期存储
-
分析思路:
(1) 凌晨02时00分, 把昨天的日志重命名,放在相应的目录下
(2) 再USR1信息号控制nginx重新生成新的日志文件
-
具体脚本
logsback.sh
:
#!/bin/bash
base_path=/usr/local/nginx/logs
log_path=$(date -d yesterday +%Y%m)
day=$(date -d yesterday +%d)
#在logs/目录下,创建以`年月`命名的文件夹,存放当月的日志文件
mkdir -p $base_path/$log_path
#将logs/目录中的日志文件备份到 logs/年月文件夹/sccess_日.log的新日志文件中
mv $base_path/access.log $base_path/$log_path/access_$day.log
#重新生成新的日志文件,当日日志到此切割一次
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
-
定时任务:
要想.sh脚本每天在凌晨一点钟执行一次,完成当日的日志切割,就需要用crontab 编辑定时任务,每天02时00分(建议在02-04点之间,系统负载小):
0 2 */1 * * sh /xxx/path/logsback.sh
crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。