记录nginx错误日志中提取访问IP总数的思路

起因

早上zabbix监控到平台数据库连接数突然爆满告警,影响正常业务运行。加急处理。
发生时间是早上9点至10点半恢复正常运行,利用排除法检查各个业务模块是否影响数据库。ansible批量操作docker。
期间将nginx服务停止过。

需求

提取早上9点至10点半的nginx访问日志中的IP,并统计出各个IP的访问情况
查看日志大小,1个多G。包含3月至今的错误访问

问题:nginx不能停止运行,错误日志又在不断增加

由于错误日志增加时断时续,利用cp命令成功将文件复制一份出来分析。
还有一种方式是cat整个日志,重写进新文件cat error.log | tee >> logname.log
接下来就是分析这个副本日志了

思路

  1. 时间段日志抽取
  2. 提取IP
  3. 统计并去重计数

  1. 利用grep将指定时间段的文件再重写进一个文件
    cat logname.log | grep '2020/04/24 0[8-9]:[1-6][1-9]:[1-6][1-9]' | tee >> newlog.log
    cat logname.log | grep '2020/04/24 10:[1-6][1-9]:[1-6][1-9]' | tee >> newlog.log

  2. 由于文件比较大。提取出来也将近400M,故利用headawk命令抽取部分IP进行实验

    head newlog.log | awk '{print $20}' | cut -d ',' -f1

    由于访问日志IP后有个逗号,利用cut命令截取掉

  3. 统计去重计数

    head newlog.log | awk {print $20} | cut -d ',' -f1 | sort -n | uniq -c | sort -n

结果

cat newlog.log | awk {print $20} | cut -d ',' -f1 | sort -n | uniq -c | sort -n | tee > access_ip_count.txt

找到了访问量最大的IP,高达20万的访问。确定了那个业务模块的影响,找到背锅的了。

这个思路还有改进的地方,按自己的情况酌情处理。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注