linux中Shell分析Nginx日志 找出被阻止的IP

在日常运维中会发现流量突增现象或者服务器负载升高等现象,为找到原因,需要使用nginx limit模块 对访问的Ip进行限制,然后可以分析日志。
配置nginx限制IP访问,可配置多个zone。

limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;

对产生的nginx日志进行分析 脚本。

##提供默认日志路径和名称
logsFile="日志名称"
##配置多个zoneName
zoneName="allips name2 name3"
##生产临时文件存放目录
mkdir ./cache$$
 
##日志分析函数
fenxi(){
for zone in $zoneName;
do
    printf "\n当前报告是{ $zone }限制产生的:\n"
    grep "$zone" $logFile > ./cache$$/$zone.log
   
    printf "%-7s|%-12s|%-19s|%-20s|%-36s|%s\n" "序号" "次数" "IP地址" "IP归属" "时间范围"
   
    ucount=0;
    ##过滤出访问的IP地址并排序去重,保证结果是由访问次数高到低排序
    ip_list=$(egrep -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" cache$$/$zone.log |sort |uniq -c |sort -n -r |awk '{print $2}')
   
    for ip in $ip_list;
    do
        grep $ip cache$$/$zone.log > ./cache$$/temp.$$.log
        tstart=`cut -c-19 ./cache$$/temp.$$.log | head -1`
        tend=`cut -c-19 ./cache$$/temp.$$.log|tail -1`
        let ucount++
        Attempts=`cat ./cache$$/temp.$$.log |wc -l`
        time_range="$tstart"--"$tend"
        ##通过138找到ip地址归属
        ip138=`curl -s "http://ip138.com/ips138.asp?ip=$ip&action=2"| iconv -f gb2312 -t utf-8 |grep '' | awk -F '[<> ]+' '{print substr($7,6)}'`
        ipwhere=`echo $ip138 |awk '{print $7}'`
        printf "%-5s|%-10s|%-17s|%-20s|%-33s|%s\n" "$ucount" "$Attempts" "$ip" "$ipwhere" "$time_range"
    done
done
}
 
##可以手动输入日志文件或者执行默认分析
if [ "$1" = "" ];then
    for logFile in $logsFile;
    do
        if [ -f "$logFile" ]
        then
        printf "\n#############################################################\n"
        printf "\n当前分析的日志文件: $logFile ,以下是生成的报告:\n"
        else
        echo "日志文件出错,请检查文件"
        fi
        echo "当前日志分析时间: `date`"
        fenxi
    done
else
    logFile=$1
    printf "\n################################################################\n"
    printf "\n当前分析的日志文件: $logFile ,以下是生成的报告:\n"
    echo "当前日志分析时间: `date`"
    fenxi
fi
rm -rf cache$$/

时间: 2024-09-19 09:16:57

linux中Shell分析Nginx日志 找出被阻止的IP的相关文章

linux中安装GoAccess nginx日志分析器

统计的内容包括:访问概况.动态页面请求.静态页面请求(如图片.样式表.脚本等).访客排名,访客使用的操作系统,访客使用的浏览器,来路域名,404 错误,搜索爬虫,搜索关键词等等. 分析nginx日志是个头疼的活,以往我都是下载到本地再打开,通过搜索来查找相关访问记录和日志信息的.如今有了GoAccess就不需要这么麻烦了.之前也看到过这个软件,但是怎么安装都出错,把心一横将他给解决掉.下面说说具体的安装方法. 第一,安装必要的软件环境 Centos [root@sd-44519 ~]# yum

利用awstats分析nginx日志

今天打算分析下nginx日志,要分析nginx日志,我们可以通过shell脚本和第三方软件awstats进行分析,在此我们选择的是通过第三方软件awstats进行分析. 要使用awstats分析nginx日志,我们要安装awstats,而在安装awstats之前,我们需要先来介绍下awstats是什么? 一.awstats是什么 awstats是一个免费非常简洁而且强大有个性的基于Perl语言的WEB日志分析工具. 它可以统计网站的如下信息: 1):访问量.访问次数.页面浏览量.点击数.数据流量

一天,python搞个分析NGINX日志的脚本

准备给ZABBIX用的. 统计接口访问字次,平均响应时间,4XX,5XX次数 以后可以再改进.. #!/usr/bin/env python # coding: utf-8 ################################### # User:chengang # # Email:aguncn@163.com # # Date:2016-02-25 # ################################### import time import datetime

shell版Nginx日志蜘蛛爬取查看脚本_linux shell

shell版Nginx日志蜘蛛爬取查看脚本 用之前改一下nginx日志的路径即可 如果 更多的蜘蛛 自己在 代码蜘蛛UA数组里加即可 #!/bin/bash m="$(date +%m)" case $m in "01") m='Jan';; "02") m='Feb';; "03") m='Mar';; "04") m='Apr';; "05") m='May';; "06&

rxtx-使用RXTX 在Linux中进行串口编程时找不到串口

问题描述 使用RXTX 在Linux中进行串口编程时找不到串口 最近使用RXTX串口编程,windows系统中调试成功,但是到了Linux系统中就出现各种问题.测试用的是树莓派,系统为Linux raspberrypi,串口名称为/dev/ttyAMA0,使用xgcom串口调试已经成功,能正常收发数据.RXTX环境通过源码编译安装也成功,编写的程序开启并无异常,但是就是找不到一个串口,使用串口名直接创建串口对象报出NoSuchPortException. 使用方法为 //获得串口列表 portL

应用-Linux中shell脚本问题

问题描述 Linux中shell脚本问题 ]我有shell脚本,放在/bin/目录下,内容如下: #!/bin/sh cd /usr /sbin/insmod s3c_ts.ko ./digitpic ./MSYH.TTF & 当我开发板上电以后我手动执行手动执行test.sh 我的digitpic应用程序能够正常启动 当我在/etc/init.d/rcS 文本里面最后添加exec test.sh 提示说这个触摸屏读取错误,也就是/sbin/insmod s3c_ts.ko这部分错误了,就只有触

python实现分析apache和nginx日志文件并输出访客ip列表的方法_python

本文实例讲述了python实现分析apache和nginx日志文件并输出访客ip列表的方法.分享给大家供大家参考.具体如下: 这里使用python分析apache和nginx日志文件输出访客ip列表 ips = {} fh = open("/var/log/nginx/access.log", "r").readlines() for line in fh: ip = line.split(" ")[0] if 6 < len(ip) &l

linux中shell变量$#,$@,$0,$1,$2的含义解释

比如脚本名称叫start.sh 输入参数三个: 1 2 3 运行test.sh 1 2 3后 $*为"1 2 3"(一起被引号包住) $@为"1" "2" "3"(分别被包住) $#为3(参数数量) linux中shell变量$#,$@,$0,$1,$2的含义解释:  变量说明:  $$  Shell本身的PID(ProcessID)  $!  Shell最后运行的后台Process的PID  $?  最后运行的命令的结束代码

linux中搭建awstats分析nginx日志

系统:centos 5.x   需要的软件包:awstats-7.3.tar.gz 1.修改nginx日志格式  代码如下 复制代码 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                   '$status $body_bytes_sent "$http_referer" '                   '"$http_u