xtompie/flux

事件和日志管理工具。收集、转换、存储输入、过滤器和输出

1.2 2024-08-30 21:36 UTC

This package is auto-updated.

Last update: 2024-08-30 21:36:59 UTC


README

事件和日志管理工具。使用PHP创建的数据处理管道。高效收集、解析和转换日志。高度可定制和可扩展以满足您的需求。

要求

  • PHP >= 8

安装

使用骨架

xtompie/flux-skeleton

文档

机器

flux的入口点是Machine。Machine包含程序和完成项。

程序

程序具有唯一名称,开始,输入,过滤器,输出,停止。

开始

每个开始都在程序开始时调用。它们被设计用于准备数据。开始的例子可以是rsync,它将从外部服务器下载数据到本地文件夹或解压归档。见:Start

输入

接下来,每个输入都会被调用。输入生成一个字符串类型的条目。每个生成的条目将单独并立即传递给过滤器。输入的例子可以是生成器,它从文件的每一行生成一个条目。见:Input

过滤器

条目传递给每个过滤器。过滤器可以修改条目。如果过滤器返回null,则条目将不再进一步处理。见:Filter

输出

从过滤器返回的条目传递给每个输出。输出的例子可以是将条目追加到文件中。见:Output

停止

每个停止都在程序结束时调用。可以在停止中进行清理。见:Stop

完成

Machine包含完成项。完成项在执行所需的程序/程序之后被调用。它与停止类似,但用于machine。见:Finish

设置和拆除

开始、输入、过滤器、输出和停止可以实现SetUpTearDown接口。

SetUp在程序启动开始时调用开始之前使用。

TearDown在程序执行结束时,在调用每个停止之后使用。

内置组件

用法

flux.php:

<?php

declare(strict_types=1);

require 'vendor/autoload.php';

use Xtompie\Flux\Core\Machine;
use Xtompie\Flux\Core\Program;
use Xtompie\Flux\Filter\OnceFilter;
use Xtompie\Flux\Input\LinesInput;
use Xtompie\Flux\Output\FileOutput;
use Xtompie\Flux\Start\RsyncStart;
use Xtompie\Flux\Stop\CountFileLinesStop;

Machine::new(
    program: [
        Program::new(
            name: 'default',
            start: RsyncStart::new('user@127.0.0.1:/var/nginx/logs/laravel-*', 'var/default/input'),
            input: LinesInput::new('var/default/input/'),
            filter: OnceFilter::new('var/default/once/'),
            output: FileOutput::new('log/default.log'),
            stop: CountFileLinesStop::new('log/default.log'),
        )
    ]
)
    ->run()
;

然后在shell中php flux.php runall

程序可以通过以下方式运行

  • Machine->runAllPrograms()
  • Machine->runProgram(string $name)
  • Machine->run - 然后machine读取shell参数
    • runall - 运行所有程序,例如 php flux.php runall
    • run <program-name> - 通过名称运行程序,例如php flux.php run default

日志监控示例

从许多应用程序或服务器收集日志的应用程序。

flux.php:

<?php

declare(strict_types=1);

require 'vendor/autoload.php';

use Xtompie\Flux\Core\Machine;
use Xtompie\Flux\Core\Program;
use Xtompie\Flux\Filter\OnceFilter;
use Xtompie\Flux\Input\LinesInput;
use Xtompie\Flux\Output\FileOutput;
use Xtompie\Flux\Start\RsyncStart;
use Xtompie\Flux\Finish\CountFilesLinesFinish;

Machine::new(
    program: [
        Program::new(
            name: 'aaa',
            start: RsyncStart::new('user@aaa.example.ccom:/var/logs/nginx/aaa.errorlog', 'var/aaa/input'),
            input: LinesInput::new('var/aaa/input/'),
            filter: OnceFilter::new('var/aaa/once/'),
            output: FileOutput::new('log/aaa.log'),
        ),
        Program::new(
            name: 'bbb',
            start: RsyncStart::new('user@bbb.example.ccom:/var/logs/nginx/bbb.errorlog', 'var/bbb/input'),
            input: LinesInput::new('var/bbb/input/'),
            filter: OnceFilter::new('var/bbb/once/'),
            output: FileOutput::new('log/bbb.log'),
        ),
    ],
    finish: CountFilesLinesFinish::new('log/'),
)
    ->run()
;

然后在shell中php flux.php runall

使用OnceFilterlog/目录将表现得像收件箱。只有新条目会被存储在log/中。可以从log/中手动删除条目。CountFilesLinesFinish将告诉log/中有多少新条目。

项目工具示例

项目中的工具,有助于跟踪测试和生产服务器中的应用程序错误。

在项目根目录下创建文件夹 tools/logcd tools/log。 执行 composer require xtompie/flux。这将输出

当前目录中没有 composer.json,您是否想使用 ../../ 中的那个?[Y,n]? 输入 n。这将创建 composer.jsoncomposer.lockvendor。创建 .gitignore 并输入以下内容

/log/
/var/
/vendor/

创建 flux.php 并根据您的需求修改它

<?php

declare(strict_types=1);

require 'vendor/autoload.php';

use Xtompie\Flux\Core\Machine;
use Xtompie\Flux\Core\Program;
use Xtompie\Flux\Filter\OnceFilter;
use Xtompie\Flux\Input\LinesInput;
use Xtompie\Flux\Output\FileOutput;
use Xtompie\Flux\Start\RsyncStart;
use Xtompie\Flux\Stop\CountFileLinesStop;

Machine::new([
    Program::new(
        name: $name = 'dev',
        start: RsyncStart::new('user@host-dev:/var/log/nginx/application.error.log', "var/$name/input"),
        input: LinesInput::new("var/$name/input/"),
        filter: OnceFilter::new("var/$name/once/"),
        output: FileOutput::new("log/$name.log"),
        stop: CountFileLinesStop::new("log/$name.log"),
    ),
    Program::new(
        name: $name = 'test',
        start: RsyncStart::new('user@host-prod:/var/log/nginx/application.error.log', "var/$name/input"),
        input: LinesInput::new("var/$name/input/"),
        filter: OnceFilter::new("var/$name/once/"),
        output: FileOutput::new("log/$name.log"),
        stop: CountFileLinesStop::new("log/$name.log"),
    ),
])
    ->run()
;

然后在项目根目录下的 composer.json 中添加脚本

{
    "scripts": {
        "log-dev": "cd tools/log && composer install && php flux.php run dev",
        "log-test": "cd tools/log && composer install && php flux.php run test",
    },
}

现在,从您的项目根目录执行 composer log-dev,您就可以轻松地获取新的错误日志。