awk数组命令经典生产实战应用拓展
全部系列分为五篇文章,本博文为第三篇:
四、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数组命令经典生产实战应用拓展相关推荐
- 庖丁解牛获取连接状态数的awk数组命令
全部系列分为五篇文章,本博文为第二篇: 三.庖丁解牛获取连接状态数的命令 3.1 获取连接状态数的awk命令 netstat -n |awk '/^tcp/ {++S[$NF]} END {for(a ...
- awk数组详解、实战
1.其它编程语言数组的下标一般从0开始,awk中数组下标默认从1开始,也可以从0开始设置: awk 'BEGIN{huluwa[0]="大娃";huluwa[1]="二娃 ...
- awk 数组用法【精华贴】
文本处理的工作中,awk的数组是必不可少的工具,在这里,同样以总结经验和教训的方式和大家分享下我的一些学习心得,如有错误的地方,请大家指正和补充. awk的数组,一种关联数组(Associative ...
- CentOS 7.2下ELK分析Nginx日志生产实战(高清多图)
注:本文系原创投稿 本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名 ...
- cut\grep\awk\sed命令详解
cut\grep\awk\sed命令详解 1.cut命令详解及实例 (1)作用:提取文件中指定的列 语法格式:cut 选项 文件名 (2)选项作用: -d 分隔符 按照指定的 ...
- python生产实战 python 闭包之庖丁解牛篇
python生产实战 python 闭包之庖丁解牛篇 python生产实战 从闭包到中间件 什么是闭包 计算机中的闭包 数学领域中的闭包 闭包使用场景 C/C++ 中的闭包思想 C 中类似闭包的结构 ...
- awk,print命令
awk awk:报告生成器,格式化文本输出种类 :nawk gawkgawk;模式扫描和处理语言awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 awk循环 awk数组 awk函 ...
- shell脚本--awk数组实现去除重复行
去除重复行的方法有很多,这里介绍三种. 测试文本: [root@172-0-10-222 myscripts]# cat testfile andy 123456 hanna 123456 hello ...
- linux awk 数组的学习心得
在文本处理的工作中,awk的数组是必不可少的工具,在这里,同样以总结经验和教训的方式和大家分享下我的一些学习心得,如有错误的地方,请大家指正和补充. awk的数组,一种关联数组(Associative ...
最新文章
- 挺带劲,这款国人开源的监控系统功能真强大~
- .NET的3C:CTS、CLS和CLR 以及 IL
- 零基础学Python(第十九章 File操作·IO流补充章节)
- 三篇论文之bigtable
- ADF声明性组件示例
- python线程池操作_Python mutiprocessing多线程池pool操作示例
- 解决 pycharm can not save setting
- MYSQL存储过程中事务和DECLARE EXIT/CONTINUE HANDLER的使用
- 拉勾数据岗位和热门编程语言现状分析
- SVN仓库解决APIcloud2检出错误
- 【渝粤题库】陕西师范大学165111 薪酬管理 作业(高起专)
- redis过期策略及持久化机制
- ArcGIS 制作3D遥感影像图
- dxdiag使用小结
- cesium实现面状要素的立体拉伸效果
- LayUI 后台管理模板
- 数字证书的创建与使用(采用java)
- hexo博客搭建及其美化
- python一边接收数据,一边对数据进行实时处理导致数据丢失
- windows字体转移至linux,由 Windows 向 Linux 迁移字体 和 Linux 等宽字体
热门文章
- 系统dsn oracle,linux平台配置oracle odbc dsn的方法.docx
- angular图片传到后台_告诉你,SpringBoot+Angular有多牛逼!
- python分块处理功能_Python-numpy实现灰度图像的分块和合并方式
- mysql语句生成工具_强烈推荐一款MySQL语句优化辅助工具,值得收藏
- Java项目:仿小米商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
- c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...
- mysql主从数据库含义_(转)Mysql数据库主从心得整理
- 【数据库】兴唐第二十八节课零散知识点汇总
- iOS架构篇-3 网络接口封装
- java——慎用可变参数列表