python实现syslog接受日志数据源代码

Syslog 是一种标准的日志记录协议,用于传输日志消息。它通常用于集中收集不同系统和设备的日志数据。本文将展示如何使用Python编写一个Syslog服务器,接受并处理Syslog日志消息。

  1. 环境准备
    在开始之前,请确保你的系统上已经安装了Python。你可以通过以下命令检查是否已安装Python:

bash
python3 --version
如果还没有安装Python,请参考官方指南进行安装。

  1. 安装依赖库
    我们将使用socket模块来创建一个UDP服务器,同时使用logging模块来处理日志消息。由于这些模块是Python的标准库,无需额外安装。

  2. 编写Syslog服务器
    我们将创建一个简单的UDP服务器来接收Syslog消息,并将这些消息记录到本地文件中。以下是实现代码:
    import socket
    import logging
    from logging.handlers import RotatingFileHandler

设置日志记录器

logger = logging.getLogger(‘SyslogServer’)
logger.setLevel(logging.INFO)
handler = RotatingFileHandler(‘syslog.log’, maxBytes=1000000, backupCount=5)
formatter = logging.Formatter(‘%(asctime)s - %(message)s’)
handler.setFormatter(formatter)
logger.addHandler(handler)

def start_syslog_server(host=‘0.0.0.0’, port=514):
# 创建一个UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((host, port))

print(f'Syslog server started on {host}:{port}')while True:# 接收数据data, addr = sock.recvfrom(1024)message = data.decode('utf-8')# 记录日志消息logger.info(f'{addr[0]}: {message}')

if name == “main”:
start_syslog_server()

设置日志记录器:我们使用logging模块设置了一个日志记录器,将日志消息写入syslog.log文件。RotatingFileHandler用于自动轮转日志文件,以避免单个日志文件过大。

创建UDP套接字:使用socket.socket()创建一个UDP套接字,并绑定到指定的主机和端口(默认是0.0.0.0:514)。

接收数据:使用recvfrom()方法接收来自客户端的消息,每次最多接收1024字节的数据。

记录日志消息:将接收到的日志消息记录到文件中,格式为<客户端IP>: <日志消息>。

  1. 运行Syslog服务器
    将上述代码保存为syslog_server.py文件,并在终端中运行:
    python3 syslog_server.py
    服务器启动后,它将监听UDP 514端口,并记录接收到的所有Syslog消息。

测试Syslog服务器
你可以使用Netcat(nc)或其他工具向Syslog服务器发送测试消息
echo “<13>Test syslog message” | nc -u -w1 127.0.0.1 514

下面贴出实际项目中我在使用的案例:

logger = generate_info_log(‘syslog_rec’, ‘INFO’)
lock = multiprocessing.Manager().Lock()
lock_sql = multiprocessing.Manager().Lock()

class MyServer(socketserver.BaseRequestHandler):
def handle(self):
request, addr = self.rec_info()
self.handle_info(request, addr)

def rec_info(self):request = self.request[0]addr = self.client_address[0]return request, addrdef handle_info(self, request, client_address):try:original_data = request.decode('UTF-8', 'ignore').strip(b'\x00'.decode())#logger.info(original_data)if 'LAC processor_server: ' in original_data:original_data = request.decode('gb2312', 'ignore')except:original_data = ''if client_address and original_data:data_dict = {"client_address": client_address,"original_data": original_data}sq.lpush("syslog_queue", json.dumps(data_dict))# sq.ltrim("syslog_queue", 0, 1000000)

class Crawl():
def run(self):
print(‘crawl’)
try:
self.get_device_syslog()
except Exception as e:
pass

def get_device_syslog(self):HOST = "0.0.0.0"PORT = 514udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)udp_socket.bind((HOST, PORT))while True:recv_data = udp_socket.recvfrom(8192)request = recv_data[0]addr = recv_data[1]gevent.spawn(self.receive_info(request, addr))def receive_info(self, request, client_address):global data_queuetry:original_data = request.decode('UTF-8', 'ignore').strip(b'\x00'.decode())if 'LAC processor_server: ' in original_data:original_data = request.decode('gb2312', 'ignore')except:original_data = ''client_address = client_address[0]if client_address and original_data:data_dict = {"client_address": client_address,"original_data": original_data}sq.lpush("syslog_queue", json.dumps(data_dict))sq.ltrim("syslog_queue", 0, 1000000)

