`
zhengdl126
  • 浏览: 2531034 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

用shell脚本分析Nginx日志

 
阅读更多
本文中的shell脚本又分为两种情况,第一种情况是Nginx作为最前端的负载均衡器,其集群架构为Nginx+Keepalived时,脚本内容如下所示:

    vim log-nginx.sh  
    #!/bin/bash  
    if [$# -eq 0 ]; then  
      echo "Error: please specify logfile."  
      exit 0  
    else  
      LOG=¥1  
    fi  
    if [ ! -f $1 ]; then  
      echo "Sorry, sir, I can""t find this apache log file, pls try again!"  
    exit 0  
    fi  
 ################################
    echo "Most of the ip:"  
    echo "-------------------------------------------"  
    awk ""{ print $1 }""$LOG| sort| uniq -c| sort -nr| head -10  
    echo  
    echo  
################### 
    echo "Most of the time:"  
    echo "--------------------------------------------"  
    awk ""{ print $4 }""$LOG| cut -c 14-18| sort| uniq -c| sort -nr| head -10  
    echo  
    echo  
#######################
    echo "Most of the page:"  
    echo "--------------------------------------------"  
    awk ""{print $11}""$LOG| sed ""s/^.*\\(.cn*\\)\"/\\1/g""| sort| uniq -c| sort -rn| head -10  
    echo  
    echo  
#####################3  
    echo "Most of the time / Most of the ip:"  
    echo "--------------------------------------------"  
    awk ""{ print $4 }""$LOG| cut -c 14-18| sort -n| uniq -c| sort -nr| head -10 > timelog  
    for i in ""awk ""{ print $2 }"" timelog""  
    do  
      num=""grep $i timelog| awk ""{ print $1 }""""  
      echo "$i $num"  
      ip=""grep $i $LOG| awk ""{ print $1}""| sort -n| uniq -c| sort -nr| head -10""  
      echo "$ip"  
      echo  
    done  
    rm -f timelog

 

 

 

 

 

 

第二种情况是以Nginx作为Web端,置于LVS后面,这时要剔除掉LVS的IP地址,比如LVS服务器的公网IP地址(像203.93.236.141、203.93.236.145等)。这样可以将第一种情况的脚本略微调整一下,如下所示:

 

 

 

 

    #!/bin/bash  
    if [$# -eq 0 ]; then  
      echo "Error: please specify logfile."  
      exit 0  
    else  
      cat$1| egrep -v '203.93.236.141|145' > LOG  
    fi  
    if [ ! -f$1 ]; then  
      echo "Sorry, sir, I can't find this apache log file, pls try again!"  
    exit 0  
    fi  
    ###################################################  
    echo "Most of the ip:"  
    echo "-------------------------------------------"  
    awk '{ print$1 }' LOG| sort| uniq -c| sort -nr| head -10  
    echo  
    echo  
    ####################################################  
    echo "Most of the time:"  
    echo "--------------------------------------------"  
    awk '{ print$4 }' LOG| cut -c 14-18| sort| uniq -c| sort -nr| head -10  
    echo  
    echo  
    ####################################################  
    echo "Most of the page:"  
    echo "--------------------------------------------"  
    awk '{print$11}' LOG| sed 's/^.*\\(.cn*\\)\"/\\1/g'| sort| uniq -c| sort -rn| head -10  
    echo  
    echo  
    ####################################################  
    echo "Most of the time / Most of the ip:"  
    echo "--------------------------------------------"  
    awk '{ print$4 }' LOG| cut -c 14-18| sort -n| uniq -c| sort -nr| head -10 > timelog  
    for i in 'awk '{ print$2 }' timelog'  
    do  
      num='grep$i timelog| awk '{ print$1 }''  
      echo "$i$num"  
      ip='grep$i LOG| awk '{ print$1}'| sort -n| uniq -c| sort -nr| head -10'  
      echo "$ip"  
      echo  
    done  
    rm -f timelog 
        #!/bin/bash  
        if [$# -eq 0 ]; then  
          echo "Error: please specify logfile."  
          exit 0  
        else  
          cat$1| egrep -v '203.93.236.141|145' > LOG  
        fi  
        if [ ! -f$1 ]; then  
          echo "Sorry, sir, I can't find this apache log file, pls try again!"  
        exit 0  
        fi  
        ###################################################  
        echo "Most of the ip:"  
        echo "-------------------------------------------"  
        awk '{ print$1 }' LOG| sort| uniq -c| sort -nr| head -10  
        echo  
        echo  
        ####################################################  
        echo "Most of the time:"  
        echo "--------------------------------------------"  
        awk '{ print$4 }' LOG| cut -c 14-18| sort| uniq -c| sort -nr| head -10  
        echo  
        echo  
        ####################################################  
        echo "Most of the page:"  
        echo "--------------------------------------------"  
        awk '{print$11}' LOG| sed 's/^.*\\(.cn*\\)\"/\\1/g'| sort| uniq -c| sort -rn| head -10  
        echo  
        echo  
        ####################################################  
        echo "Most of the time / Most of the ip:"  
        echo "--------------------------------------------"  
        awk '{ print$4 }' LOG| cut -c 14-18| sort -n| uniq -c| sort -nr| head -10 > timelog  
        for i in 'awk '{ print$2 }' timelog'  
        do  
          num='grep$i timelog| awk '{ print$1 }''  
          echo "$i$num"  
          ip='grep$i LOG| awk '{ print$1}'| sort -n| uniq -c| sort -nr| head -10'  
          echo "$ip"  
          echo  
        done  
        rm -f timelog 
 

 

 

我们可以用此脚本分析文件名为www_tomcat_20110331.log的文件。[root@localhost 03]# sh counter_nginx.sh www_tomcat_20110331.log大家应该跟我一样比较关注脚本运行后的第一项和第二项结果,即访问我们网站最多的IP和哪个时间段IP访问比较多,如下所示:
  

    Most of the ip: 
    ------------------------------------------- 
      5440 117.34.91.54 
     9 119.97.226.226 
     4 210.164.156.66 
     4 173.19.0.240 
     4 109.230.251.35 
     2 96.247.52.15 
     2 85.91.140.124 
     2 74.168.71.253 
     2 71.98.41.114 
     2 70.61.253.194 
    Most of the time: 
    -------------------------------------------- 
     12 15:31 
     11 09:45 
     10 23:55 
     10 21:45 
     10 21:37 
     10 20:29 
     10 19:54 
     10 19:44 
     10 19:32 
     10 19:13

  如果对日志的要求不高,我们可以直接通过Awk和Sed来分析Linux日志(如果对Perl熟练也可以用它来操作),还可以通过Awstats来进行详细分析,后者尤其适合Web服务器和邮件服务器。另外,如果对日志有特殊需求的话,还可以架设专用的日志服务器来收集Linux服务器日志。总之一句话:一切看需求而定。

 

 

 

分享到:
评论

相关推荐

    shell脚本实现nginx日志分割

    本解本实现了使用shell脚本实现nginx日志分割,大家如果没资源分下载,可以转至:https://mp.csdn.net/mdeditor/85233117# 去查看源代码。谢谢大家

    nginx 最常使用的日志分析shell脚本

    下面分享一下我用Shell编写的分析Nginx日志的脚本,它可以快速得出排名最前的网 站和IP等,内容如下所示: Most of the ip: ------------------------------------------- 220 59.41.24.48 178 59.41.24.80 172 ...

    shell脚本分析 nginx日志访问次数最多及最耗时的页面(慢查询)

    本文将介绍一个用于分析`nginx`日志的`shell`脚本,该脚本能够帮助我们找出访问次数最多和最耗时的页面,从而针对性地进行优化。这个脚本类似于`MySQL`中的慢查询日志分析,但针对的是Web页面的慢访问情况。 首先,...

    开启、停止 nginx 的shell脚本

    标题中的“开启、停止 nginx 的 shell 脚本”指的是使用 Linux shell 脚本来启动或停止 Nginx 服务器,这是一个常见的系统管理员任务。Nginx 是一款高性能的 Web 和反向代理服务器,广泛应用于网站托管和服务提供。...

    shell脚本编程100例

    本书《shell脚本编程100例》为读者提供了100个实战性的shell脚本编程实例,涵盖了检测网段主机状态、猜数字游戏、打印乘法口诀、使用rsync备份数据、切割Nginx日志、监控服务端口、使用mtime删除历史文件或日志文件...

    自动reload nginx解决nginx对动态域名不重新解析的Shell脚本

    为了解决这个问题,我们可以编写一个Shell脚本来定期检查IP变化并自动执行`nginx -s reload`命令来强制Nginx重新加载配置。 ### Shell脚本工作原理 1. **检测IP变化**:首先,脚本会定期读取动态DNS服务提供的API...

    shell脚本(监控日志发告警邮件)

    监控生产环境nginx日志发告警邮件,需要使用linux系统的定时任务,如5分钟执行或者其他时间间隔

    使用shell脚本对Nginx日志进行切分的示例代码

    本文介绍了使用shell脚本对Nginx日志进行切分的示例代码,分享给大家,具体如下: 1.日志格式 默认的日志格式: main log_format main '$remote_addr - $remote_user [$time_local] $request ' $status $body_bytes...

    nginx一键部署,包含shell脚本及nginx安装包

    4. **启动与重启**:安装完成后,你可以用 `nginx -t` 检查配置文件的语法是否正确,无误后使用 `nginx` 命令启动 Nginx,或者用 `nginx -s reload` 重启服务以应用新的配置。 **三、Nginx 功能特性** 1. **静态...

    109个shell脚本合集.pdf

    Shell脚本可以直接使用在Windows、Unix、Linux上面,并且可以调用大量系统内部的功能来解释执行程序。如果熟练掌握Shell脚本,可以让我们操作计算机变得更加轻松,也会节省很多时间。 以下是109个Shell脚本合集中...

    Nginx日志自动归档备份shell脚本log.sh

    Nginx日志自动归档备份shell脚本log

    nginx按天进行日志切割脚本,同样适合其它很多服务日志的切割

    nginx按天进行日志切割脚本,同样适合其它很多服务日志的切割,压缩包包含shell切割脚本和使用说明,该脚本适合nginx同时也适合其他类似服务的日志切割,只要简单修改shell脚本即可,灵活多变,实用。

    linux下shell处理nginx日志自动生成ip黑名单

    #shell脚本处理nginx日志自动生成ip黑名单 ##统计访问量前10名的ip并写入文件 #!/bin/bash data=`date +%Y-%m-%d` #统计访问量最高的前10ip awk '{print $1}' '/PATH/'$data'.log' | sort -n |uniq -c | sort -rn | ...

    Nginx日志切割清理脚本

    利用crontab定时机制触发shell脚本,自动切割nginx的日志文件,并实现自动清理,可直接在服务器上上传使用

    100个shell脚本合集

    在shell脚本中,可以通过监控Nginx日志来识别异常IP,例如当某个IP在短时间内访问次数超过设定阈值(如10次),则将其加入iptables防火墙的黑名单,阻止其继续访问。同时,脚本会记录被屏蔽的IP到 `/tmp/drop_ip.log...

    统计Nginx日志里前一个小时的IP数量以及IOS占比

    理解这个过程不仅有助于你执行类似的任务,还能让你深入理解shell脚本编程、日志分析以及Nginx日志格式。对于系统管理员和开发者来说,具备这些技能可以更好地监控和优化服务器性能,提高故障排查效率。

    109个shell脚本合计

    Shell脚本是Linux/Unix操作系统中的强大工具,它允许用户编写一系列命令,形成自动化任务,以提高工作效率。本文档汇总了109个实用的Shell脚本实例,涵盖了多个应用场景,包括系统管理、网络监控、数据库备份等。...

    Shell脚本编程100例

    以上这些例子涵盖了基本的Shell脚本操作,如变量使用、条件判断、流程控制、系统命令调用以及定时任务设置等。通过学习和实践这些脚本,可以深入了解Shell脚本编程,提升系统管理能力。对于Linux系统管理员、开发者...

Global site tag (gtag.js) - Google Analytics