renoki-co / laravel-exporter-contracts
Laravel 中 Prometheus 导出基础合约实现。
Requires
- php: ^8.0
- illuminate/config: ^8.83|^9.0.1
- illuminate/routing: ^8.83|^9.0.1
- illuminate/support: ^8.83|^9.0.1
- promphp/prometheus_client_php: ^2.4
Requires (Dev)
- mockery/mockery: ^1.5
- orchestra/testbench: ^6.28|^7.0
- orchestra/testbench-core: ^6.28|^7.0
- phpunit/phpunit: ^9.5.21
- dev-master
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.0
- 1.x-dev
- 1.4.0
- 1.3.0
- 1.2.0
- 1.1.0
- 1.0.0
- dev-dependabot/composer/orchestra/testbench-core-tw-6.50.2
- dev-dependabot/composer/orchestra/testbench-tw-6.44.2
- dev-dependabot/github_actions/codecov/codecov-action-4.4.1
- dev-dependabot/composer/phpunit/phpunit-tw-9.6.19
- dev-dependabot/github_actions/actions/cache-4.0.2
- dev-dependabot/composer/promphp/prometheus_client_php-tw-2.10
This package is auto-updated.
Last update: 2024-09-10 13:49:51 UTC
README
Laravel 中 Prometheus 导出基础合约实现。
🤝 支持
如果你在生产应用程序、演示、爱好项目、学校项目等中使用 Renoki Co. 的一个或多个开源包,请通过 GitHub Sponsors 资助我们的工作。 📦
🚀 安装
您可以通过 composer 安装此包
composer require renoki-co/laravel-exporter-contracts
发布配置
$ php artisan vendor:publish --provider="RenokiCo\LaravelExporter\LaravelExporterServiceProvider" --tag="config"
🙌 使用
您需要做的是创建一个 \RenokiCo\LaravelExporter\Metric
类,该类定义了在每次 Prometheus 调用抓取时值的更新方式,以及收集器的定义。
默认情况下,度量标准在 /exporter/group/metrics
端点可用,您可以将 Prometheus 指向它进行抓取。(例如,http://localhost/exporter/group/metrics
)
您可以选择以下类之一进行扩展
\RenokiCo\LaravelExporter\GaugeMetric
用于仪表\RenokiCo\LaravelExporter\CounterMetric
用于计数器
例如,您可以定义用户的仪表
use RenokiCo\LaravelExporter\GaugeMetric; class DatabaseUsers extends GaugeMetric { /** * Get the metric help. * * @return string */ protected function help(): string { return 'Get the total amount of users.'; } /** * Perform the update call on the collector. * Optional, as some metrics can be modified somewhere else. * * @return void */ public function update(): void { $this->set(User::count()); } }
在您的 AppServiceProvider
的 boot()
方法中,注册您的度量标准
use RenokiCo\LaravelExporter\Exporter; class AppServiceProvider extends ServiceProvider { public function boot() { Exporter::register(DatabaseUsers::class); } // ... }
您不需要设置值。当 Prometheus 抓取器请求度量标准时,仪表将自动设置。
标签
您可以通过设置默认值(例如,服务器名称、静态数据等)和在更新时来标记数据。
class DatabaseRecords extends GaugeMetric { /** * Define the default labels with their values. * * @return array */ protected function defaultLabels(): array { return [ 'static_label' => 'static-value', ]; } /** * Get the metric allowed labels. * * @return array */ protected function allowedLabels(): array { return [ 'model', 'static_label', ]; } /** * Perform the update call on the collector. * Optional, as some metrics can be modified somewhere else. * * @return void */ public function update(): void { $models = [ User::class, Post::class, Team::class, ]; foreach ($models as $model) { $this->set( value: $model::count(), labels: ['model' => $model, ]); } } }
分组
如果您希望为不同的度量标准提供不同的端点,请考虑在 $showsOnGroup
属性中指定它
class CustomMetrics extends Metric { /** * The group this metric gets shown into. * * @var string|null */ public static $showsOnGroup = 'metrics-reloaded'; // ... }
在底层,Laravel Exporter 注册了一个路由,允许您抓取任何组
Route::get('/exporter/group/{group?}', ...);
要抓取此特定度量标准(以及与此组关联的其他度量标准),端点是 /exporter/group/metrics-reloaded
(例如,http://localhost/exporter/group/metrics-reloaded
)。
发送字符串响应
在某些情况下,您可能希望导出类似于 Prometheus 格式的字符串响应,而不使用内部度量标准。
要这样做,请使用 exportResponse
函数。该函数将直接返回响应,而不是依赖于 Metric
类和通过 Exporter::register()
函数注册的后续类。
use RenokiCo\LaravelExporter\Exporter; Exporter::exportResponse(function () { return <<<'PROM' # TYPE openswoole_max_conn gauge openswoole_max_conn 256 # TYPE openswoole_coroutine_num gauge openswoole_coroutine_num 1 PROM; );
当访问 /metrics
端点时,响应将是之前声明的响应。
对于自定义组,传递一个包含组名称的第二个参数
use RenokiCo\LaravelExporter\Exporter; Exporter::exportResponse(..., 'metrics-reloaded');
🐛 测试
vendor/bin/phpunit
🤝 贡献
有关详细信息,请参阅 CONTRIBUTING
🔒 安全
如果您发现任何与安全相关的问题,请通过电子邮件 alex@renoki.org 联系,而不是使用问题跟踪器。