Python 实现轻量级 Syslog 服务器:从搭建到日志过滤
本文介绍使用 Python socket 模块构建轻量级 Syslog 服务器的完整过程。通过 UDP 协议接收交换机及 Linux 系统的 syslog 日志,按 IP 和时间分文件存储。文章详细解析了处理接收数据中 \x00 空字符的问题,并提供了交换机和 Linux rsyslog 的配置示例,为后续 Web 展示与异常告警奠定基础。
交换机等网络设备通常支持通过 syslog 协议将本地日志传输至后端服务器,以实现集中查看和存储,这主要受限于设备自身的存储容量。操作系统同样支持 syslog 协议。目前网络上关于日志集中管理的方案多倾向于 ELK,但经评估,ELK 部署复杂且维护成本较高。因此,本文旨在利用 Python 的 socket 模块实现一个轻量级的 syslog 服务器,将接收到的日志按照客户端 IP 和时间戳存储为独立文件,以便于查阅。后续可结合 Python Web 框架,通过 Web 界面展示接收到的信息,并支持对日志进行过滤,在发现异常时及时触发告警处理。
1. 首先实现一个 Syslog 日志服务器,使用 Python 实现这一过程非常简单。
import socket
from datetime import date
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.bind(('0.0.0.0',514))
while True:
rec_msg, addr = udp.recvfrom(2048)
client_ip, client_port =addr
msg = client_ip + " " + rec_msg.rstrip(b'\x00').decode('utf-8','ignore')
print('msg from client:', msg)
filename = client_ip + '_' + str(date.today()) + ".log"
with open(filename,'a+',encoding = "utf-8") as f:
f.write( msg + "\n") 2. 先编写一个发送 Syslog 的客户端程序,用于测试服务器端是否正常运行。
import socket
from datetime import datetime
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print(socket.AF_INET, socket.SOCK_DGRAM)
now = str(datetime.today())[:19]
ack_msg= now + ' hello,udp client '
addr = ('192.168.8.95',514)
udp.sendto(ack_msg.encode('utf8'),addr)3. 在交换机上配置将日志发送到 Syslog 服务器。
infor-center localhost 192.168.2.1
此时发现 Syslog 服务器可以接收到消息,但在 VS Code 中点击文件时,提示

使用 VS Code 的内置编辑器强行打开后,发现每行记录后面都带有一个 null 字样。

让程序输出接收到的 UDP 消息,发现 rec_msg 是一个 bytes 类型,且最后带有 \x00 的字样。
<class 'bytes'> b'<134>Aug 17 10:25:57 2022 ACCSW-2.11 %%10SHELL/6/SHELL_CMD: -Line=vty5-IPAddr=192.168.8.68-User=thomas; Command is dis cur\x00'
因此,在前面的程序中,将 \x00 从右侧去除,保存的文本就正常了。
4. 配置 Linux 服务器发送 Syslog 日志到服务器
Linux 的大部分发行版内置了 rsyslog 服务,修改 /etc/rsyslog.conf 文件,将
module(load="imudp") # needs to be done just once input(type="imudp" port="514")
这两行的注释去掉,让其启用。
然后在末尾添加
*.emerg,*.alert,*.crit,*.err,*.warning,*.notice,*.info,*.debug @192.168.2.1
然后重启 rsyslog 服务。systemctl restart rsyslog
5. 这时在服务器上就可以看到日志了。

到此这篇关于 Python 实现 Syslog 服务器的文章就介绍到这了,更多相关 Python Syslog 服务器内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









