使用python获取交换机syslog日志并使用jQuery在html上展示
需求
现网有部分pop点独立于海外,无法发送日志给内网日志服务器,同时最近网内有比较重要割接,所以临时写一个脚本来展示网内日志
思路
使用socket接收syslog数据,udp 514,数据部分格式化后写入js文档,html调用js文档来实现日志可视化
效果
python代码
import socket,re,os
def syslog(data):
try:
data = data.replace('\"','\'')
pri = re.findall('\d+',data)[0]
pri = int(pri)
level = re.findall('<\d+>',data)[0]
div_class = 'debug'
if pri%8 == 0:
data = data.replace(level,'emerg ')
div_class = 'error'
elif pri%8 == 1:
data = data.replace(level,'alert ')
div_class = 'error'
elif pri%8 == 2:
data = data.replace(level,'crit ')
div_class = 'error'
elif pri%8 == 3:
data = data.replace(level,'error ')
div_class = 'error'
elif pri%8 == 4:
data = data.replace(level,'warning ')
div_class = 'warning'
elif pri%8 == 5:
data = data.replace(level,'notice ')
elif pri%8 == 6:
data = data.replace(level,'info ')
elif pri%8 == 7:
data = data.replace(level,'debug ')
except Exception as e:
data = 'error:%s'%e
div_class = 'error'
return data,div_class
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
address = ('192.168.10.60',514)
s.bind(address)
while True:
data,address = s.recvfrom(10240)
data = data.decode(encoding='utf8')
data,div_class = syslog(data)
print(data)
with open ('./log.js','a') as f:
f.write(''' \n$('#log').prepend("<div class = '%s'>%s</div>")'''%(div_class,data.rstrip()))
前端 代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf8">
<meta http-equiv="Refresh" content="60" >
<title>syslog</title>
<script src="jquery-3.6.0.slim.min.js"></script>
<style>
*{margin:0; padding: 0;}
.debug{background-color: rgb(175, 175, 248);}
.warning{background-color:yellow;}
.error{background-color: red;}
</style>
</head>
<body>
<div id="log">
</div>
<script src="log.js">
</script>
</body>
</html>
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。