• awk的常用操作场景以及工作中涉及到的一些场景实例


    废话不多说,直接上这个实例:

    一. 统计apache日志单ip访问请求数排名:

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

     1 10.0.0.41 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
     2 10.0.0.43 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
     3 10.0.0.42 - - [03/Dec/2010:23:27:01 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
     4 10.0.0.46 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
     5 10.0.0.42 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
     6 10.0.0.47 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
     7 10.0.0.41 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
     8 10.0.0.47 - - [03/Dec/2010:23:27:02 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
     9 10.0.0.41 - - [03/Dec/2010:23:27:03 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -
    10 10.0.0.46 - - [03/Dec/2010:23:27:03 +0800] "HEAD /checkstatus.jsp HTTP/1.0" 200 -

      一般的做法是:

    1 [root@localhost /]# awk '{print $1}' access.log|sort|uniq -c |sort -rn -k1
    2 3 10.0.0.41
    3 2 10.0.0.47
    4 2 10.0.0.46
    5 2 10.0.0.42
    6 1 10.0.0.43

      一直在思考 统计IP最多的数的意义何在?

      其实,一般单个IP访问数量过百,就值得怀疑了,如果短时间内上万PV访问,说明就不正常了,可以采取相应的处理手段,比如封掉此IP,此法要慎重,否则,可能会有误封问

    题,因为,国内的大多数公司还是NAT上网的,出口一个IP。

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

      使用netstat -an >>test.log 可以将连接到服务器的一些基本信息重定向到文本文件中,假设内容如下:

     1 Active Internet connections (w/o servers)
     2 Proto Recv-Q Send-Q Local AddressForeign AddressState
     3 tcp00 124.123.3.79:80219.85.194.23:12004SYN_RECV
     4 tcp00 124.123.3.77:80183.8.74.57:3276SYN_RECV
     5 tcp00 124.123.3.77:80124.236.0.214:63191SYN_RECV
     6 tcp00 124.123.3.77:80121.31.42.148:2338TIME_WAIT
     7 tcp01023 124.123.3.77:8061.178.184.222:62683FIN_WAIT1
     8 tcp00 124.123.3.77:80222.79.242.74:7416TIME_WAIT
     9 tcp04839 124.123.3.77:80121.31.42.148:30638FIN_WAIT1
    10 tcp00 124.123.3.77:80183.10.154.60:37282TIME_WAIT
    11 tcp01 124.123.3.77:8059.49.174.176:26913CLOSING
    12 tcp00 124.123.3.77:80121.31.42.148:1787TIME_WAIT
    13 tcp0174 124.123.3.77:80183.8.74.57:1165CLOSING

      使用awk可以统计出ESTABLISHED的一些IP的链接信息:

    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高时,能够进行临

    时应对,当然,这不是长久的方法,优化网络和服务器,部署大规模集群服务器才是较好的解决之道。

      我们可以使用awk进行简单地统计线上服务器的一些负载,保证服务器的高效运行。

  • 相关阅读:
    解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.
    .net-C#代码判断
    ashx-auth-黑色简洁验证码
    ylbtech-权限管理-数据库设计-功能权限管理技术
    ylbtech-Model-Account(通用账户模块设计)
    ADO.NET访问Access(文本数据库)数据操作(CRUD)
    连接数据库的五种不同的方式
    ylbtech-数据库设计与优化-对作为复选框/单选列表的集合表的设计
    ylbtech-cnblogs(博客园)-数据库设计-7,News(新闻)
    ylbtech-cnblogs(博客园)-数据库设计-2,Admin(用户后台)-用户自定义参数设置
  • 原文地址:https://www.cnblogs.com/shangzekai/p/4374840.html
Copyright © 2020-2023  润新知