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

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
AI全栈实验室4 天前
MongoDB迁移金仓踩了5个坑,最后一个差点回滚
mongodb
BingoGo4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·laravel
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php