日志分析脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#!/usr/local/python27/bin/python2.7 # coding=utf-8 import pygal
import re
import os
import sys
import datetime
BASE_PATH = "./"
def extract(path):
ip = dict ()
time = dict ()
status = dict ()
version = dict ()
method = dict ()
with open (path) as f:
for line in f:
matched = reobj.search(line)
if not matched:
continue
log_obj = matched.groupdict()
if log_obj.get( "ip" ) not in ip.keys():
ip[log_obj.get( "ip" )] = 0
ip[log_obj.get( "ip" )] + = 1
origin_time = log_obj.get( "time" )
if not origin_time:
continue
dt = datetime.datetime.strptime(origin_time, '%d/%b/%Y:%H:%M:%S' )
dt_s = dt.strftime( '%Y-%m-%d %H' )
if dt_s not in time.keys():
time[dt_s] = 0
time[dt_s] + = 1
if log_obj.get( 'status' ) not in status.keys():
status[log_obj.get( 'status' )] = 0
status[log_obj.get( 'status' )] + = 1
if log_obj.get( 'version' ) not in version.keys():
version[log_obj.get( 'version' )] = 0
version[log_obj.get( 'version' )] + = 1
if log_obj.get( "method" ) not in method.keys():
method[log_obj.get( "method" )] = 0
method[log_obj.get( "method" )] + = 1
return ip,time,status,version,method
def make_path(dt):
path = os.path.join(BASE_PATH,dt)
if not os.path.exists(path):
os.makedirs(path)
return path
def time_graph(time,dt):
chart = pygal.Bar()
chart.title = "Access of %s" % dt
keys = [ '%s %2d' % (dt,x) for x in range ( 24 )]
values = [time.get(key) for key in keys]
chart.x_labels = [x.split()[ 1 ] for x in keys]
chart.add( "Access" ,values)
path = make_path(dt)
chart.render_to_file(os.path.join(path, "time.svg" ))
def status_graph(status,dt):
chart = pygal.Pie()
chart.title = "Status of %s" % dt
for k,v in status.items():
chart.add(k,v)
path = make_path(dt)
chart.render_to_file(os.path.join(path, "status.svg" ))
def version_graph(vsersion,dt):
chart = pygal.Pie()
chart.title = "versions of %s" % dt
for k,v in version.items():
chart.add(k,v)
path = make_path(dt)
chart.render_to_file(os.path.join(path, "version.svg" ))
def method_graph(method,dt):
chart = pygal.Pie()
chart.title = "methods of %s" % dt
for k,v in method.items():
chart.add(k,v)
path = make_path(dt)
chart.render_to_file(os.path.join(path, "method.svg" ))
if __name__ = = '__main__' :
log_file = sys.argv[ 1 ]
dt = sys.argv[ 2 ]
ip,time,status,version,method = extract(log_file)
time_graph(time,dt)
status_graph(status,dt)
version_graph(version,dt)
method_graph(method,dt)
|
文件差异对比:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#!/usr/local/python27/bin/python2.7 import difflib
import sys
try :
textfile1 = sys.argv[ 1 ]
textfile2 = sys.argv[ 2 ]
except e:
print ( "Error:" + str (e))
sys.exit()
def readfile(filename):
try :
fileHandle = open (filename, 'rb' )
text = fileHandle.read().splitlines()
fileHandle.close()
return text
except IOError as a:
print ( "Error:" + str (a))
sys.exit()
if textfile1 = = " " or textfile2==" ":
print ( 'Usage:filediif.py filename1 filename2' )
sys.exit()
text1_lines = readfile(textfile1)
text2_lines = readfile(textfile2)
d = difflib.HtmlDiff()
a = d.make_file(text1_lines,text2_lines)
print (a)
|
输出结果:
./filediff.py aa1.txt aa2.txt >diff.html
HTTP访问脚本
1
2
3
4
5
6
|
#!/usr/local/python27/bin/python2.7 import urllib2
req = urllib2.urlopen( 'http://weather.yahooapis.com/forecastrss?w=2151849&u=c' )
print (req.read())
|
HTTP状态检测—适用于单域名多主机DNS负载均衡场景
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#!/usr/local/python27/bin/python2.7 import dns.resolver
import os
import httplib
iplist = []
appdomain = 'www.hello.com'
def get_iplist(domain = ""):
try :
A = dns.resolver.query(domain, 'A' )
except e:
print ( "dns resolver error:" + str (e))
return
for i in A.response.answer:
for j in i.items:
iplist.append(j.address)
return True
def checkip(ip):
checkurl = ip + ":80"
getcontent = ""
httplib.socket.setdefaulttimeout( 5 )
conn = httplib.HTTPConnection(checkurl)
try :
conn.request( "GET" , "/" ,headers = { "Host" : appdomain})
r = conn.getresponse()
getcontent = r.read( 15 )
finally :
if getcontent = = "<!DOCTYPE html>" :
print (ip + " [OK]" )
else :
print (ip + " [Error]" )
if __name__ = = "__main__" :
if get_iplist(appdomain) and len (iplist)> 0 :
for ip in iplist:
checkip(ip)
else :
print ( "dns resolver error" )
|
DNS解析脚本
1
2
3
4
5
6
7
8
|
#!/usr/local/python3/bin/python3 import dns.resolver
domain = input ( 'please input an domain: ' )
A = dns.resolver.query(domain, 'A' )
for i in A.response.answer:
for j in i.items:
print (j.address)
|
MX记录解析
1
2
3
4
5
6
7
|
#!/usr/local/python3/bin/python3 import dns.resolver
domain = input ( 'please input an domain: ' )
#这里接收两个参数的传入,需要解析的域名,解析的记录类型; MX = dns.resolver.query(domain, 'MX' )
for i in MX:
print ( 'MX preference =' , i.preference, 'mail exchanger = ' , i.exchange)
|
本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1695204