lightlogs / beacon
为Laravel提供应用级数据收集器包
Requires
- php: ^8
- guzzlehttp/guzzle: ^7
- illuminate/support: ^9.0
Requires (Dev)
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: 3.*
This package is auto-updated.
Last update: 2024-08-24 09:24:45 UTC
README
此收集器实现了针对Laravel的本地解决方案,用于收集和发送应用程序统计信息。此客户端旨在与Lightlogs收集器包配合使用,该包可安装在任何Laravel 9+安装上以接收指标。
为什么需要这样的收集器?收集应用程序统计信息可以非常有用,以了解应用程序的工作情况,在它们造成麻烦之前检测任何热点,以及了解用户如何与系统交互(或滥用系统)。例如,您可以为监控应用程序接收到的HTTP请求创建一个度量,并使用它来管理您的资源/基础设施的配置。然后,这些数据可以展示在图形显示系统(如Grafana)中,该系统可以显示非常详细的时间序列图表,请参见下面的示例
强烈建议将您的指标发送到与您监控的端点不同的端点。在发生故障的情况下,您将能够看到事件发生之前应用程序正在做什么。这可能提供有关问题根源的有用信息。
在我们的用例中,我们将Grafana与Timescale配对以存储和展示我们的数据。
安装
您可以通过composer安装此包
composer require lightlogs/beacon
配置
使用您的BEACON_ENDPOINT和BEACON_API_KEY更新config/beacon.php。默认情况下,BEACON_ENABLED设置为false,当您准备好启用此包时,您希望将其设置为TRUE。
概述
此包使您能够发送多种不同的度量类型,具体取决于您要记录的内容,目前支持4种类型
- 计数器:如果您想记录页面浏览量或访客数量,您将使用计数器度量。这是一个简单的增加/减少计数器,它是针对时间记录的。
- 仪表:如果您需要记录随时间变化的具体值,则将使用仪表度量,这将允许您在时间上存储双值。
- 多度量:如果您需要记录随时间变化的上至5个双值,则可以使用多度量。例如,磁盘/内存消耗
- 混合度量:如果您需要记录一系列数据点,混合度量将非常合适,它允许捕获一系列整数/双精度值和字符串值。这可以用于记录网站上访问的URL。
使用
计数器
发送度量的默认方法是创建一个普通的PHP类(每种类型的示例可以在src/ExampleMetric中找到),以下是一个计数器度量的示例。
namespace Lightlogs\Beacon\ExampleMetric; class SpecialCounter extends GenericCounter { /** * The type of Sample * * Monotonically incrementing counter * * @var string */ public $type = 'counter'; /** * The name of the counter * * @var string */ public $name = ''; /** * The datetime of the counter measurement * * date("Y-m-d H:i:s") * * @var DateTime */ public $datetime; /** * The increment amount... should always be * set to 0 * * @var integer */ public $metric = 0; }
- string $type定义度量类型,在这种情况下为'counter'。
- string $name定义用于定义此度量的字符串键,例如,如果我们正在计算用户登录次数,则示例名称可以是'user.login',您稍后将在数据库查询中使用此名称来绘制您的度量。
- datetime $datetime定义记录此事件的日期时间。这是由系统自动填充的,但是您可以覆盖它。
- int $metric定义金额的增加量。默认情况下,系统将应用增加值为1或减少值为-1,否则如果需要,此字段也可以被覆盖。
创建您的类后,每次您需要创建计数器度量时,它将看起来像这样
LightLogs::create(new GenericCounter()) ->increment() ->batch();
这将批量处理指标请求,以保留系统资源。底层的调度器作业将每5分钟处理一次所有指标(请注意,您需要运行 Laravel 调度器才能分发这些作业)。
批量处理底层使用 Guzzle 异步请求以提高效率并最小化收集器的工作时间。
由于延迟开销,不建议在生产环境中执行此操作,但如果您的指标需要立即触发,您可以使用以下同步方式。
LightLogs::create(new GenericCounter()) ->increment() ->send();
处理需要立即触发且不阻塞的作业的更好方法是使用 ->batch() 或 ->queue() 方法,这将向应用队列派发作业。
LightLogs::create(new GenericCounter()) ->increment() ->queue();
本包包含一系列系统指标收集器,可以通过修改 config/beacon.php 中的 system_logging 数组来启用或禁用。
混合指标
在下一个示例中,我们将收集我们 API 的访问者指标,我们将使用 MixedMetrics 收集器类型来捕获一系列数据,如下所示
namespace App\Beacon; use Lightlogs\Beacon\ExampleMetric\GenericMixedMetric; class DbQuery extends GenericMixedMetric { /** * The type of Sample. * * @var string */ public $type = 'mixed_metric'; /** * The name of the metric. * @var string */ public $name = 'db.queries'; /** * The datetime of the metric measurement. * * date("Y-m-d H:i:s") * * @var DateTime */ public $datetime; /** * @var string */ public $string_metric5 = 'method'; /** * @var string */ public $string_metric6 = 'url'; /** * @var string */ public $string_metric7 = 'ip_address'; /** * @var int */ public $int_metric1 = 1; /** * @var int */ public $double_metric2 = 1; public function __construct($string_metric5, $string_metric6, $int_metric1, $double_metric2, $string_metric7) { $this->string_metric5 = $string_metric5; $this->string_metric6 = $string_metric6; $this->int_metric1 = $int_metric1; $this->double_metric2 = $double_metric2; $this->string_metric7 = $string_metric7; } }
在您将捕获数据的应用程序中,您将构造您的收集器如下
LightLogs::create(new DbQuery($request_method, $url, $count, $request_duration, $ip_address)) ->batch();
命令行选项
您可以从命令行强制发送统计数据
php artisan beacon:force-send
或从缓存中清除统计数据
php artisan beacon:purge
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 变更日志。
贡献
有关详细信息,请参阅 贡献指南。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件 turbo124@gmail.com 联系,而不是使用问题跟踪器。
致谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。