Python 脚本学习(三),日志分析脚本,文件差异对比,HTTP状态检测

日志分析脚本:

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 in range(24)]
    values = [time.get(key) for key in keys]
 
    chart.x_labels = [x.split()[1for 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)
 
= difflib.HtmlDiff()
= d.make_file(text1_lines,text2_lines)
print(a)

输出结果:

./filediff.py aa1.txt aa2.txt >diff.html

Python 脚本学习(三),日志分析脚本,文件差异对比,HTTP状态检测

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:
        = dns.resolver.query(domain,'A')
    except e:
        print("dns resolver error:" + str(e))
        return
 
    for in A.response.answer:
        for 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})
 
        = 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: ')
= dns.resolver.query(domain,'A')
for in A.response.answer:
    for 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 in MX:
    print('MX preference =', i.preference, 'mail exchanger = ', i.exchange)


上一篇:Docker for Windows 10应用进入测试阶段


下一篇:西部数据个人云存储 引领全民数字化生活