当前位置: 首页 > java >正文

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.xdnf.cn/news/4257.html

相关文章:

  • 深度解析:2D 写实交互数字人 —— 开启智能交互新时代
  • API 开发实战:基于京东开放平台的实时商品数据采集接口实现
  • 【25软考网工】第五章(6)TCP和UDP协议、流量控制和拥塞控制、重点协议与端口
  • 项目中为什么选择RabbitMQ
  • Vision-Language Models (VLMs) 视觉语言模型的技术背景、应用场景和商业前景(Grok3 DeepSearch模式回答)
  • 隔离端口配置
  • 消除AttributeError: module ‘ttsfrd‘ has no attribute ‘TtsFrontendEngine‘报错输出的记录
  • 2015-2018年 重要城市交通拥堵指数-社科数据
  • Ragflow服务器上部署教程
  • 前端、XSS(跨站脚本攻击,Cross-Site Scripting)
  • 深入理解 Oracle 数据块:行迁移与行链接的性能影响
  • 互联网大厂Java求职面试:云原生与AI融合下的系统设计挑战-2
  • 网络编程核心技术解析:从Socket基础到实战开发
  • 在Spring Boot 中如何配置MongoDB的副本集 (Replica Set) 或分片集群 (Sharded Cluster)?
  • C++ STL 基础与多线程安全性说明文档
  • 如何开发一个笑话管理小工具
  • 盛最多水的容器
  • conda 安装cudnn
  • SpringBoot中使用MCP和通义千问来处理和分析数据
  • 强啊!Oracle Database 23aiOracle Database 23ai:使用列别名进行分组排序!
  • 高光谱相机赋能烟叶分选:精准、高效与智能化的新突破
  • 美团后端开发一面
  • 第十五届蓝桥杯单片机国赛-串口解析
  • 前端封装框架依赖管理全攻略:构建轻量可维护的私有框架
  • 关于Java多态简单讲解
  • 【表设计】外键的取舍-分布式中逐渐消失的外键
  • 【firewall-cmd】--的作用以及使用方法
  • FlinkCDC采集MySQL8.4报错
  • 第六节:图像基本操作-像素级操作
  • Windows11下ESP-IDF开发环境搭建【基于Cursor/VS Code插件】