全部系列分为五篇文章,本博文为第三篇:
四、awk数组命令生产实战拓展
4.1统计apache日志单ip访问请求数排名(这个常用,考试也常考)

假设apache日志内容access.log内容为:

10.0.0.41 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

10.0.0.43 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

10.0.0.42 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

10.0.0.46 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

10.0.0.42 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

10.0.0.47 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

10.0.0.41 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

10.0.0.47 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

10.0.0.41 - - [03/Dec/2010:23:27:03 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

10.0.0.46 - - [03/Dec/2010:23:27:03 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

4.1.1 给出3种解决方案

法一:

[root@oldboy /]# awk '{++S[$1]} END {for (oldboy in S) print oldboy ,S[oldboy]}' access.log |sort -rn -k2

10.0.0.41 3

10.0.0.47 2

10.0.0.46 2

10.0.0.42 2

10.0.0.43 1

#提示 $1为第一个域的内容。-k2 为对第二个字段排序,即对数量排序。

2

[root@oldboy /]# awk '{print $1}' access.log|sort|uniq -c |sort -rn -k1

3 10.0.0.41

2 10.0.0.47

2 10.0.0.46

2 10.0.0.42

1 10.0.0.43

提示:这个方法是容易想到的简单易用的方法,对于大多数同学来说,此法其实更适合大家,awk数组的方法看起来好,实际上对于初级运维来来说有点难度,经常记不住。

3

[root@oldboy /]# sed's/- -.*$//g' access.log|sort|uniq -c|sort -rn -k1

3 10.0.0.41

2 10.0.0.47

2 10.0.0.46

2 10.0.0.42

1 10.0.0.43

提示:sed管道后的第一个sort是让所有一样的IP挨着,因为uniq -c只能对相邻的IP行去重计数。

此题的解答可以有10几种,前面的课程我们已经带大家细讲了,这里就不一一讲解了。

4.1.2统计apache日志单ip访问请求数排名价值何在?

解答:通过前面的命令,我们可以找到什么IP的访问apache比较频繁,一般单个IP访问数量过百,就值得怀疑了,如果短时间内上万PV访问,说明就不正常了,可以采取相应的处理手段,比如封掉此IP,此法要慎重,否则,可能会有误封问题,因为,国内的大多数公司还是NAT上网的,出口一个IP。

4.2 统计服务器当前单IP连接数最大的IP地址前十

提示:这个命令可以查出遭受DOS***的客户端IP地址。待处理内容如下:

netstat -n >test.log的结果:

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local AddressForeign AddressState

tcp00 124.123.3.79:80219.85.194.23:12004SYN_RECV

tcp00 124.123.3.77:80183.8.74.57:3276SYN_RECV

tcp00 124.123.3.77:80124.236.0.214:63191SYN_RECV

tcp00 124.123.3.77:80121.31.42.148:2338TIME_WAIT

tcp01023 124.123.3.77:8061.178.184.222:62683FIN_WAIT1

tcp00 124.123.3.77:80222.79.242.74:7416TIME_WAIT

tcp04839 124.123.3.77:80121.31.42.148:30638FIN_WAIT1

tcp00 124.123.3.77:80183.10.154.60:37282TIME_WAIT

tcp01 124.123.3.77:8059.49.174.176:26913CLOSING

tcp00 124.123.3.77:80121.31.42.148:1787TIME_WAIT

tcp0174 124.123.3.77:80183.8.74.57:1165CLOSING

4.2.1 问题解决方案

[root@OLDBOY ~]# awk-F '[ :]+' '{++S[$6]} END {for (a in S) print a ,S[a]}' test.log |sort -rn -k2

121.31.42.148 3

183.8.74.57 2

Foreign 1

61.178.184.222 1

59.49.174.176 1

222.79.242.74 1

219.85.194.23 1

183.10.154.60 1

124.236.0.214 1

提示:

1)结果中的字符等,你可以进一步过滤。

2) 对于多分隔符匹配的用法大家可以参考老男孩的博文

深入浅出三剑客之awk必杀技一例

http://oldboy.blog.51cto.com/2561410/950730

3)实际生产中,我们过滤出已经建立连接的状态ESTABLISHED,然后,应用上述命令处理,完整命令可能为:

netstat -an|awk-F '[ :]+' '{++S[$6]} END {for (a in S) print a ,S[a]}'|sort -rn -k2

4.2.2 生产环境案例

[leo@LVS-1-1 ~]$ netstat -an|grep EST|awk '{print $5}'|cut -d : -f 1|grep -v "^$"|awk '{++ETT[$1]} END {for (oldboy in ETT) print "ip:"oldboy "-----",ETT[oldboy] ''}'|sort -rn -k2|head -10

ip:220.181.125.69----- 51

ip:121.9.222.164----- 38

ip:121.9.222.158----- 38

ip:121.9.222.156----- 38

ip:121.9.222.161----- 36

ip:121.9.222.160----- 32

ip:121.9.222.159----- 32

ip:121.9.222.162----- 31

ip:61.163.7.200----- 29

ip:115.193.163.61----- 27

提示:这是早期的命令案例,我们看到命令虽然很简单,但是搞的很复杂。实际上可以用下面看起来简单,但是难度很大的命令替代之。

netstat -an|grep EST|awk-F '[ :]+' '{++S[$6]} END {for (key in S) print "ip:"key"----->",S[key]}'|sort -rn -k2

注意,这里过滤的是已经建立连接的的连接,即状态ESTABLISHED。

4.2.3 本案例解决的生产问题

netstat -an|grep EST|awk-F '[ :]+' '{++S[$6]} END {for (key in S) print "ip:"key"----->",S[key]}'|sort -rn -k2

