voodoosms / laravel-metrics
Laravel Metrics 包
Requires
- php: ^7.4|^8.0
- illuminate/support: ~7|~8|~9
- voodoosms/datadog-logging: ^1.0
Requires (Dev)
- orchestra/testbench: ~5|~6
- phpunit/phpunit: ~9.0
- timacdonald/log-fake: ^1.9
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 命令为您生成此文件。
然后编写 key 和 value 方法。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\Metric 和 VoodooSMS\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.path 和 metrics.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类来收集和发送这些度量(如果您需要,可以实例化自己的Collector和Emitter实例)。您可以自己实例化它,或者让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命令将是容器的入口点。