Nginx 日志解析

更新日期: 2020-04-30 阅读次数: 13566 字数: 259 分类: Nginx

Nginx 日志默认的格式

一条日志

192.34.61.118 - - [15/Jan/2015:16:03:46 +0800] "GET /parse-nginx-log-with-awk.html HTTP/1.1" 200 2148 "http://sunzhongwei.com" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"

对应的格式

$remote_addr - - [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"

统计 nginx 日志中,访问量前 20 的 IP:

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 20

统计今日请求量最多的 IP TOP 10

TODAY=`date +%d/%b/%Y:00:00:00`
awk -vToday=$TODAY '$4>Today {print $1}' access.log | sort | uniq -c | sort -nr | head -n 10

sort 参数

-n, --numeric-sort compare according to string numerical value

-r, --reverse reverse the result of comparisons

uniq 参数

-c, --count prefix lines by the number of occurrences

如果在 uniq 前不加 sort 会怎样?

uniq 默认只能消除相邻的重复行,并不能消除整个文件中的重复行。所以,先使用 sort 排序之后就能将整个文件中的重复行。

如何统计 TOP 10 中,大于某个阈值的量

假设阈值为 1000, e.g.

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10 \
	awk '$1>1000 print {$1, $2}'

tags: nginx 日志统计

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式