Nginx日志管理
- 一、日志配置
- 1.日志模块
- 2.日志格式与命令
- 3.访问日志与错误日志
- 3.1访问日志
- 3.2错误日志
- 二、日志轮转
- 三、日志分析
一、日志配置
1.日志模块
http://nginx.org/en/docs/http/ngx_http_log_module.html
#官方网站
2.日志格式与命令
在配置文件中展示了部分变量
- $remote_addr:远程登录IP,记录客户端的IP
- $remote_user:远程用户认证,由客户端输入的用户名,默认是匿名登录的(-)
- [$time_local]:本地的时间
- $request:请求,用户向网站发起的需求分为GET(下载)和HOST(上传)
包含三个字段“动作类型、文档路径、 协议版本号“ - $status :状态码
状态码 | 含义 |
200 | 请求成功。一般用于GET与POST请求 |
304 | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
403 | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
500 | 服务器内部错误,无法完成请求 |
- $body_bytes_sent :服务器给用户发送字节数
- $http_referer : 引用,从超链接跳过来
- $http_user_agent:客户浏览器的相关信息
- $http_x_forwarded_for: 代理器
3.访问日志与错误日志
3.1访问日志
3.2错误日志
- 个性化404
在Nginx配置文件中,添加新页面
错误页面加了一张图片
二、日志轮转
安装Nginx时,自动安装轮转日志
USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。
- 动态观察日志信息
- 手动切割日志
三、日志分析
截取一段2017年的日志,查看以空格为分隔符 每一部分代表什么含义
- 常用字段
实例
- 统计2017年9月5日 PV量
grep '05/Sep/2017' log/cd.mobiletrain.org.log |wc -l
- 统计2017年9月5日 一天内访问最多的10个IP(ip top10)
grep '05/Sep/2017' log/cd.mobiletrain.org.log | awk '{ips[$1]++}END{for(i in ips){print i, ips[i]}}'|sort -k2 -rn| head -10
- 统计2017年9月5日 访问大于100次的IP
grep '05/Sep/2017' log/cd.mobiletrain.org.log | awk '{ips[$1]++}END{for(i in ips){print i, ips[i]}}'|sort -k2 -rn| awk '$2>100'
- 统计2017年9月5日 访问最多的10个页面($request top 10)
grep '05/Sep/2017' log/cd.mobiletrain.org.log |awk '{urls[$7]++}END{for(i in urls){print i " " urls[i] }}'|sort -k2 -rn | head -10
- 统计2017年9月5日 每个URL访问内容总大小($body_bytes_sent),和次数
grep '05/Sep/2017' log/cd.mobiletrain.org.log |awk '{ urls[$7]++;size[$7]+=$10}END{for(i in size){print i " " size[i] " " urls[i]}}'|sort -k3 -rn |head -10
- 统计2017年9月5日 每个IP访问状态码为404及出现次数($status)
grep '05/Sep/2017' log/cd.mobiletrain.org.log |awk '{sta[$1 " "$9 ]++}END{for(i in sta){print i " " sta[i]}}'|sort -k3 -rn | awk '$2==404'| head -10
- 统计前一分钟的PV量
date=$(date -d '-1 minute' +%Y:%H:%M); awk -v date=$date '$0 ~ date{i++}END{print i}' /var/log/nginx/a.com.log
- 统计2017年9月5日 8:30-9:00,每个IP,出现404状态码的数量
awk '$4>="[05/Sep/2017:08:30:00" && $4<="[05/Sep/2017:09:00:00" {if($9="404"){ip_code[$1" "$9]++}}END{for(i in ip_code){print i,ip_code[i]}}' log/cd.mobiletrain.org.log
- 统计2017年9月5日 各种状态码数量
grep '05/Sep/2017' log/cd.mobiletrain.org.log |awk '{ sta[$9]++ }END{for (i in sta){print i" "sta[i]}}'