最近在学习python,写了个脚本分析nginx日志,练练手。写得比较粗糙,但基本功能可以实现。

脚本功能:查找出当天访问次数前十位的IP,并获取该IP来源,并将分析结果发送邮件到指定邮箱。

实现前两项功能的脚本内容如下:

#!/usr/bin/env python
# coding:utf-8
# date:2015-12-10
# author:eivll0m import urllib
import json url = 'http://ip.taobao.com/service/getIpInfo.php?ip=' def ip_find(ip):
data = urllib.urlopen(url + ip).read()
datadict = json.loads(data)
for oneinfo in datadict:
if 'code' == oneinfo:
if datadict[oneinfo] == 0:
return datadict['data']['country'] + datadict['data']['region'] + datadict['data']['city'] + '\t' + datadict['data']['isp'] def sort_value(s):
d = sorted(s.iteritems(),key=lambda t:t[1],reverse=True)
return d if __name__ == '__main__':
with open('access.log') as f:
d = {}
for line in f:
field = line.split()
if field[0] not in d:
d.setdefault(field[0],[])
d[field[0]].append(field[0]) s = {}
for k in d:
s[k] = len(d[k])
s = sort_value(s)[0:10]
print '访问IP\t\t\t访问次数\t\tIP来源'
print '----------------------------------------------------------------------------'
for ip,con in s:
print str(ip) + '\t\t' + str(con) + '\t\t' + ip_find(ip)

执行效果如下:

加入发送邮件功能,最终版本:

#!/usr/bin/env python
# coding:utf-8
# date:2015-12-10
# author:eivll0m import urllib
import json
import time
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib url = 'http://ip.taobao.com/service/getIpInfo.php?ip=' def ip_find(ip):
data = urllib.urlopen(url + ip).read()
datadict = json.loads(data)
for oneinfo in datadict:
if 'code' == oneinfo:
if datadict[oneinfo] == 0:
return datadict['data']['country'] + datadict['data']['region'] + datadict['data']['city'] + '\t' + datadict['data']['isp'] def sort_value(s):
d = sorted(s.iteritems(),key=lambda t:t[1],reverse=True)
return d def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( \
Header(name, 'utf-8').encode(), \
addr.encode('utf-8') if isinstance(addr, unicode) else addr)) if __name__ == '__main__':
date_time = time.strftime('%Y-%m-%d %H:%M:%S')
from_addr = 'xxxxxx@163.com'
password = 'uoodfdnddaeqjq'
to_addr = 'xxxxxxx@qq.com'
smtp_server = 'smtp.163.com'
with open('access.log') as f:
d = {}
for line in f:
field = line.split()
if field[0] not in d:
d.setdefault(field[0],[])
d[field[0]].append(field[0]) s = {}
for k in d:
s[k] = len(d[k])
s = sort_value(s)[0:10]
text = date_time + '\n'
text = text + '\n' + u'访问IP\t\t\t访问次数\t\tIP来源'
text = text + '\n' + '----------------------------------------------------------------------------'
for ip,con in s:
text = text + '\n' + str(ip) + '\t\t' + str(con) + '\t\t' + ip_find(ip)
text = text + '\n' '----------------------------------------------------------------------------' msg = MIMEText(text, 'plain', 'utf-8')
msg['From'] = _format_addr(u'监控 <%s>' % from_addr)
msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
msg['Subject'] = Header(u'Nginx日志分析……', 'utf-8').encode() server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

执行脚本后收到邮件:

利用python分析nginx日志的更多相关文章

  1. 烂泥:利用awstats分析nginx日志

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 昨天把nginx的日志进行了切割,关于如何切割nginx日志,可以查看<烂泥:切割 ...

  2. 利用ELK分析Nginx日志生产实战(高清多图)

    本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意 ...

  3. 利用ELK分析Nginx日志

    本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意 ...

  4. 利用Hive分析nginx日志

    这里用到的nginx日志是网站的访问日志,比如日志格式: 180.173.250.74 - - [08/Jan/2015:12:38:08 +0800] "GET /avatar/xxx.p ...

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

    准备给ZABBIX用的. 统计接口访问字次,平均响应时间,4XX,5XX次数 以后可以再改进.. #!/usr/bin/env python # coding: utf-8 ############# ...

  6. Python分析NGINX LOG版本二

    不好意思,上一版逻辑有错误,(只分析了一次就没了) 此版改正. 按同事要改,作成传参数形式,搞定. #!/usr/bin/env python # coding: utf-8 ############ ...

  7. 利用python获取nginx服务的ip以及流量统计信息

    #!/usr/bin/python #coding=utf8 log_file = "/usr/local/nginx/logs/access.log" with open(log ...

  8. 使用Docker快速部署ELK分析Nginx日志实践(二)

    Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...

  9. 使用Docker快速部署ELK分析Nginx日志实践

    原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...

随机推荐

  1. 【原创教程】JavaScript详解之语法和对象

    JavaScript的好的想法:函数.弱类型.动态对象和一个富有表现力的对象字面量表示法. JavaScript的坏的想法:基于全局变量的编程模型.   好了,不管他是好的还是坏的,都是我的最爱,下面 ...

  2. xml--小结②XML的基本语法

    二.XML的基本语法1.文档声明:作用:用于标识该文档是一个XML文档.注意事项:声明必须出现在文档的第一行(之前连空行都不能有,也不能有任何的注释) 最简单的XML声明:<?xml versi ...

  3. MES项目中出现的一个事务嵌套的使用场景

    昨天在MES项目中,需要在业务逻辑的几个关键点记录错误信息,需要把错误信息写入数据表. 但是由于整个业务逻辑都是包在一个事务模板里面的 比如这样的: WhhTransactionTemplate tr ...

  4. [时间操作] C#DateFormat时间帮助类 (转载)

    点击下载 DateFormat.rar 主要功能如下 返回每月的第一天和最后一天 看下面代码吧 /// <summary> /// 类说明:时间操作类 /// 编 码 人:苏飞 /// 联 ...

  5. 一个自定义线程池的小Demo

    在项目中如果是web请求时候,IIS会自动分配一个线程来进行处理,如果很多个应用程序共享公用一个IIS的时候,线程分配可能会出现一个问题(当然也是我的需求造成的) 之前在做项目的时候,有一个需求,就是 ...

  6. java - import *

    以前看过很多视频,现在发觉很多讲师讲的有些地方是错的,在这里就说一下 import *,例如: import java.util.*的时候,表示的是将文件中使用到的类(而不是全部类)导入,例如在imp ...

  7. 完全步卸载oracle11g步骤

    完全 步 卸载oracle11g骤: . 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务.  . 开始->程序->Oracle - OraH ...

  8. web开发基础(同步更新中)

    1/Get与Post的区别 GET是我们都熟悉的.它用于请求网页文本.当你在浏览器输入harvard.edu,它会直接访问Harvard的web服务器,去GET /. 第二个最有名的是POST,它经常 ...

  9. 【转】iOS开发常用的第三方类库

    原文: http://blog.csdn.net/xiazailushang/article/details/9716043 在iOS开发中不可避免的会用到一些第三方类库,它们提供了很多实用的功能,使 ...

  10. html》meta标签笔记

    meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...