miquido / request-data-collector
用于在其生命周期内收集请求数据的库。
Requires
- php: ^7.3|^8.0
- illuminate/contracts: ~5.6|^6.0|^7.0|^8.0
- illuminate/database: ~5.6|^6.0|^7.0|^8.0
- illuminate/log: ~5.6|^6.0|^7.0|^8.0
- illuminate/routing: ~5.6|^6.0|^7.0|^8.0
- illuminate/support: ~5.6|^6.0|^7.0|^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.18.5
- nesbot/carbon: ^1.26.3|^2.0
- phpspec/prophecy-phpunit: ^2.0
- phpstan/phpstan: ^0.12.83
- phpstan/phpstan-phpunit: ^0.12.18
- phpunit/phpunit: ^9.5
- symfony/var-dumper: ^5.2
Suggests
- miquido/request-data-collector-elasticsearch: Allows collecting Elasticsearch requests
- miquido/request-data-collector-guzzle: Allows collecting Guzzle requests
README
使用此包,可以轻松开始收集通过Laravel传递的各种数据。通过分析日志,可以控制过度的数据库查询等。
此包旨在作为零配置运行。尽管存在默认的数据收集器配置,但请花时间将其调整为满足自己的需求。此外,也可以添加自己的数据收集器。
当使用此包时,每个处理过的请求(即根据排除
规则未排除的请求)将在响应中包含X-Request-Id
头。可以使用此ID关联各种收集器的数据。
设置
Laravel 5.6+
如果您不使用自动发现功能,请在config/app.php
文件中注册包的服务提供者
'providers' => [ // ... \Miquido\RequestDataCollector\Providers\LaravelServiceProvider::class, ],
Lumen
在bootstrap/app.php
文件中注册包的服务提供者
$app->register(\Miquido\RequestDataCollector\Providers\LumenServiceProvider::class);
如果您想覆盖默认配置,请勿忘记将其复制到/config/request-data-collector.php
文件,并在bootstrap/app.php
文件中加载它
$app->configure('request-data-collector');
进一步配置
添加新的环境变量(例如,到.env
文件)
REQUESTS_DATA_COLLECTOR_ENABLED=true
就这样!默认情况下,仅收集和推送到日志(根据LOG_CHANNEL
通道)关于请求的基本信息。
发布默认配置
php artisan vendor:publish --provider="Miquido\RequestDataCollector\Providers\LaravelServiceProvider"
可用的数据收集器
有一些预定义的数据收集器可能被使用。
RequestResponseCollector
此收集器用于收集有关传入请求和正在进行响应的数据。
'request' => [ 'driver' => \Miquido\RequestDataCollector\Collectors\RequestResponseCollector::class, 'request_info' => [ // ... ], 'response_info' => [ // ... ], 'variables' => [ // ... ], 'raw' => boolean, ],
request_info
定义应收集的请求参数列表。有关可用选项的列表,请参阅\Miquido\RequestDataCollector\Collectors\RequestResponseCollector::REQUEST_INFO_*
常量。
示例
'request_info' => [ \Miquido\RequestDataCollector\Collectors\RequestResponseCollector::REQUEST_INFO_REAL_METHOD, \Miquido\RequestDataCollector\Collectors\RequestResponseCollector::REQUEST_INFO_PATH_INFO, ],
response_info
定义应收集的响应参数列表。有关可用选项的列表,请参阅\Miquido\RequestDataCollector\Collectors\RequestResponseCollector::RESPONSE_INFO_*
常量。
示例
'response_info' => [ \Miquido\RequestDataCollector\Collectors\RequestResponseCollector::RESPONSE_INFO_HTTP_STATUS_CODE, ],
variables
定义与请求关联的应收集的变量列表。有关可用选项的列表,请参阅\Miquido\RequestDataCollector\Collectors\RequestResponseCollector::VARIABLE_*
常量。
可以收集有关变量的所有信息
'variables' => [ \Miquido\RequestDataCollector\Collectors\RequestResponseCollector::VARIABLE_GET, ],
或包含/排除其中一些(这在处理敏感数据时特别有用)
// Incoming request: /some/page?email=...&password=... 'variables' => [ \Miquido\RequestDataCollector\Collectors\RequestResponseCollector::VARIABLE_GET => [ 'excludes' => [ 'password', ], 'includes' => [ 'email', ], ], ],
值得注意的是,包含具有优先级高于排除。这意味着如果使用包含,则不应用排除。
raw
当设置为true
时,一旦请求到达应用程序(允许拥有未修改的请求)。当设置为false
时,数据收集将在应用程序生命周期的末尾使用请求(允许包含请求修改)。
请注意,原始请求没有路由信息,所以\Miquido\RequestDataCollector\Collectors\RequestResponseCollector::REQUEST_INFO_ROUTE
选项将没有效果。
DatabaseQueriesCollector
此收集器用于收集有关执行数据库查询的数据。
请注意,它使用Laravel的内置\DB::enable/disable/flushQueryLog()
方法,因此如果在代码的另一个地方也使用,可能会影响最终结果。
'database' => [ 'driver' => \Miquido\RequestDataCollector\Collectors\DatabaseQueriesCollector::class, 'connections' => [ // ... ], ],
connections
定义应从其收集查询的数据库连接列表。使用在config/database.php
文件中定义的名称。也可以提供null
值作为名称,以从默认连接收集查询。
启用或禁用数据收集器
每个收集器的配置由两部分组成:collectors
数组中的条目和在options
数组中的条目。
数组 collectors
包含键值对,其中键是收集器名称,值是布尔值 true
或 false
,表示是否启用或禁用。建议:如果需要动态地启用/禁用指定的收集器,可以为每个收集器本身定义不同的环境变量(例如 DATABASE_COLLECTOR_ENABLED
等)。
数组 options
包含键值对,其中键是收集器名称,值是一个包含其配置的数组。它必须至少包含 driver
设置。其他设置取决于收集器。
使用收集器名称的 key
用于日志记录目的。每个日志条目都包含关于请求 ID 和给定的收集器名称的信息,以便更容易找到/过滤。
排除收集的请求
可以排除一些根本不应该收集的请求。
'exclude' => [ [ 'filter' => class reference, 'with' => [ // ... ], ], // ... ],
每个条目包含
包含过滤器类引用的 filter(例如 \Miquido\RequestDataCollector\Filters\UserAgentFilter::class
)。
包含为过滤器类构造函数提供的数据的 with(例如 'userAgents' => ['Docker HEALTHCHECK'], ...
)。注意:这里使用了 Laravel 的容器,因此可以利用依赖注入。
可以自由使用可用的任何过滤器(请参阅 src/Filters
目录)或编写自己的过滤器。
通过许多服务跟踪请求
您可以通过许多服务跟踪请求。当生成 请求 ID
时,首先检查请求中是否存在 X-REQUEST-ID
头部,并使用其值代替。这样,您可以在日志中看到相同的 请求 ID
。
如果没有可用的 X-REQUEST-ID
头部,您仍然可以通过 \Miquido\RequestDataCollector\RequestDataCollector::setRequestId()
方法设置您自己的自定义 请求 ID
。
在两种情况下,请求 ID
必须采用以下格式
X[0-9a-fA-F]{32}
如果 X-REQUEST-ID
格式无效,它将被静默跳过,并生成新的 ID。
默认情况下,跟踪是启用的。但是,可以禁用它
REQUESTS_DATA_COLLECTOR_ALLOW_TRACKING=false
关于
该项目由 Miquido 制作:https://www.miquido.com