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

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


一、环境配置

  1. 安装MongoDB扩展包

    执行以下命令安装必要的依赖:

    bash 复制代码
    composer require jenssegers/mongodb ^4.0

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

  2. 配置MongoDB连接

    修改.env文件:

    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处理通道:

    php 复制代码
    'channels' => [
        'custom_syslog' => [
            'driver' => 'custom',
            'via' => App\Logging\CustomSyslogHandler::class,
            'formatter' => App\Logging\SyslogFormatter::class,
        ],
    ],
  2. 实现Syslog监听器

    创建app/Logging/CustomSyslogHandler.php,通过Socket监听UDP端口接收Syslog消息:

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

三、MongoDB存储实现

  1. 创建日志模型

    定义SyslogEntry模型并指定MongoDB连接:

    php 复制代码
    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)减少数据库请求次数

    • 添加索引加速查询:

      php 复制代码
      SyslogEntry::createIndex(['timestamp' => 1]);

四、Syslog消息格式化

  1. 自定义格式化类
    创建app/Logging/SyslogFormatter.php,实现Monolog\Formatter\FormatterInterface:

    php 复制代码
    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守护进程:

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

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

关键配置总结

组件 配置文件/代码位置 核心功能
MongoDB .env, config/database.php 数据库连接配置
Syslog监听 CustomSyslogHandler 接收并解析Syslog原始消息
数据模型 SyslogEntry MongoDB文档结构定义
格式化 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

相关推荐
OpenAnolis小助手9 小时前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
云边云科技_云网融合10 小时前
连锁门店组网怎么做?SD-WAN 多分支组网的架构选型、部署与成本结构
服务器·数据库·php
SHENGWEI胜为14 小时前
局域网出现 IP 地址冲突怎么办?如何从 ARP 表定位故障设备
网络协议·tcp/ip·php
4SAPI16 小时前
多模态 AI 应用统一接入网关生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
大数据·人工智能·架构·php·1024程序员节
4SAPI17 小时前
营销内容生成大模型 API 生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
数据库·人工智能·架构·php
迪康Defender18 小时前
PHP 高危漏洞应急分析:从风险原理到端点侧纵深防护
运维·开发语言·安全·自动化·php·运维开发·远程工作
躺柒19 小时前
读数据安全架构设计与实践16安全架构案例(上)
安全·php·零信任·安全架构·防火墙·无边界
fengci.20 小时前
CTF2刷题记录(困难部分)
android·开发语言·前端·学习·php
vipxieliang20 小时前
PHP OPcache 原理与配置:字节码缓存、参数调优、失效机制与性能影响
php
vipxieliang20 小时前
PHP 生命周期与 PHP-FPM 工作模式:从 Nginx 到 PHP 执行完毕的全链路剖析
php