superbalist / laravel-prometheus-exporter
Laravel 的 Prometheus 导出器
Requires
- php: >=5.6.0
- illuminate/routing: ^5.3 || ^6.0 || ^7.0
- illuminate/support: ^5.3 || ^6.0 || ^7.0
- jimdo/prometheus_client_php: ^0.9.0
Requires (Dev)
- mockery/mockery: ^0.9.5
- phpunit/phpunit: ^5.5
This package is auto-updated.
Last update: 2024-07-25 11:52:26 UTC
README
Laravel 的 Prometheus 导出器。
此包是一个包装器,它将 jimdo/prometheus_client_php 桥接到 Laravel。
安装
composer require superbalist/laravel-prometheus-exporter
在 app.php 中注册服务提供者
'providers' => [ // ... Superbalist\LaravelPrometheusExporter\PrometheusServiceProvider::class, ]
在 app.php 中注册外观
'aliases' => [ // ... 'Prometheus' => Superbalist\LaravelPrometheusExporter\PrometheusFacade::class, ]
配置
此包具有默认配置,它使用以下环境变量。
PROMETHEUS_NAMESPACE=app
PROMETHEUS_METRICS_ROUTE_ENABLED=true
PROMETHEUS_METRICS_ROUTE_PATH=metrics
PROMETHEUS_METRICS_ROUTE_MIDDLEWARE=null
PROMETHEUS_STORAGE_ADAPTER=memory
REDIS_HOST=localhost
REDIS_PORT=6379
PROMETHEUS_REDIS_PREFIX=PROMETHEUS_
要自定义配置文件,请使用 Artisan 发布包配置。
php artisan vendor:publish --provider="Superbalist\LaravelPrometheusExporter\PrometheusServiceProvider"
然后您可以在 app/config/prometheus.php
中编辑生成的配置。
存储适配器
存储适配器用于在请求之间持久化指标。默认启用 memory
适配器,这意味着数据将仅在当前请求中持久化。我们建议在生产环境中使用 redis
或 apc
适配器。
使用 PROMETHEUS_STORAGE_ADAPTER
环境变量来指定存储适配器。
如果使用 redis
,还需要配置 REDIS_HOST
和 REDIS_PORT
变量。
导出指标
此包添加了一个默认启用的 /metrics
端点,用于暴露收集器收集的所有指标。
可以使用 PROMETHEUS_METRICS_ROUTE_ENABLED
变量打开/关闭此,也可以使用 PROMETHEUS_METRICS_ROUTE_PATH
变量更改它。
如果您想保护此端点,可以编写任何自定义中间件并使用 PROMETHEUS_METRICS_ROUTE_MIDDLEWARE
启用它。
收集器
收集器是一个类,实现了 CollectorInterface,负责收集一个或多个指标的指标。
请参阅此存储库中包含的 ExampleCollector。
您可以通过将它们添加到 prometheus.php 配置中的 collectors
数组来自动加载您的收集器。
使用方法
// retrieve the exporter $exporter = app(\Superbalist\LaravelPrometheusExporter::class); // or $exporter = app('prometheus'); // or $exporter = Prometheus::getFacadeRoot(); // register a new collector $collector = new \My\New\Collector(); $exporter->registerCollector($collector); // retrieve all collectors var_dump($exporter->getCollectors()); // retrieve a collector by name $collector = $exporter->getCollector('user'); // export all metrics // this is called automatically when the /metrics end-point is hit var_dump($exporter->export()); // the following methods can be used to create and interact with counters, gauges and histograms directly // these methods will typically be called by collectors, but can be used to register any custom metrics directly, // without the need of a collector // create a counter $counter = $exporter->registerCounter('search_requests_total', 'The total number of search requests.'); $counter->inc(); // increment by 1 $counter->incBy(2); // create a counter (with labels) $counter = $exporter->registerCounter('search_requests_total', 'The total number of search requests.', ['request_type']); $counter->inc(['GET']); // increment by 1 $counter->incBy(2, ['GET']); // retrieve a counter $counter = $exporter->getCounter('search_requests_total'); // create a gauge $gauge = $exporter->registerGauge('users_online_total', 'The total number of users online.'); $gauge->inc(); // increment by 1 $gauge->incBy(2); $gauge->dec(); // decrement by 1 $gauge->decBy(2); $gauge->set(36); // create a gauge (with labels) $gauge = $exporter->registerGauge('users_online_total', 'The total number of users online.', ['group']); $gauge->inc(['staff']); // increment by 1 $gauge->incBy(2, ['staff']); $gauge->dec(['staff']); // decrement by 1 $gauge->decBy(2, ['staff']); $gauge->set(36, ['staff']); // retrieve a gauge $counter = $exporter->getGauge('users_online_total'); // create a histogram $histogram = $exporter->registerHistogram( 'response_time_seconds', 'The response time of a request.', [], [0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0] ); // the buckets must be in asc order // if buckets aren't specified, the default 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0 buckets will be used $histogram->observe(5.0); // create a histogram (with labels) $histogram = $exporter->registerHistogram( 'response_time_seconds', 'The response time of a request.', ['request_type'], [0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0] ); // the buckets must be in asc order // if buckets aren't specified, the default 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0 buckets will be used $histogram->observe(5.0, ['GET']); // retrieve a histogram $counter = $exporter->getHistogram('response_time_seconds');