2018/10/10 awk 分析 nginx 日志

废话不多说,简单了解一下 awk

  - 强大的文本分析工具,也就是分析日志

最常用的就是分析日志了吧,做统计什么,这里也拿 nginx 日志来做分析

1:统计出现次数

- 比如状态码出现次数

- 先直接上命令

awk '{print $9}' access_log  | sort | uniq -c | sort -rn

- 可能会有一些疑惑,这个$9 是什么?

- 我们拿出一条日志来看一下先

123.124.16.83 - - [10/Oct/2018:10:24:56 +0800] "GET /static/favicon.ico HTTP/1.0" 200 5430 "https://xxx.com/" "Hm_lvt_d0ce2d118b3d24552ed32f2e7328f548=1534905921; ZYBUSS=R2ccj7ZaT-_bVrhEd_nra2QQB8vcYqWqdRAIXYZlhj07qNVt05nxfnRZB-IU75Yn" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" 0.001 1496233492 123.124.16.83 192.168.240.255

- 我们可以看到我们需要状态码的状态码,但是,他在第几位呢?

- 在 awk 中,只要碰到空格,就说明它占了一位,也就是说

$1   123.124.16.83
$2   -
$3   -
$4   [10/Oct/2018:10:24:56
....
SO
$9   状态码

这样我们就找到我们的状态码,之后的 sort | uniq 命令,可以自己看下,会更好的理解这个命令

2:筛选特定的日志

- 比如我们发现了异常,要找到所有状态码为 302 的 access_log

- 直接上命令

awk '$9~/302/{print}' accrss_log

- 之前我们已经找到了 $9 是我们的状态码

- 这里使用了 正则 匹配所有等于 302 的状态码

- 当然,awk 也支持其他的方式

比如,使用  == 来匹配

awk '$9=="302" {print}' access_log

- 这里列出条件操作符

<       小于
<=      小于等于
==      等于
!=      不等于
>       大于
>=      大于等于
~       匹配正则表达式
!~      不匹配正则表达式

猜你喜欢

转载自www.cnblogs.com/25-lH/p/9765644.html
今日推荐