将上述业务代码替换为你的项目中实际的业务逻辑即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

批量视频创作:PlugLink如何助力大规模视频生成(附源码)

批量视频创作&#xff1a;PlugLink如何助力大规模视频生成 传统的视频制作流程往往需要大量的人力、物力和时间投入&#xff0c;这不仅限制了内容产出的效率&#xff0c;也大大提高了成本。为了解决这一问题&#xff0c;PlugLink&#xff0c;一个开源的自动化框架&#xff0c;…

MySQL详细介绍:开源关系数据库管理系统的魅力

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

Flutter 小技巧之为什么推荐 Widget 使用 const

今天收到这个问题&#xff0c;本来想着简单回复下&#xff0c;但是感觉这个话题又可以稍微展开讲讲&#xff0c;干脆就整理成一篇简单的科普&#xff0c;这样也能更方便清晰地回答这个问题。 聊这个问题之前&#xff0c;我们需要把一个“老生常谈”的概念拿出来说&#xff0c;那…

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中

在C语言中&#xff0c;如果你有一个已经排好序的数组&#xff0c;并且想要插入一个新的数到数组中&#xff0c;同时保持数组的有序性&#xff0c;你需要首先确定新数的插入位置&#xff0c;然后将该位置及其后面的所有元素向后移动一位&#xff0c;最后将新数插入到正确的位置。…

Open3d 点云投影到 xoy yoz 平面最简单的方式(附python 代码)

最简单的方式&#xff0c;就是直接把原有的点云的数据的 z or x 赋值为0, 然后生成一个新的点云。 filename_model1 r"1.pcd"down 10point_cloud o3d.io.read_point_cloud(filename_model1) point_cloud point_cloud.uniform_down_sample(int(down)) print(降采样…

metasfresh开源ERP系统Windows开发环境配置参考

目录 概述 开发环境 配置过程 后端启动 前端启动 登陆系统 其他 概述 Compiere闭源之后衍生出了Admpiere等若干开源的产品&#xff0c;metasfresh就是其中之一&#xff0c;metasfresh截至发稿时在GitHub上已有64000多次的修改提交&#xff0c;而且仍在维护中&#xff0…

leetcode刷MySQL记录——sum/count里加条件判断、avg求满足条件记录数占比

leetcode题目&#xff1a;1934. 确认率 在刷leetcode的MySQL题中&#xff0c;从题目的题解知道了count和avg聚合函数的另外用法&#xff0c;在此记录。 count() 里加条件判断 count函数用于统计在符合搜索条件的记录中&#xff0c;指定的表达式expr不为NULL的行数有多少&…

GIS避坑指南!工作中ArcGIS常用的40个小技巧

01图斑的边界线太粗而且无法修改 之前有群友遇到这样一个问题&#xff0c;边界线粗到连图斑都看不见&#xff1a; 查看符号系统&#xff0c;很正常&#xff1a; 究其原因&#xff0c;是地图视图比例的问题&#xff0c;正常情况下&#xff0c;地图的视图比例会随着视图范围自动调…

未来20年人工智能将如何塑造社会

照片由Brian McGowan在Unsplash上拍摄 更多资讯&#xff0c;请访问 2img.ai “人工智能会成为我们的救星还是我们的末日&#xff1f;” 几十年来&#xff0c;这个问题一直困扰着哲学家、科学家和科幻爱好者。 当我们踏上技术革命的边缘时&#xff0c;是时候透过水晶球&#x…

我国氮化硼市场规模逐渐扩大 市场集中度有望不断提升

我国氮化硼市场规模逐渐扩大 市场集中度有望不断提升 氮化硼&#xff08;BN&#xff09;俗称为白石墨&#xff0c;是由硼原子和氮原子所构成的一种晶体材料&#xff0c;在常温条件下多表现为一种棕色或暗红色晶体。氮化硼具有导热性好、硬度大、熔点高、抗化学侵蚀性等优点&…

快来看,错过了今天就要设置为vip文章了----openEuler@2024全球发展展望与战略规划

