如果想看看Nginx有多少IP访问量,有哪些国家访问,并显示IP地址的归属地分布,python可以结合使用高春辉老师ipip.net【免费版 IP 地址数据库】,Shell可以使用nali,我这边主要使用python语言来实现需求,并将查询结果以邮件形式发送,也是为了学习和回顾python语言。很感谢高春辉老师提供的免费版IP地址数据库。

一、Ningx日志如下:

41.42.97.104 - - [26/Feb/2015:03:35:40 -0500] "GET /root/ HTTP/1.1" 301 20 "http://baibai.123.com/09" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - 0.562
41.42.97.104 - - [26/Feb/2015:03:35:41 -0500] "GET /crossadkla.xml HTTP/1.1" 304 0 "https://baibai.123.com/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - 0.000
99.122.189.203 - - [26/Feb/2015:03:35:42 -0500] "GET /root/ HTTP/1.1" 301 20 "http://baibai.123.com/11" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - 0.562
99.122.189.203  - - [26/Feb/2015:03:35:44 -0500] "GET /crossadkla.xml HTTP/1.1" 304 0 "https://baibai.123.com/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - 0.000
99.122.189.203  - - [26/Feb/2015:03:35:44 -0500] "GET /crossadkla.xml HTTP/1.1" 304 0 "https://baibai.123.com/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36" - 0.000

二、下载 免费版 IP 地址数据库

 #wget  http://s.qdcdn.com/17mon/17monipdb.zip#unzip  17monipdb.zip

三、IP库常见问题FAQ

示例代码:

import os
from ipip import IP
from ipip import IPXIP.load(os.path.abspath("mydata4vipday2.dat"))
print IP.find("118.28.8.8")IPX.load(os.path.abspath("mydata4vipday2.datx"))
print IPX.find("118.28.8.8")

执行输出:

中国  天津  天津      鹏博士
中国  天津  天津      鹏博士   39.128399   117.185112  Asia/Shanghai   UTC+8   120000

IP库guihub地址:https://github.com/17mon/python

四、Python 统计代码

