此包的最新版本(dev-master)没有可用的许可证信息。

使用智能指标监控您的Laravel应用程序

dev-master 2021-01-18 23:03 UTC

This package is auto-updated.

Last update: 2024-09-19 06:33:58 UTC


README

Packagist Version GitHub Workflow Status

简介

此包允许记录您的laravel应用程序中的指标并进行统计。

它还提供了一些用于实现简单警报机制的工具。

安装

要安装此包,请运行

composer require robertogallea/laravel-metrics

Laravel自动发现将注册包ServiceProvider和别名。

配置

如果您想编辑包配置,请运行

php artisan vendor:publish --provider=robertogallea\\LaravelMetrics\\MetricsServiceProvider --tag=config

用法

该包依赖于Metrics的概念。指标是应用程序中某种类型的度量。

目前支持两种类型的度量

  • 标记
  • 计时器

标记就是它的名字。它们可以用来确定应用程序中事件发生的次数。

计时器跟踪事件的持续时间。它们可以用来确定事件完成所需的时间。

保存指标

这是使用指标的最简单方法。在代码的任何部分,您都可以按以下方式保存指标

  • 标记
$registry = resolve(MetricRegistry::class);
$marker = $registry->meter('metric-name');

$marker->mark();


// or you can use facade
$marker = \Metrics::meter('metric-name');

$marker->mark();
  • 计时器
$registry = resolve(MetricRegistry::class);
$timer = $registry->meter('metric-name', MeterType::TIMER);

$timerId = $timer->start();

// or you can use facade
$timer = \Metrics::meter('metric-name', MeterType::TIMER);

$timerId = $timer->start();

doSomething();

$timer->stop($timerId);

默认情况下,计时器使用分辨率存储。但是,可以在停止计时器之前更改所需的分辨率

$timer->inMicrosceconds()->stop($timerId);
$timer->inMilliseconds()->stop($timerId);
$timer->inSeconds()->stop($timerId);
$timer->inMinutes()->stop($timerId);
$timer->inHours()->stop($timerId);
$timer->inDays()->stop($timerId);
$timer->inWeeks()->stop($timerId);
$timer->inMonths()->stop($timerId);
$timer->inYears()->stop($timerId);

存储元数据

如果需要,您还可以通过将数据数组传递给mark()start()/stop()方法来在指标中存储额外的元数据

标记

$data = ['key' => 'value'];
$marker->mark($data);

计时器

$data = ['key' => 'value'];
$timerId = $timer->start($data);

doSomething();

$timer->stop($timerId);

$timerId = $timer->start();

$data = doSomething();

$timer->stop($timerId, $data);

测量事件

您可以通过以下三个步骤在事件派发过程中自动保存标记指标

  • 实现PerformsMetrics接口;
  • 使用Measurable特质;
  • 定义$meter字段,并指定您要使用的指标名称。
class TestEvent implements PerformsMetrics
{
    use Dispatchable;
    use Measurable;

    protected $meter = 'test';
}

现在,每次您派发事件时,标记都会自动保存

event(new TestEvent());

创建可测量的事件

为了您的方便,已注册了一个用于创建可测量事件的命令

php artisan make:measurable-event MyMeterEvent

测量请求

您还可以通过使用提供的两个中间件来测量请求

Route::get('/', 'HomeController@index')->middleware('mark:home-visits');

使用Marker保存的home-visits名称;

Route::get('/page/{page}', 'PagesController@show')->middleware('measure-time:page-visits-duration');

使用page-visit-duration名称保存包含请求持续时间的Timer

Route::get('/details', 'DetailsController@index')->middleware('measure-time:details-duration,milliseconds');

计时器可以设置为一个特定的分辨率,使用第二个参数。

检索指标

有两种检索指标的方法

  • 使用MetricRegistry
$registry = resolve(MetricRegistry::class);
$meter = $registry->meter('meter-name');
$meter->get(); // gets the entire dataset for the meter

$from = Carbon::yesterday();
$meter->after($from)->get(); // gets the dataset for meters recorded after $from

$to = Carbon::tomorrow();
$meter->before($from)->get(); // gets the dataset for meters recorded before $to

$meter->between($from, $to)->get(); // gets the dataset for meters recorded between $from and $to
  • 直接查询Metric Eloquent模型。

时间序列

使用指标的一个重要方面是从它们中提取方便的时间序列。

目前支持的统计包括countaveragemaxmin

$registry = resolve(MetricRegistry::class);

$timer = $registry->meter('meter-name', MeterType::TIMER);

$from = Carbon::now()->subYears(2);
$to = Carbon::today();

$timeSeries = $this->timer->bySecond($from, $to, TimeSeriesStatistics::COUNT);
$timeSeries = $this->timer->byMinute($from, $to, TimeSeriesStatistics::AVERAGE);
$timeSeries = $this->timer->byHour($from, $to, TimeSeriesStatistics::MAX);
$timeSeries = $this->timer->byMonth($from, $to, TimeSeriesStatistics::MIN);
$timeSeries = $this->timer->byYear($from, $to, TimeSeriesStatistics::MIN);

时间序列生成为自定义类型为MetricCollection的集合。

时间序列上的统计

一旦提取了时间序列,您就可以对其执行统计。除了标准的Collection方法,如mean()max()min()avg()等之外,MetricCollection类还添加了执行其他操作的方法。实际上以下是被支持的

  • stDev() - 计算值的标准差
  • variance() - 计算值的方差
  • cumulative() - 计算离散概率密度函数(即累积和)
  • histogram($nbins) - 使用 nbins 个区间计算值的直方图。
  • kolmSmirn($collection) - 计算用于比较两个时间序列的 Kolmogorov-Smirnov 距离

Treeware

您可以使用此包,但如果它被用于生产环境,您需要购买一棵树。

现在人们都知道,应对气候危机并保持我们的温度不超过1.5C的最好工具之一是 植树。如果您支持此包并贡献给Treeware森林,您将创造当地家庭的就业机会并恢复野生动物栖息地。

您可以在 offset.earth/treeware 购买树木。

treeware.earth 了解更多关于Treeware的信息。

问题、问题和Pull Requests

您可以在 问题部分 报告问题和提问。请在您的问题前加上 ISSUE: 和您的提问前加上 QUESTION。

如果您有问题,请先查看已关闭的问题。随着时间的推移,我已经回答了相当多的问题。

要提交Pull Request,请先fork此存储库,创建一个新分支并将您的新/更新代码提交到该分支。然后从您的分支打开Pull Request。有关更多信息,请参考 此指南