laravel 12 监听syslog消息,并将消息格式化后存入mongodb

在Laravel 12中实现监听Syslog消息并格式化存储到MongoDB,需结合日志通道配置、Syslog解析和MongoDB存储操作。以下是具体实现方案:


一、环境配置

  1. 安装MongoDB扩展包
    执行以下命令安装必要的依赖:

    composer require jenssegers/mongodb ^4.0
    

    确保已安装PHP的mongodb扩展(通过PECL或包管理器)。

  2. 配置MongoDB连接
    修改.env文件:

    DB_CONNECTION=mongodb
    MONGODB_HOST=127.0.0.1
    MONGODB_PORT=27017
    MONGODB_DATABASE=syslog_logs
    MONGODB_USERNAME=admin
    MONGODB_PASSWORD=secret
    

    配置config/database.php中的mongodb连接选项。


二、Syslog消息监听

  1. 自定义日志通道
    修改config/logging.php,添加自定义Syslog处理通道:

    'channels' => ['custom_syslog' => ['driver' => 'custom','via' => App\Logging\CustomSyslogHandler::class,'formatter' => App\Logging\SyslogFormatter::class,],
    ],
    
  2. 实现Syslog监听器
    创建app/Logging/CustomSyslogHandler.php,通过Socket监听UDP端口接收Syslog消息:

    use Monolog\Handler\AbstractProcessingHandler;
    class CustomSyslogHandler extends AbstractProcessingHandler {public function write(array $record): void {// 接收并解析Syslog消息(示例逻辑)$message = $record['formatted'];$parsedLog = $this->parseSyslogMessage($message);// 存储到MongoDBSyslogEntry::create($parsedLog);}private function parseSyslogMessage(string $message): array {// 解析RFC5424格式或其他Syslog格式return ['timestamp' => now(),'host' => 'source_host','message' => $message];}
    }
    

三、MongoDB存储实现

  1. 创建日志模型
    定义SyslogEntry模型并指定MongoDB连接:

    namespace App\Models;
    use Jenssegers\Mongodb\Eloquent\Model;class SyslogEntry extends Model {protected $connection = 'mongodb';protected $collection = 'syslog_entries';protected $fillable = ['timestamp', 'host', 'message'];
    }
    
  2. 优化存储性能

    • 使用批量写入操作(如insertMany)减少数据库请求次数
    • 添加索引加速查询:
      SyslogEntry::createIndex(['timestamp' => 1]);
      

四、Syslog消息格式化

  1. 自定义格式化类
    创建app/Logging/SyslogFormatter.php,实现Monolog\Formatter\FormatterInterface
    class SyslogFormatter implements FormatterInterface {public function format(array $record): string {return json_encode(['timestamp' => $record['datetime'],'message'   => $record['message'],'context'   => $record['context']]);}public function formatBatch(array $records): array { /* ... */ }
    }
    

五、部署与监控

  1. 启动监听服务
    创建Artisan命令syslog:listen并配置Supervisor守护进程:

    [program:syslog_listener]
    command=php artisan syslog:listen
    autostart=true
    autorestart=true
    
  2. 日志审计与清理

    • 使用Laravel任务调度定期清理过期日志
    • 集成监控工具(如Prometheus)跟踪日志量及存储性能

关键配置总结

组件配置文件/代码位置核心功能
MongoDB.env, config/database.php数据库连接配置
Syslog监听CustomSyslogHandler接收并解析Syslog原始消息
数据模型SyslogEntryMongoDB文档结构定义
格式化SyslogFormatter自定义日志格式以适应存储需求

通过以上步骤,可实现Syslog消息的实时监听、格式化处理及高效存储到MongoDB。

引用链接:
1.在Laravel 中实现同时将日志记录到 ‌Syslog‌ 和 ‌MongoDB‌ - CSDN博客
2.在Laravel 12中实现4A日志审计 - CSDN博客
3.Laravel 日志 MongoDB 存储 - 文江博客
4.Laravel 框架中使用 MongoDB 数据库的操作 - 脚本之家
5.laravel操作mongo详细说明 - 博客园
6.PHP Laravel Mongodb 扩展的安装、使用、文档 - 知乎 - 大冤种
7.Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法 - 脚本之家
8.使用rsyslog搭建集中日志管理系统,并将日志同时存储到文件和MongoDB - CSDN博客
9.保留两位小数 laravel mongodb_mob64ca12e8d855的技术博客_51CTO博客 - 51CTO博客
10.laravel操作mongodb_51CTO博客 - 51CTO博客
11.laravel8 mongodb日志服务 - 51CTO博客
12.laravel 使用 MongoDB - CSDN博客
13.laravel mongodb - 51CTO博客
14.Eloquent 模型类 - www.mongodb.com
15.配置MongoDB 连接 - www.mongodb.com
16.使用MongoDB存储日志数据 - 阿里云帮助中心
17.Errors & Logging - Laravel 中文网 为 Web 工匠创造的 PHP 框架 - Laravel
18.分布式文档存储数据库之MongoDB - 方不是圆
19.Laravel Pulse - Laravel 中文网 为 Web 工匠创造的 PHP 框架 - Laravel
20.错误与日志 - docs.golaravel.com
21.Cache - Laravel 中文网 为 Web 工匠创造的 PHP 框架 - Laravel
22.laravel/lumen中自定义日志(json)和processor - 腾讯云
23.Laravel 的错误和日志记录 - docs.golaravel.com
24.Cache - Laravel 中文网 为 Web 工匠创造的 PHP 框架 - Laravel
25.兼容性 - www.mongodb.com
26.查看MongoDB 数据 - www.mongodb.com
27.文件存储 - docs.golaravel.com

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

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

相关文章

【STM32项目实战】一文了解单片机的SPI驱动外设功能

前言:在前面我有文章介绍了关于单片机的SPI外设CUBEMX配置,但是要想使用好SPI这个外设我们还必须对其原理性的时序有一个详细的了解,所以这篇文章就补充一下SPI比较偏向底层的时序性的逻辑。 1,SPI简介 SPI是MCU最常见的对外通信…

【挖洞利器】GobyAwvs解放双手

【渗透测试工具】解放双手&Goby配合Awvs渗透测试利器\x0a通过Goby和Awvs 解放双手https://mp.weixin.qq.com/s/SquRK8C5cRpWmfGbIOqxoQ

LangChain4j(15)——RAG高级之跳过检索

之前的文章中,我们介绍了RAG的使用,但是,每次提问时,都会通过RAG进行检索。有时,检索是不必要执行的,比如,当用户只是说“你好”时。于是,我们需要有条件的跳过检索过程。 跳过决策…

【SDRS】面向多模态情感分析的情感感知解纠缠表征转移

abstract 多模态情感分析(MSA)旨在利用多模态的互补信息对用户生成的视频进行情感理解。现有的方法主要集中在设计复杂的特征融合策略来整合单独提取的多模态表示,忽略了与情感无关的信息的干扰。在本文中,我们提出将单模表征分解为情感特定特征和情感独立特征,并将前者融…

Sui 上线两周年,掀起增长「海啸」

两年前的 5 月 3 日,Sui 的主网正式发布,将在开发网和测试网上验证过的下一代技术承诺变为现实。这一新兴网络旨在优化现有区块链技术,结合高性能计算环境与安全性、可验证性及韧性。 随着 Sui 迎来两周年,这股浪潮已成长为「海啸…

深入理解 mapper-locations

mybatis-plus.mapper-locations: classpath*:/mapper/**/*.xml 是 MyBatis/MyBatis-Plus 在 Spring Boot 配置文件(如 application.yml 或 application.properties)中的一项关键配置,用于指定 MyBatis Mapper XML 文件的存放路径。以下是详细…

电容的作用

使用多个电容是从电容的实际等效模型去考虑的(也就是从SI,信号完整性方面)。只考虑一个实际电容时,它的阻抗曲线是一个类似于倒三角形的形状,只在谐振频率点(与等效串联电感形成)处的阻抗最小。因此相当于只在这一个频率点处及附近…

移植的本质是什么

有断时间我就在想,为什么freertos,lvgl等等的移植都是把库文件放进来,直接点击编译,然后把bug都处理完成就移植成功了,为什么呢? 明明我一个函数都没调用,为什么会有一堆错误,莫名其…

广告场景下的检索平台技术

检索方向概述 数据检索领域技术选型大体分为SQL事务数据库、NoSQL数据库、分析型数据库三个类型。 SQL数据库的设计思路是采用关系模型组织数据,注重读写操作的一致性,注重数据的绝对安全。为了实现这一思路,SQL数据库往往会牺牲部分性能&…

高频PCB设计如何选择PCB层数?

以四层板为例,可以第一层和第二层画信号,作为信号层。 第三层可以走电源,然后第四层走GND 但是更可以第一层和第三层画信号。第二层可以走电源,然后第四层走GND 用中间的电源层以及地层可以起到屏蔽的作用,有效降低寄…

[Linux_69] 数据链路层 | Mac帧格式 | 局域网转发 | MTU MSS

目录 0.引入 1.以太网帧格式 2.重谈局域网转发的原理(基于协议) 小结 3.认识MTU 3.1MTU对IP协议的影响 3.2MTU对UDP协议的影响 3.3MTU对于TCP协议的影响 0.引入 在去年的这篇文章中,我们有对网络进行过一个概述[Linux#47][网络] 网络协议 | TCP/IP模型 | 以…

vue2 provide 后 inject 数据不是响应式的,不实时更新

今天用 provide 后&#xff0c;inject 获取数据时不是实时更新的&#xff0c;获取的不是更新后的值 祖父组件 <div style"text-align: left !important;"><button click"change">更改</button> </div>data() {return {name: ini…

洛谷---P1629 邮递员送信

题目描述 有一个邮递员要送东西&#xff0c;邮局在节点 1。他总共要送 n−1 样东西&#xff0c;其目的地分别是节点 2 到节点 n。由于这个城市的交通比较繁忙&#xff0c;因此所有的道路都是单行的&#xff0c;共有 m 条道路。这个邮递员每次只能带一样东西&#xff0c;并且运…

2025年LangChain(V0.3)开发与综合案例

LangChain是什么&#xff1f; 在实际企业开发中&#xff0c;大模型应用往往比简单的问答要复杂得多。如果只是简单地向大模型提问并获取回答&#xff0c;那么大模型的许多强大功能都没有被充分利用。 要开始使用LangChain&#xff0c;首先需要安装相关的库&#xff1a; pip …

十分钟了解 @MapperScan

MapperScan 是 MyBatis 和 MyBatis-Plus 提供的一个 Spring Boot 注解&#xff0c;用于自动扫描并注册 Mapper 接口&#xff0c;使其能够被 Spring 容器管理&#xff0c;并与对应的 XML 或注解 SQL 绑定。它的核心作用是简化 MyBatis Mapper 接口的配置&#xff0c;避免手动逐个…

深度解析 MindTorch:无缝迁移 PyTorch 到 MindSpore 的高效工具

在深度学习领域&#xff0c;框架的选择往往取决于开发者的习惯、硬件支持以及项目需求。PyTorch 作为当前最受欢迎的深度学习框架之一&#xff0c;以其动态图机制和简洁的 API 设计深受开发者喜爱。然而&#xff0c;随着昇腾硬件的崛起&#xff0c;如何高效地利用昇腾的强大计算…

[250506] Auto-cpufreq 2.6 版本发布:带来增强的 TUI 监控及多项改进

目录 Auto-cpufreq 2.6 版本发布&#xff1a;带来增强的 TUI 监控及多项改进 Auto-cpufreq 2.6 版本发布&#xff1a;带来增强的 TUI 监控及多项改进 Auto-cpufreq&#xff0c;一款适用于 Linux 的免费开源自动 CPU 速度与功耗优化器&#xff0c;已发布其最新版本 2.6。该工具…

Linux 更改内存交换 swap 为 zram 压缩,减小磁盘写入

1、查看当前 swap 的方式 swapon --show 我这里是默认的 swap 文件&#xff0c;大小为 2G。 2、安装 zram Ubuntu 下&#xff1a; sudo apt install zram-tools安装后默认会启动&#xff1a; 3、关闭默认的 swap 文件 sudo swapoff /swapfile 其次是关闭 /etc/fstab 中的 …

ORCAD打印pdf

1 笔记本电脑绑定了打印机&#xff0c;要改成这个

C++中指针使用详解(4)指针的高级应用汇总

C 中指针的高级应用非常丰富&#xff0c;掌握这些内容能让你写出更高性能、更底层控制力强的代码。下面是应用模块梳理和例子讲解。 目录预览 函数指针与回调机制指针数组 vs 数组指针指针与类成员函数&#xff08;成员函数指针&#xff09;智能指针&#xff08;unique_ptr, s…