python 进行nginx日志分析(分析出异常刷新某API接口的IP)

发现有IP对我们API进行大量的数量采集,所以写这个脚本来获取哪些IP只访问单一接口,却不访问其它接口,一般这样的行为,是异常的。
分析前端负载nginx的日志,日志格式如下:

114.249.4.96 - - [15/Jan/2016:23:59:47 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 48 "-" "-" "-"
222.128.172.215 - - [15/Jan/2016:23:59:47 +0800] "POST /api2/button_log/ HTTP/1.1" 200 48 "-" "-" "-"
110.72.182.177 - - [15/Jan/2016:23:59:47 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 48 "-" "-" "-"
58.63.7.92 - - [15/Jan/2016:23:59:48 +0800] "POST /api2/getgoodsdetail/ HTTP/1.1" 200 877 "-" "-" "-"
117.177.160.218 - - [15/Jan/2016:23:59:48 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 82 "-" "-" "-"
117.177.160.218 - - [15/Jan/2016:23:59:48 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 82 "-" "-" "-"
163.142.55.76 - - [15/Jan/2016:23:59:48 +0800] "POST /api2/getuserinfo/ HTTP/1.1" 200 546 "-" "-" "-"
114.112.89.34 - - [15/Jan/2016:23:59:48 +0800] "POST /api2/getgoodslist/ HTTP/1.1" 200 9532 "-" "-" "-"
58.61.225.110 - - [15/Jan/2016:23:59:49 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 82 "-" "-" "-"
114.244.195.163 - - [15/Jan/2016:23:59:49 +0800] "POST /api2/getgoodslist/ HTTP/1.1" 200 47834 "-" "-" "-"
114.244.195.163 - - [15/Jan/2016:23:59:49 +0800] "POST /api2/getgoodslist/ HTTP/1.1" 200 47834 "-" "-" "-"
114.112.89.34 - - [15/Jan/2016:23:59:49 +0800] "POST /api2/getgoodslist/ HTTP/1.1" 200 9532 "-" "-" "-"
125.39.170.239 - - [15/Jan/2016:23:59:49 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 30 "-" "-" "-"
110.84.169.57 - - [15/Jan/2016:23:59:50 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 48 "-" "-" "-"
42.81.46.142 - - [15/Jan/2016:23:59:50 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 48 "-" "-" "-"
110.84.169.57 - - [15/Jan/2016:23:59:50 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 82 "-" "-" "-"
117.136.40.148 - - [15/Jan/2016:23:59:50 +0800] "POST /api2/getgoodslist/ HTTP/1.1" 200 1024 "-" "-" "-"
117.12.243.251 - - [15/Jan/2016:23:59:50 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 48 "-" "-" "-"
117.12.243.251 - - [15/Jan/2016:23:59:50 +0800] "POST /api2/realtimetrack/ HTTP/1.1" 200 82 "-" "-" "-"
 
python分析代码:
#!/usr/bin/env python
#coding:utf8
__author__ = '戴儒锋'
"""
检测nginx日志的访问IP是是否有程序来抓取接口信息

规则:程序分析  只访问getgoodslist 接口,而不访问其它的接口IP
"""

log_path = '/home/logs/nginx/access.log'

#定义IP访问每个URL的次数的空字典,如{'10.0.0.1':{'/api2/getgoodslist':15}}
ip_info = {}
with open(log_path,'r') as f:
    for line in f.readlines():
        #获取IP地址
        ip = line.split()[0]
        #获取访问接口URL
        url = line.split()[6]
        #如果字典里没有该IP,则添加该IP为KEY值,URL为二级字典KEY,访问数=1
        #如果有该IP但在二级字典中没有该URL,则该URL设为二级字典KEY,访问数为1
        #如果有该IP,且在二级字典中有该URL,则把该URL的值+1
        if ip not in ip_info:
            ip_info[ip] = {url:1}
        else:
            if url not in ip_info[ip]:
                ip_info[ip][url] = 1
            else:
                ip_info[ip][url] += 1

#遍历结果,把IP只访问小于3个接口,并且访问getgoodslist接口超过100次的打印出来  

for ip,value in ip_info.items():
    if len(value) < 3 and value.get('/api2/getgoodslist/',0) > 100:
        print "IP:%s    URL-COUNT:%s" %(ip,value)
 
分析结果:

IP:58.63.7.92                URL-COUNT:{'/api2/getgoodsdetail/': 3383, '/api2/getgoodslist/': 550}
IP:58.63.4.71                URL-COUNT:{'/api2/getgoodsdetail/': 4499, '/api2/getgoodslist/': 275}
IP:118.122.120.146      URL-COUNT:{'/api2/getgoodslist/': 443}
IP:114.244.195.163      URL-COUNT:{'/api2/getgoodslist/': 568}
IP:124.72.23.174          URL-COUNT:{'/api2/getgoodslist/': 132}
IP:183.30.79.59            URL-COUNT:{'/api2/getgoodslist/': 322, '/api2/realtimetrack/': 6}
IP:61.140.50.120          URL-COUNT:{'/api2/getgoodslist/': 1402}
IP:171.221.25.108        URL-COUNT:{'/api2/getgoodslist/': 1136}

时间: 2024-10-11 06:35:36

python 进行nginx日志分析(分析出异常刷新某API接口的IP)的相关文章

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="alli

利用awstats分析nginx日志

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

Linux下nginx日志统计的研究

是由于看组内大神@沈洲大神做的浏览器统计,一时我也想练练,于是今天一天没有出出(当然还是得吃饭的)- 思路     首先是写个自动定时任务,在每天夜里23:55的时候运行脚本,脚本做日志切割和转成需要的数据json    制作访问接口可以获取分析后的json数据,比如浏览器型号,系统型号    根据接口画出饼状图 定时任务-解析日志 写一个以每天23:55执行的shell,大概内容如下: # /bin/bash # 移动数据日志为lastcp -f /home/access.log /home/

使用Elasticsearch、Logstash、Kibana与Redis(作为缓冲区)对Nginx日志进行收集(转)

摘要 使用Elasticsearch.Logstash.Kibana与Redis(作为缓冲区)对Nginx日志进行收集 版本 elasticsearch版本: elasticsearch-2.2.0 logstash版本: logstash-2.2.2 kibana版本: kibana-4.3.1-darwin-x64 jdk版本: jdk1.8.0_65 内容 目标架构 准备工作 参考以下文章安装好ELK与Redis ELK Stack (1) -- ELK + Redis安装 以CAS系列中

一天,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

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

nginx日志分析利器GoAccess

面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记忆能力以外,唯一的作用只有装A或者装C了. 对于nginx日志分析,有很多工具,衡量好坏的标准大概就是三快:安装快,解析快,上手快.满足这三点的goaccess确实是居家必备良药. 话说这个标题其实有点委屈GoAccess了,它是一个日志分析工具,并不只是为nginx使用的.你也可以用它来分析apa

GoAccess:nginx日志分析利器

面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记忆能力以外,唯一的作用只有装A或者装C了. 对于nginx日志分析,有很多工具,衡量好坏的标准大概就是三快:安装快,解析快,上手快.满足这三点的goaccess确实是居家必备良药. 话说这个标题其实有点委屈GoAccess了,它是一个日志分析工具,并不只是为nginx使用的.你也可以用它来分析apa

linux中nginx日志分析利器GoAccess使用方法

面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记忆能力以外,唯一的作用只有装A或者装C了. 对于nginx日志分析,有很多工具,衡量好坏的标准大概就是三快:安装快,解析快,上手快.满足这三点的goaccess确实是居家必备良药. 话说这个标题其实有点委屈GoAccess了,它是一个日志分析工具,并不只是为nginx使用的.你也可以用它来分析apa