说明:本文主要介绍nginx的日志管理,具体包括日志的使用、日志切割备份。
查看Nginx的server段,可以看到如下信息:
#access_log logs/host.access.log main;
这说明,该server,他的访问日志文件是logs/host.access.log。使用的格式是“main”,除了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格式是一种定义好的日志格式,并起的名字,便于引用。
以上的例子,main类型的日志,记录的remote_addr…http_x_forwarded_for等选项。
参数详情:
参数 | 说明 | 示例 |
$remote_addr | 客户端地址(远程地址) | 211.28.65.253 |
$remote_user | 客户端用户名称 (远程客户机名称) | -- |
$time_local | 访问时间和时区 | 18/Jul/2012:17:00:01 +0800 |
$request | 请求的URI和HTTP协议 | "GET /article-10000.html HTTP/1.1" |
$http_host | 请求地址,即浏览器中你输入的地址(IP或域名) | |
$status | HTTP请求状态 | 200 |
$upstream_status | upstream状态 | 200 |
$body_bytes_sent | 发送给客户端文件内容大小 | 1547 |
$http_referer | url跳转来源 | |
$http_user_agent | 用户终端浏览器等信息 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C; |
$ssl_protocol | SSL协议版本 | TLSv1 |
$ssl_cipher | 交换数据中的算法 | RC4-SHA |
$upstream_addr | 后台upstream的地址,即真正提供服务的主机地址 | 10.10.10.100:80 |
$request_time | 整个请求的总时间 | 0.205 |
$upstream_response_time | 请求过程中,upstream响应时间 | 0.002 |
日志的使用
1、打开主配置文件,将log_format的注释去掉
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';#(需要打开)
.....
}
2、在你需要的server的段里面配置日志存放位置
server {
listen 80;
server_name 192.168.0.2;
location / {
root z.com;
index index.html indexIp.html;
}
access_log logs/z.com.log192.log main;
//日志存放在logs/z.com.log192.log 其格式是main格式(配置的日志文件不必提前先创建,因为nginx启动访问server就会自动生成日志文件)
}
然后启动nginx查看目录下是否有新生成的日志文件。
查看日志里面的信息
定时任务完成日志切割
1、创建一个日志切割的脚本
Vi /data/runlog.sh(创建一个脚本为runlog.sh的脚本,路径位置为/usr/local/nginx/data/runlog.sh)在里面写入脚本
#!/bin/bash
LOGPATH=/usr/local/nginx/logs/z.com.access.log
BASEPATH=/data/$(date –d yesterday +%Y%m)
mkdir –p $BASEPATH
bak=$BASEPATH/$(date –d yesterday +%d%H%M).zcom.access.log
mv $LOGPATH $bak
touch $LOGPATH
kill -SIGUSR1 `cat /usr/local/nginx/logs/nginx.pid`
记得最后一行的“-SIGUSR1”命令根据操作系统不同使用会有所差异,所以需要查询自己的系统是不是这样写的。使用命令kill -l就可以看到支持那些命令。
脚本说明:定义日志存放路径,然后计算今天的日期确定存放的目录,然后将这个目录创建出来。然后再根据“时和分”计算出日志名称(存放在那个目录下)。然后将日志移动到文件夹中。然后创建一个新的空日志文件,下次创建日志的时候,里面是重新开始记录日志的。
2、创建一个定时器
Crontab -e
01 00 * * * /xxx/path/b.sh 每天0时1分(建议在02-04点之间,系统负载小)
这样日志就会每天定时备份到指定位置中去。
小技巧:一般手动切割日志查看具体信息可以这样写:
tail -n 30000 logs/catalina.out > a.txt (截取后3万行日志,保存到a.txt中)