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;
字段解释:
- remote_addr : 客户端地址
- remote_user : 客户端用户名
- time_local : 服务器时间
- request : 请求内容,包括方法名,地址,和http协议
- http_host : 用户请求是使用的http地址
- status : 返回的http 状态码
- request_length : 请求大小
- body_bytes_sent : 返回的大小
- http_referer : 来源页
- http_user_agent : 客户端名称
- 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扩展
- awk 命令的基本格式如下:
awk '条件1 {动作 1} 条件 2 {动作 2} …' 文件名
- awk的条件判断
wk保留字 | BEGIN | 在 awk 程序一开始,尚未读取任何数据之前执行。BEGIN 后的动作只在程序开始时执行一次 |
---|---|---|
awk保留字 | END | 在 awk 程序处理完所有数据,即将结束时执行?END 后的动作只在程序结束时执行一次 |
关系运算符 | > | 大于 |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 | |
== | 等于。用于判断两个值是否相等。如果是给变童赋值,则使用"=” | |
!= | 不等于 | |
A~B | 判断字符串 A 中是否包含能匹配 B 表达式的子字符串 | |
A!~B | 判断字符串 A 中是否不包含能匹配 B 表达式的子字符串 | |
正则表达式 | /正则/ | 如果在“//”中可以写入字符,则也可以支持正则表达式 |
-
对于 awk 命令来说,只要分隔开,不管是空格还是制表符,都可以识别,对于其它符号用
-F
参数指定分隔符为冒号 -
$0
代表当前行,$2
和$6
分别代表第二个字段和第六个字段