cosmastech/laravel-statsd-适配器

轻松在您的Laravel项目中使用statsd-client-适配器

0.2.0 2024-07-21 13:48 UTC

This package is auto-updated.

Last update: 2024-09-21 14:12:24 UTC


README

Latest Stable Version Total Downloads License PHP Version Require

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许可证授权。