Michael_Hampton / metrics
使用智能指标监控您的Laravel应用程序
Requires
- php: ^7.4
- illuminate/support: ^8.8
- laravel/framework: ^8.0
- spatie/test-time: ^1.1
Requires (Dev)
- doctrine/dbal: ^2
- mockery/mockery: ^1.2
- phpunit/phpunit: ^8.5.0
- sempro/phpunit-pretty-print: ^1.0
This package is auto-updated.
Last update: 2024-09-19 06:33:58 UTC
README
简介
此包允许记录您的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模型。
时间序列
使用指标的一个重要方面是从它们中提取方便的时间序列。
目前支持的统计包括count
、average
、max
和min
。
$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。有关更多信息,请参考 此指南。