python 实现简单的SYSLOG服务器,并写入MYSQL数据库
- 格式:doc
- 大小:102.00 KB
- 文档页数:3
import os,socket,sys,time,string
import MySQLdb
bufsize=1500
port=514
syslog_serverty={ 0:"emergency",
1:"alert",
2:"critical",
3:"error",
4:"warning",
5:"notice",
6:"info",
7:"debug"
}
syslog_facility={ 0:"kernel",
1:"user",
2:"mail",
3:"daemaon",
4:"auth",
5:"syslog",
6:"lpr",
7:"news",
8:"uucp",
9:"cron",
10:"authpriv",
11:"ftp",
12:"ntp",
13:"security",
14:"console",
15:"cron",
16:"local 0",
17:"local 1",
18:"local 2",
19:"local 3",
20:"local 4",
21:"local 5",
22:"local 6",
23:"local 7"
}
try:
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sock.bind(("0.0.0.0",port))
except:
print("error bind")
sys.exit(1)
sql_em="insert into emergency values(%s,%s,%s,%s,%s,%s)"
sql_al="insert into alert values(%s,%s,%s,%s,%s,%s)"
sql_cr="insert into critical values(%s,%s,%s,%s,%s,%s)"
sql_er="insert into error values(%s,%s,%s,%s,%s,%s)"
sql_wa="insert into warning values(%s,%s,%s,%s,%s,%s)"
conn=MySQLdb.connect(host="127.0.0.1",db="syslog",port=18888,user="root ",passwd="cinda")
curs=conn.cursor()
#f=file("syslog.txt","w")
print("----------------syslog is start----------------\n")
try:
while1:
try:
data,addr=sock.recvfrom(bufsize)
#print data,addr
syslog=str(data)
n=syslog.find('>')
serverty=string.atoi(syslog[1:n])&0x0007
facility=(string.atoi(syslog[1:n])&0x03f8)>>3
syslog_msg=syslog[26:]
dev_name=syslog_msg[:syslog_msg.find(' ')]
dev_msg=syslog_msg[syslog_msg.find(' '):]
param=(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()),dev_na me,addr[0],syslog_facility[facility],syslog_serverty[serverty],dev_msg)
if serverty==0:
curs.execute(sql_em,param)
print syslog_msg
elif serverty==1:
curs.execute(sql_al,param)
print syslog_msg
elif serverty==2:
curs.execute(sql_cr,param)
print syslog_msg
elif serverty==3:
curs.execute(sql_er,param)
print syslog_msg
elif serverty==4:
curs.execute(sql_wa,param)
print syslog_msg
mit()
#print dev_msg,time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) #print
syslog_serverty[serverty],syslog_facility[facility],syslog[26:] #f.writelines(syslog_serverty[serverty]+"
"+syslog_facility[facility]+" "+syslog[26:]+'\n')
except socket.error:
pass
except KeyboardInterrupt:
curs.close()
conn.close()
print("------------------syslogd stop-------------\n")
print"good bye"
sys.exit()
#f.close