注意,这里过滤的是已经建立连接的的连接,即状态ESTABLISHED。

对于命令结果中,单IP结尾的数大的,可以认为是不正常的访问。如 121.31.42.148 100 ,表示一个IP有100个连接

一般来说可以怀疑不正常,当网站压力大时,可以考虑限制或封掉这些冒似非法IP,当然,也不排除,企业里多个用户用一个出口IP访问。

壮士扼腕,有时也是必须的,否则,可能网站整体影响更大,甚至瘫痪。有时,各种搜索引擎的爬虫是很疯狂的,通过本例及上面的案例,我们可以再负载IO高时,能够进行临时应对,当然,这不是长久的方法,优化网络和服务器,部署大规模集群服务器才是较好的解决之道。

4.2.4 IDC机房带宽突然暴涨问题经典案例

见http://oldboy.blog.51cto.com/2561410/909696

本系列博文完整内容共5篇:
第一篇:详解linux netstat输出的网络连接状态信息
http://aqiang.blog.51cto.com/6086626/1891882
第二篇:庖丁解牛获取连接状态数的awk数组命令
http://aqiang.blog.51cto.com/6086626/1891883
第三篇:awk数组命令经典生产实战应用拓展
http://aqiang.blog.51cto.com/6086626/1891884
第四篇:老男孩培训第八节课前awk考试题案例(门户面试题解答) 
http://aqiang.blog.51cto.com/6086626/1891886
第五篇:linux生产服务器有关网络状态的优化措施(告一段落) 
http://aqiang.blog.51cto.com/6086626/1891887

转载于:https://blog.51cto.com/aqiang/1891884

awk数组命令经典生产实战应用拓展相关推荐

  1. 庖丁解牛获取连接状态数的awk数组命令

    全部系列分为五篇文章,本博文为第二篇: 三.庖丁解牛获取连接状态数的命令 3.1 获取连接状态数的awk命令 netstat -n |awk '/^tcp/ {++S[$NF]} END {for(a ...

  2. awk数组详解、实战

    1.其它编程语言数组的下标一般从0开始,awk中数组下标默认从1开始,也可以从0开始设置: awk 'BEGIN{huluwa[0]="大娃";huluwa[1]="二娃 ...

  3. awk 数组用法【精华贴】

    文本处理的工作中,awk的数组是必不可少的工具,在这里,同样以总结经验和教训的方式和大家分享下我的一些学习心得,如有错误的地方,请大家指正和补充. awk的数组,一种关联数组(Associative ...

  4. CentOS 7.2下ELK分析Nginx日志生产实战(高清多图)

    注:本文系原创投稿 本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名 ...

  5. cut\grep\awk\sed命令详解

    cut\grep\awk\sed命令详解 1.cut命令详解及实例 (1)作用:提取文件中指定的列 语法格式:cut  选项  文件名   (2)选项作用:      -d 分隔符     按照指定的 ...

  6. python生产实战 python 闭包之庖丁解牛篇

    python生产实战 python 闭包之庖丁解牛篇 python生产实战 从闭包到中间件 什么是闭包 计算机中的闭包 数学领域中的闭包 闭包使用场景 C/C++ 中的闭包思想 C 中类似闭包的结构 ...

  7. awk,print命令

    awk awk:报告生成器,格式化文本输出种类 :nawk gawkgawk;模式扫描和处理语言awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 awk循环 awk数组 awk函 ...

  8. shell脚本--awk数组实现去除重复行

    去除重复行的方法有很多,这里介绍三种. 测试文本: [root@172-0-10-222 myscripts]# cat testfile andy 123456 hanna 123456 hello ...

  9. linux awk 数组的学习心得

    在文本处理的工作中,awk的数组是必不可少的工具,在这里,同样以总结经验和教训的方式和大家分享下我的一些学习心得,如有错误的地方,请大家指正和补充. awk的数组,一种关联数组(Associative ...

最新文章

  1. 挺带劲,这款国人开源的监控系统功能真强大~
  2. .NET的3C:CTS、CLS和CLR 以及 IL
  3. 零基础学Python(第十九章 File操作·IO流补充章节)
  4. 三篇论文之bigtable
  5. ADF声明性组件示例
  6. python线程池操作_Python mutiprocessing多线程池pool操作示例
  7. 解决 pycharm can not save setting
  8. MYSQL存储过程中事务和DECLARE EXIT/CONTINUE HANDLER的使用
  9. 拉勾数据岗位和热门编程语言现状分析
  10. SVN仓库解决APIcloud2检出错误
  11. 【渝粤题库】陕西师范大学165111 薪酬管理 作业(高起专)
  12. redis过期策略及持久化机制
  13. ArcGIS 制作3D遥感影像图
  14. dxdiag使用小结
  15. cesium实现面状要素的立体拉伸效果
  16. LayUI 后台管理模板
  17. 数字证书的创建与使用(采用java)
  18. hexo博客搭建及其美化
  19. python一边接收数据,一边对数据进行实时处理导致数据丢失
  20. windows字体转移至linux,由 Windows 向 Linux 迁移字体 和 Linux 等宽字体

热门文章

  1. 系统dsn oracle,linux平台配置oracle odbc dsn的方法.docx
  2. angular图片传到后台_告诉你,SpringBoot+Angular有多牛逼!
  3. python分块处理功能_Python-numpy实现灰度图像的分块和合并方式
  4. mysql语句生成工具_强烈推荐一款MySQL语句优化辅助工具,值得收藏
  5. Java项目:仿小米商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
  6. c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...
  7. mysql主从数据库含义_(转)Mysql数据库主从心得整理
  8. 【数据库】兴唐第二十八节课零散知识点汇总
  9. iOS架构篇-3 网络接口封装
  10. java——慎用可变参数列表