利用python分析nginx日志
最近在学习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日志的更多相关文章
- 烂泥:利用awstats分析nginx日志
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 昨天把nginx的日志进行了切割,关于如何切割nginx日志,可以查看<烂泥:切割 ...
- 利用ELK分析Nginx日志生产实战(高清多图)
本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意 ...
- 利用ELK分析Nginx日志
本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意 ...
- 利用Hive分析nginx日志
这里用到的nginx日志是网站的访问日志,比如日志格式: 180.173.250.74 - - [08/Jan/2015:12:38:08 +0800] "GET /avatar/xxx.p ...
- 一天,python搞个分析NGINX日志的脚本
准备给ZABBIX用的. 统计接口访问字次,平均响应时间,4XX,5XX次数 以后可以再改进.. #!/usr/bin/env python # coding: utf-8 ############# ...
- Python分析NGINX LOG版本二
不好意思,上一版逻辑有错误,(只分析了一次就没了) 此版改正. 按同事要改,作成传参数形式,搞定. #!/usr/bin/env python # coding: utf-8 ############ ...
- 利用python获取nginx服务的ip以及流量统计信息
#!/usr/bin/python #coding=utf8 log_file = "/usr/local/nginx/logs/access.log" with open(log ...
- 使用Docker快速部署ELK分析Nginx日志实践(二)
Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...
- 使用Docker快速部署ELK分析Nginx日志实践
原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...
随机推荐
- PhotoShop常用快捷键(1)
一.工具栏工具 移动工具 [V] 矩形.椭圆选框工具 [M] 套索.多边形套索.磁性套索 [L] 快速选择.魔棒工具[W] 裁剪工具 [C] 吸管.颜色取样器 [I] 修补.污点修复[J] 画笔工具 ...
- ASP.NET MVC 自我总结的便捷开发实例
前言 工作了这么久了,接触ASP.NET MVC已经很久了,一直都想总结一下它的一些实用的,经常使用的一些技巧,但是因为一直都很懒,也不想总结,所以一直都没有好好写出来,趁着现在有这种冲劲,那么就先把 ...
- Css3 兼容新旧浏览器
想想10年前用 IE6,火狐,遨游,谷歌等浏览器学习css时,那叫一个艰苦,各种hack各种抓耳挠腮,不是margin塌陷就是元素飞了... 当前借着css3这个东风,如果各大浏览器厂商能统一一下,也 ...
- JavaScript的垃圾回收
来自MDN,Memory Management 简介 在底层语言中,比如C,有专门的内存管理机制,比如malloc() 和 free().而Javascript是有垃圾回收(garbage colle ...
- Android开发手记(22) 传感器的使用
Android的传感器主要包括八大传感器,他们分别是:加速度传感器(accelerometer).陀螺仪(gyroscope).方向传感器(orientation).磁力传感器(magnetic fi ...
- 三步走起 提升 iOS 审核通过率 上篇
<ignore_js_op> Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明 ...
- [学习笔记]设计模式之Command
为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 在上篇Chain of Responsibility(职责链)模式笔记中,我们学习了一种行为型设计模式.今天,我们继续这一主题,来学习 ...
- UEditor配置图片上传
最近项目中需要用到一个图文编辑器功能,因为之前的kingeditor功能过于简陋,所以决定换成Ueditor,前端已经配置好了,这个是后台配置 1,确定前台已经配置好了 2,将编辑器的插件包下载下来, ...
- 【转】深入 char * ,char ** ,char a[ ] ,char *a[] 内核
原文出处:http://blog.csdn.net/daiyutage/article/details/8604720 C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了 ...
- ServletContext全局变量初始化
Java部分 package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.ser ...