nginx访问常用日志格式

22 min read

Nginx访问常用日志格式

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" $http_host '
                        '$status $request_length $body_bytes_sent "$http_referer" '
                        '"$http_user_agent"  $request_time';
  
      access_log  access.log  main;

字段解释:

  1. remote_addr : 客户端地址

  2. remote_user : 客户端用户名

  3. time_local : 服务器时间

  4. request : 请求内容,包括方法名,地址,和http协议

  5. http_host : 用户请求是使用的http地址

  6. status : 返回的http 状态码

  7. request_length : 请求大小

  8. body_bytes_sent : 返回的大小

  9. http_referer : 来源页

  10. http_user_agent : 客户端名称

  11. request_time : 整体请求延时

Nginx默认的日志格式

$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
  • $remote_addr 请求者IP

  • $remote_user HTTP授权用户,如果不使用Http-based认证方式,其值为空

  • [$time_local] 服务器时间戳

  • "$request" HTTP请求类型(如GET,POST等)+HTTP请求路径(不含参数)+HTTP协议版本

  • $status 服务器返回的状态码(如200,404,5xx等)

  • $body_bytes_sent 服务器响应报文大小,单位byte

  • "$http_referer" referer字段值

  • "$http_user_agent" User Agent字段

按URL的请求数排序

awk -F\" '{print $2}' /var/log/nginx/access.log| awk '{print $2}' | sort | uniq -c | sort -r

找到访问这些URL的IP

awk -F\" '($2 ~ "admin"){print $0}' /var/log/nginx/access.log | awk '{print $0}' | sort | uniq -c | sort -r

请求中包含字段排序

请求中包括ref

awk -F\" '($2 ~ "ref"){print $2}' /var/log/nginx/access.log | awk '{print $2}' | sort | uniq -c | sort -r

awk扩展

  1. awk 命令的基本格式如下:

awk '条件1 {动作 1} 条件 2 {动作 2} …' 文件名
  1. awk的条件判断

wk保留字 BEGIN 在 awk 程序一开始,尚未读取任何数据之前执行。BEGIN 后的动作只在程序开始时执行一次
awk保留字 END 在 awk 程序处理完所有数据,即将结束时执行?END 后的动作只在程序结束时执行一次
关系运算符 > 大于
< 小于
>= 大于等于
<= 小于等于
== 等于。用于判断两个值是否相等。如果是给变童赋值,则使用"=”
!= 不等于
A~B 判断字符串 A 中是否包含能匹配 B 表达式的子字符串
A!~B 判断字符串 A 中是否不包含能匹配 B 表达式的子字符串
正则表达式 /正则/ 如果在“//”中可以写入字符,则也可以支持正则表达式
  1. 对于 awk 命令来说,只要分隔开,不管是空格还是制表符,都可以识别,对于其它符号用-F参数指定分隔符为冒号

  2. $0代表当前行,$2$6分别代表第二个字段和第六个字段