voodoosms/laravel-metrics

v1.6.3 2024-05-03 10:23 UTC

This package is auto-updated.

Last update: 2024-09-03 10:08:01 UTC


README

此包处理从 Laravel 应用收集和发射指标。

用法

安装

composer require voodoosms/laravel-metrics

如果您想配置通道和自动发现,您需要通过运行来发布配置文件

php artisan vendor:publish

定义指标

创建一个新类,该类实现 VoodooSMS\LaravelMetrics\Interfaces\Metric 接口或扩展 VoodooSMS\LaravelMetrics\Abstracts\Metric 类。您可以使用 php artisan make:metric 命令为您生成此文件。

然后编写 keyvalue 方法。key 是指标的标识符,例如 queue-size

class TestMetric extends Metric
{
    public function key(): string
    {
        return 'queue-size';
    }

    public function collect()
    {
        $this->value = Queue::size();

        return $this;
    }
}

您可以通过运行此命令 php artisan make:metric --cached 来创建一个缓存的指标,这将存储指标的值在缓存中,并添加一个 getCachedValue() 函数来检索这个缓存的值。

Prometheus 指标

Prometheus 是一个事件监控和警报工具。当在 Kubernetes 集群中部署时,您可以从部署内部向其公开自定义指标,然后可以用于自动扩展该部署。

创建一个新类,该类实现 VoodooSMS\LaravelMetrics\Interfaces\MetricVoodooSMS\LaravelMetrics\Interfaces\PrometheusMetric 接口,或扩展 VoodooSMS\LaravelMetrics\Abstracts\PrometheusMetric 类。您可以使用 php artisan make:metric --prometheus 命令为您生成此文件。(注意:此生成的类具有 $channels 属性设置为 [PrometheusChannel::class],因此如果您想通过其他通道广播此指标,则需要更新此属性。

对于 Prometheus 指标,还需要定义一个方法

public function getPrometheusKey(): string
{
    return 'queue_size{queue="multisms"}';
}

这是 Prometheus 会抓取的指标标签,有关更多信息,请参阅 Prometheus 文档

暴露 Prometheus 指标的最后一步是向您的路由文件中添加

use VoodooSMS\LaravelMetrics\Metrics;

Metrics::routes();

以便将 /metrics 端点注册到路由器中。

注意:由于 Prometheus 通过轮询 /metrics 端点来收集数据,因此最新结果的 Prometheus 指标存储在缓存中以提高响应时间(如果没有缓存并且收集大量指标,这可能会花费很长时间)。这意味着运行 php artisan cache:clear 将影响此端点的响应时间。

要使 Prometheus 从此端点抓取指标,请向 nginx/php-fpm 部署添加以下注释

prometheus.io/scrape: "true"
prometheus.io/path: /metrics
prometheus.io/port: "80"

或者,您可以使用导出器 voodoosms/metrics-exporter,传递 redis 连接详细信息。此镜像将连接到 redis 并在端口 8080 的 /metrics 上公开指标。

指标发现

您可以使用包的自动发现来查找和处理您的指标类。对于默认的 Laravel 安装,您只需在 app/Metrics 中创建您的指标即可。如果您将类存储在不同的文件夹/命名空间中,则需要相应地设置 metrics.pathmetrics.namespace 配置值。

或者,您可以设置 metrics.autodiscover 为 false,并将 metrics.metrics 数组设置为定义您的指标类。这些必须是完全限定的类名,例如 TestMetric::class 或它将不起作用。

定义通道

通道是您的指标发送到的地方。有三个内置通道

  • VoodooSMS\LaravelMetrics\Channels\StackChannel - 默认的Laravel日志文件
  • VoodooSMS\LaravelMetrics\Channels\DatadogChannel - 发送Datadog日志
  • VoodooSMS\LaravelMetrics\Channels\CacheChannel - 将缓存的度量导出到Redis(需要Redis)
  • VoodooSMS\LaravelMetrics\Channels\PrometheusChannel - 导出Prometheus度量(需要Redis)

您可以通过创建一个实现了VoodooSMS\LaravelMetrics\Interfaces\Channel接口的类来轻松添加自己的通道。您还可以运行php artisan make:metrics-channel命令来自动生成。

您可以在配置metrics.reporting.channels中设置默认的通道,度量数据将发送到这些通道。这应该是一个完全限定的通道类数组,例如:


[
    'reporting' => [
        'channels' => [
            VoodooSMS\LaravelMetrics\Channels\StackChannel::class,
        ]
    ],
]

或者,如果您想要为特定的度量设置不同的通道,您可以在度量类上设置protected $channels属性

protected ?array $channels = [StackChannel::class];

注意:如果在类中设置了通道属性,它将只发送到该数组中的通道。

收集与发布度量

您可以使用VoodooSMS\LaravelMetrics\Metrics类来收集和发送这些度量(如果您需要,可以实例化自己的CollectorEmitter实例)。您可以自己实例化它,或者让Laravel通过依赖注入来完成。

一旦您有了Metrics类的实例,只需调用handle()方法。

命令

您可以在终端中调用内置命令来收集并显示度量

php artisan metrics:collect

您可以在终端中调用内置命令来收集并发布度量

php artisan metrics:emit

此命令将无限期运行,并根据配置metrics.reporting.interval每x秒收集和发布一次度量。默认为每5秒一次。

部署

有一个可以用来发布这些度量的镜像voodoosms/metrics(更多详情请查看Docker Hub仓库)。

要使用此镜像,您只需要将Laravel代码复制到/var/www/microservice,然后metrics:emit命令将是容器的入口点。