会议主题&#xff1a;openEuler2024全球发展展望与战略规划 OpenEuler2024项目在2024年成功推出了多个长期支持&#xff08;LTS&#xff09;版本&#xff0c;标志着其在智能技术领域的全新篇章&#xff0c;并致力于构建全球性的开源新生态。以下是该项目的主要内容和成就概览&a…

【日记】软考居然一次过了(620 字)

正文 早上空闲的时候&#xff0c;上 QQ 看了一下&#xff0c;许久不见动静的系统架构设计师群有人说出分了。我想高级都出分了&#xff0c;中级应该也出来了&#xff0c;于是用手机查了一下。看到分数几乎快要泪从中来。为什么软考能一次过&#xff0c;银行从业资格证考了两三…

程序猿,你离创业还差什么

为什么想要创业&#xff1f;这是一个很简单的问题&#xff0c;不同的人有不同的答案&#xff0c;但都直指一个根源&#xff1a;获得更多的财富。其实&#xff0c;我们完全换一个角度&#xff0c;换一种心境去讲&#xff1a;为了让更多的人能够幸福&#xff0c;利益他人&#xf…

MST霍尔传感器IC-MH251,MH253,GT3144在卷发器方案中的应用

霍尔传感器驱动卷发器应用 卷发器在我们的日常生活中已经成为了不可或缺的一种生活工具&#xff0c;它时刻可以护理我们的头发&#xff0c;保养我们的发质。霍尔传感器驱动卷发器&#xff0c;那么霍尔传感器是如何运用在卷发器中的呢&#xff1f;霍尔传感器在卷发器中的工作原…

快速阅读参考文献:kimi请求出战!

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 上篇文章&#xff0c;我们为大家演示了“如何使用kimi创建论文中的流程图”。今天继续为大家介绍“使用kimi快速阅读学术参考文献”。 在学术研究的海洋中&#xff0c;文献阅读是一项基…

Windows环境下安装MySQL数据库的步骤

说明&#xff1a; 由于环境的不同&#xff0c;安装过程中可能会遇到各种各样的问题&#xff0c;不用慌&#xff0c;先根据错误提示搜索&#xff0c;多试一下。 安装前&#xff0c;请先认真看一下&#xff0c;有可能会遇到的几个问题&#xff1a; 1、证书链问题&#xff0c;一般…

【投稿优惠|稳定检索】2024年文化传播、交流与考古学国际会议 (CCEA 2024)

2024年文化传播、交流与考古学国际会议 (CCEA 2024) 2024 International Conference on Cultural Communication, Exchange, and Archaeology 【重要信息】 大会地点&#xff1a;西安 官网地址&#xff1a;http://www.icccea.com 投稿邮箱&#xff1a;iccceasub-conf.com 【注…

【深度学习驱动流体力学】采集OpenFOAM仿真数据作为AI模型训练数据集与卷积神经网络搭建到预测(一站式完整代码实现)

计算流体力学仿真之cavity(腔室)案例 目录 一.转换VTK数据文件1. `run/cavity/`2. 时间步文件夹 (`0`, `0.1`, `0.2`, ..., `0.5`)3. `cavity.OpenFOAM`4. `constant/`5. `system/`6. `VTK/`二.边界条件和边界类型数据1. `fixedWalls`2. `frontAndBack`3. `movingWall`数据内…

记录一次code-server使用latex无法刷新Pdf的BUG

一、背景 在nas上安装了ubuntu的docker&#xff0c;然后在里面安装了code-server和texlive&#xff0c;突然发现latex无法自动刷新pdf、也无法从pdf中定到文档中。 二、尝试 重启计算机、docker和nas>顺带更新了路由器固件导致路由器无WiFi了重置浏览器配置>导致了所有…

阿里1688商家数据采集软件

大镜山阿里1688商家数据采集一款采集阿里巴巴1688.com商家数据的软件&#xff0c;采集的数据包括店铺名称、联系人姓名、手机号码等。 一、大镜山阿里1688商家数据采集特色 — 大镜山阿里1688商家数据采集一款采集阿里巴巴1688.com商家数据的软件&#xff0c;采集的数据包括店…