xtompie / flux
事件和日志管理工具。收集、转换、存储输入、过滤器和输出
Requires (Dev)
- phpunit/phpunit: ^10.2
README
事件和日志管理工具。使用PHP创建的数据处理管道。高效收集、解析和转换日志。高度可定制和可扩展以满足您的需求。
要求
- PHP >= 8
安装
使用骨架
文档
机器
flux的入口点是Machine
。Machine包含程序和完成项。
程序
程序具有唯一名称,开始,输入,过滤器,输出,停止。
开始
每个开始都在程序开始时调用。它们被设计用于准备数据。开始的例子可以是rsync,它将从外部服务器下载数据到本地文件夹或解压归档。见:Start
输入
接下来,每个输入都会被调用。输入生成一个字符串类型的条目。每个生成的条目将单独并立即传递给过滤器。输入的例子可以是生成器,它从文件的每一行生成一个条目。见:Input
过滤器
条目传递给每个过滤器。过滤器可以修改条目。如果过滤器返回null,则条目将不再进一步处理。见:Filter
输出
从过滤器返回的条目传递给每个输出。输出的例子可以是将条目追加到文件中。见:Output
停止
每个停止都在程序结束时调用。可以在停止中进行清理。见:Stop
完成
Machine包含完成项。完成项在执行所需的程序/程序之后被调用。它与停止类似,但用于machine。见:Finish
设置和拆除
开始、输入、过滤器、输出和停止可以实现SetUp、TearDown接口。
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
。
使用OnceFilter
,log/
目录将表现得像收件箱。只有新条目会被存储在log/
中。可以从log/
中手动删除条目。CountFilesLinesFinish
将告诉log/
中有多少新条目。
项目工具示例
项目中的工具,有助于跟踪测试和生产服务器中的应用程序错误。
在项目根目录下创建文件夹 tools/log
。 cd tools/log
。 执行 composer require xtompie/flux
。这将输出
当前目录中没有 composer.json,您是否想使用 ../../ 中的那个?[Y,n]? 输入
n
。这将创建composer.json
、composer.lock
和vendor
。创建.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
,您就可以轻松地获取新的错误日志。