miquido/request-data-collector

用于在其生命周期内收集请求数据的库。

v2.4.0 2021-04-14 12:57 UTC

This package is auto-updated.

Last update: 2024-09-18 17:18:12 UTC


README

使用此包,可以轻松开始收集通过Laravel传递的各种数据。通过分析日志,可以控制过度的数据库查询等。

此包旨在作为零配置运行。尽管存在默认的数据收集器配置,但请花时间将其调整为满足自己的需求。此外,也可以添加自己的数据收集器。

当使用此包时,每个处理过的请求(即根据排除规则未排除的请求)将在响应中包含X-Request-Id头。可以使用此ID关联各种收集器的数据。

GitHub license Build

设置

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 包含键值对,其中键是收集器名称,值是布尔值 truefalse,表示是否启用或禁用。建议:如果需要动态地启用/禁用指定的收集器,可以为每个收集器本身定义不同的环境变量(例如 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