#encoding=utf8import re,sys,os,csv,smtplib
from ipip import IP
from ipip import IPX
from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from optparse import OptionParser
reload(sys)
sys.setdefaultencoding('utf-8')
print sys.getdefaultencoding()nginx_log_path="/app/nginx/logs/apptest_www.access.log"
pattern = re.compile(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
def stat_ip_views(log_path):ret={}f = open(log_path, "r")for line in f:match = pattern.match(line)if match:ip=match.group(0)if ip in ret:views=ret[ip]else:views=0views=views+1ret[ip]=viewsreturn retdef run():ip_views=stat_ip_views(nginx_log_path)max_ip_view={}fileName='out.csv'f=open('out.csv','w+')b = 'IP,国家,访问数总数'print >> f,bfor ip in ip_views:IP.load(os.path.abspath("17monipdb.dat"))count=IP.find("%s"% (ip))conut_s=count.split()countery=conut_s[0]views=ip_views[ip]c = '%s,%s,%s' %(ip,countery,views)print >> f,cif len(max_ip_view)==0:max_ip_view[ip]=viewselse:_ip=max_ip_view.keys()[0]_views=max_ip_view[_ip]if views>_views:max_ip_view[ip]=viewsmax_ip_view.pop(_ip)print "IP:", ip, "国家:", countery, "访问数:", views print "总共有多少IP:", len(ip_views)print "最大访问IP数:", max_ip_viewg = ""d = '总共有多少IP:%s' %(len(ip_views))e = '最大访问IP数:%s' %(max_ip_view)print >> f,gprint >> f,dprint >> f,edef sendMail(html,emailaddress,mailSubject,from_address="other@test.com"):mail_list=emailaddress.split(",")msg=MIMEMultipart()msg['Accept-Language']='zh-CN'msg['Accept-Charset']= 'ISO-8859-1,utf-8'msg['From']=from_addressmsg['to']=";".join(mail_list)msg['Subject']=mailSubject.decode("utf-8")txt=MIMEText(html,'html','utf-8')txt.set_charset('utf-8')msg.attach(txt)file=MIMEBase('application', 'octet-stream')file.set_payload(open(fileName, 'rb').read())encoders.encode_base64(file)file.add_header('Content-Disposition', 'p_w_upload; filename="%s"' % os.path.basename(fileName))msg.attach(file)smtp=smtplib.SMTP("mail.test.com")smtp.sendmail(msg["From"],mail_list,msg.as_string())smtp.close()if __name__ == '__main__':run()fileName='out.csv'cmd = 'iconv -f UTF8 -t GB18030 %s -o %s.bak && mv %s.bak %s' %(fileName,fileName,fileName,fileName)os.system(cmd)Content= 'Dear ALL: <br> &nbsp;&nbsp; 附件内国家IP访问数据分析统计,请查收!  <br> &nbsp;&nbsp; 如有任何问题,请及时与我联系!'Subject = '[分析]国家创建数据IP分析统计'sendMail(html=Content,emailaddress='kuangl@test.com',mailSubject=Subject)

五、执行结果

utf-8
IP: 41.42.97.104 国家: 埃及 访问数: 2
IP: 99.122.189.203 国家: 美国 访问数: 3
总共有多少IP: 2
最大访问IP数: {'99.122.189.203': 3}

六、邮件发送结果

转载于:https://blog.51cto.com/kling/1615505

Python基于nginx访问日志并统计IP访问量相关推荐

  1. 使用cat,awk和sort命令从nginx访问日志中统计user-agent类型

    业务场景描述如下: 我有一个Nginx的web服务器,需要从统计日志中统计有哪些类型的设备终端和浏览器访问了我的网站. 访问日志中的每条记录是这样的: 使用下面的命令得到user-agent所在的字段 ...

  2. 使用Nginx访问日志统计PV和UV

    一个网站当用户量增大时候,不可避免有统计pv和uv的需求. UV(Unique Visitor):独立访客,以cookie为依据区分不同访客,UV计算一天之内(00:00-24:00),访问网站的访客 ...

  3. nginx 访问日志分析工具 goacess

    2019独角兽企业重金招聘Python工程师标准>>> 20150702 nginx 访问日志分析 goacess 1.安装GoAccess需要一些系统支持库 yum install ...

  4. Nginx访问日志分析

    1.首先说明Nginx日志存放在系统的哪个位置,可以使用下列命令: 找到*/nginx/logs/access.log这个关键路径,就是Nginx的访问日志的位置.(其中*代表你电脑nginx文件夹前 ...

  5. Nginx访问日志、日志切割、静态文件不记录日志和过期时间

    2019独角兽企业重金招聘Python工程师标准>>> 11月27日任务 12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间 1 ...

  6. 12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间

    - 12.10 Nginx访问日志 - 12.11 Nginx日志切割 - 12.12 静态文件不记录日志和过期时间# 12.10 Nginx访问日志 - 日志的格式- vim /usr/local/ ...

  7. Nginx 访问日志轮询切割

    Nginx 访问日志轮询切割脚本 -------------------------------------------------------------------- 注:如果你对python感兴 ...

  8. NGINX访问日志和错误日志

    Logs are very useful to monitor activities of any application apart from providing you with valuable ...

  9. Nginx 访问日志增长暴增出现尖刀的详细分析

    前言:          Nginx日志里面Mobileweb_access.log增长特别大,一天上百兆,将近100W的访问记录,按照我们目前的规模,热点用户才500个左右,就算人人用手机app访问 ...

最新文章

  1. python知识合集
  2. 营销网站SEO优化:前方优化难点出没!
  3. Linux日志系统-07:案例3-rsyslog+logrotate实现SSH的日志滚动
  4. 腾讯年度性爱报告被曝,最后一条数据我羞愧了!
  5. 限界分支法:01背包问题,优先级队列(包含解的追踪)
  6. js中关于array的slice和sort方法(转自JavaEye)
  7. 数据库MySQL/mariadb知识点——数据类型
  8. Java限流之 —— Guawa
  9. 苹果将允许iPhone直接使用NFC接受信用卡付款
  10. Java中Spring中的方法加上try catch后事务管理器失效无法回滚的情况
  11. NVIDIA-cuda-cudnn下载地址
  12. HTML加载图片跨域
  13. MacOS - 快捷键以及各种操作汇总
  14. 国外广告联盟前期需要准备的事情
  15. Python数据可视化案例:分析微信公众号数据
  16. 微信小程序连接WiFi
  17. mybatis返回插入数据的自增长id
  18. C++ Primer Plus 第六版第二章编程练习答案
  19. 陈吉平-阿里巴巴离职DBA在35岁总结的职业生涯
  20. 汾阳市教师招聘中职计算机真题,2019年山西省吕梁市汾阳市中小学语文教师招聘/编制考试历年真题试卷及答案解析...

热门文章

  1. 使用Docker来运行WebApp
  2. poj2464扫描线好题,树状数组解法
  3. 数据库事务处理差异:可提交读和重复读区别
  4. Drools的HelloWord例子
  5. atan与atan2的区别
  6. javascript 正则表达式-零宽断言
  7. 中秋应景诗词歌赋赏析
  8. c++:json字符串拼接,json对象组装
  9. C++中 *(指针引用)与*(指针)的区别
  10. Opencv获取身份证号码区域