cosmastech / laravel-statsd-适配器
轻松在您的Laravel项目中使用statsd-client-适配器
0.2.0
2024-07-21 13:48 UTC
Requires
- php: ^8.2
- cosmastech/statsd-client-adapter: ^0.4
- illuminate/contracts: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- cosmastech/psr-logger-spy: ^0.0.2
- datadog/php-datadogstatsd: ^1.6.1
- friendsofphp/php-cs-fixer: ^3.59
- laravel/facade-documenter: dev-main
- league/statsd: ^2.0.0
- orchestra/testbench: ^9.1
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^11.2.5
Suggests
- datadog/php-datadogstatsd: For DataDog stats
- league/statsd: For generic statsd clients
This package is auto-updated.
Last update: 2024-09-21 14:12:24 UTC
README
Laravel StatsD 适配器
概述
Laravel StatsD 适配器是一个包,它提供了Laravel应用程序与StatsD(一种用于收集和聚合指标的网路守护进程)之间的无缝集成。通过使用此适配器,您可以轻松地监视和测量Laravel应用程序的性能,跟踪各种指标,并将它们发送到StatsD服务器。
为什么使用此适配器?
- 节省时间:日志很好,但指标可以快速告诉您应用程序的健康状况的全貌。
- 性能监控:轻松跟踪Laravel应用程序的性能,包括响应时间、数据库查询和其他自定义指标。
- 聚合:StatsD收集和聚合指标,为您的应用程序性能随时间的变化提供有价值的洞察。
- 灵活性:配置适配器以满足您的特定需求。您可以在一个环境中使用多个statsd实例,或者为每个环境配置不同的写入位置:本地环境写入日志,测试环境写入statsd实例,生产环境写入DataDog。
- 可测试性:使用
memory
适配器编写单元测试,以确认在给定条件下是否记录了统计信息。
安装
您可以通过Composer安装此包
composer require cosmastech/laravel-statsd-adapter
安装包后,使用以下命令发布配置文件
php artisan vendor:publish --provider="Cosmastech\LaravelStatsDAdapter\StatsDAdapterServiceProvider"
可选依赖
如果您想使用DataDog记录统计信息,需要要求Composer包
composer require datadog/php-datadogstatsd
为了使用League的statsd客户端,您需要安装他们的包。
composer require league/statsd
配置
配置文件config/statsd-adapter.php
允许您自定义适配器的行为。
以下是可用选项
- 默认连接:指定默认的StatsD连接。
- 默认标签:除了按需发送标签外,您还可以在每个发出的请求中包含标签。
- 连接:定义多个StatsD连接,每个连接都有自己的设置。
您可以使用以下示例配置
return [ 'default' => env("STATSD_ADAPTER_DEFAULT", "datadog"), "default_tags" => [ "app_version" => "1.0.2", ], 'channels' => [ "datadog" => [ "adapter" => "datadog", "host" => env("DD_AGENT_HOST"), "port" => env("DD_DOGSTATSD_PORT"), "socket_path" => null, "datadog_host" => null, "decimal_precision" => null, "global_tags" => [], "metric_prefix" => null, "disable_telemetry" => null, ], ], ];
使用
基本使用
要发送简单的指标,您可以使用Stats
外观
use Cosmastech\LaravelStatsDAdapter\Stats; // Increment a counter Stats::increment('page.views'); // Record a gauge Stats::gauge('user.login', 1); // Record a timing (in ms) Stats::timing('response.time', 320);
如果您喜欢在函数中使用依赖注入,请使用StatsDClientAdapter
接口。
use Cosmastech\StatsDClientAdapter\Adapters\StatsDClientAdapter; use App\Models\User; use App\Models\Post; class DeleteAllUserPostsAction { public function __construct(private readonly StatsDClientAdapter $statsClient) { } public function __invoke(User $user): void { $user->posts->each(function(Post $post) use ($user) { $post->delete(); $this->statsClient->decrement("posts", 1.0, ["user_id" => $user->id], 1); }); } }
用例
跟踪页面浏览量
跟踪页面被查看的次数
Stats::increment('page.views', tags: ['url' => '/home']);
监控响应时间
测量和监控应用程序的响应时间
function makeSomeApiCall() { return \Http::get("https://packagist.org.cn/packages/list.json?vendor=cosmastech"); } $apiResponseToDoSomethingWith = Stats::time(makeSomeApiCall(...), "api-request");
数据库查询监控
跟踪数据库查询次数及其执行时间
\DB::listen(function ($query) { Stats::increment('database.queries'); Stats::timing('database.query_time', $query->time); });
高级配置
自定义连接
您可以定义多个连接并在需要时使用它们
Stats::channel('memory')->increment('custom.metric');
动态指标
根据运行时数据创建动态指标名称
$role = auth()->role; // Let's assume the User model has a property named `role` Stats::increment("user.{$role}.login");
贡献
欢迎贡献!请提交pull请求或打开问题来讨论您的想法。
许可证
此包是开源软件,根据WTFPL许可证授权。