gorerider/laravel-prometheus-exporter

适用于 Laravel & Lumen 的 Prometheus 导出器

v1.0.3 2023-05-17 07:57 UTC

README

最初,这是一个基于 traum-ferienwohnungen/laravel-prometheus-exporter 的分支,并更新了依赖项。此工作的主要目标是使库与运行在 PHP 7.4 上的 Laravel 7 和 Lumen 7 兼容。

然而,由于需要支持 guzzlehttp/guzzle 7,依赖项被替换为 PromPHP/prometheus_client_php

描述

Laravel 和 Lumen 网络框架的 Prometheus 导出器。

它通过请求方法、路由路径和响应代码跟踪延迟和请求数量。

安装

composer require gorerider/laravel-prometheus-exporter

适配器

然后从三种存储适配器中选择:内存(默认)、APCu 和 Redis 也可以使用。

APCu

确保已安装和启用 apcu-bc。如果您使用的是官方 PHP docker hub non-alpine 镜像,请查看 Dockerfile 了解如何安装。

Redis

确保已安装和启用 php redis。如果您使用的是官方 PHP docker hub non-alpine 镜像,请查看 Dockerfile 了解如何安装。

默认情况下,它会在 localhost:6379 寻找 redis 服务器。服务器可以在 config/prometheus_exporter.php 中进行配置。

Laravel

如果您在 Laravel 中需要此包,中间件和路由将自动为您配置。

启用 Service Provider

config/app.php 中(如果尚未存在)

'providers' => [
    ...
    /*
     * Package Service Providers...
     */
    gorerider\PrometheusExporter\Providers\LaravelServiceProvider::class,
    ...
]

Lumen

注册 ServiceProvider

bootstrap/app.php

$app->register(gorerider\PrometheusExporter\Providers\LumenServiceProvider::class);

为指标添加端点

bootstrap/app.php

$app->router->get('/metrics', [
    'as' => 'metrics',
    'uses' => 'gorerider\PrometheusExporter\Controllers\LumenMetricsController@metrics',
]);

配置

指标在 /metrics 端点上公开,例如 http://my-service.com/metrics

配置可以在 config/prometheus_exporter.php 中找到。

所有值都可以通过 .env 或环境变量进行配置。

可收集项

如果您想禁用任何可收集项,您需要从 prometheus_exporter.php 配置中删除条目。

Laravel

运行

php artisan vendor:publish

最后,在 app/config/prometheus_exporter.php 中删除收集项

Lumen

将此仓库中的 src/config/prometheus_exporter.php 复制并添加到您的 Lumen 项目的配置目录中。

最后,在 app/config/prometheus_exporter.php 中删除收集项

示例 /metrics

# HELP fpm_accepted_conn accepted_conn
# TYPE fpm_accepted_conn gauge
fpm_accepted_conn 71
# HELP fpm_active_processes active_processes
# TYPE fpm_active_processes gauge
fpm_active_processes 1
# HELP fpm_idle_processes idle_processes
# TYPE fpm_idle_processes gauge
fpm_idle_processes 2
# HELP fpm_listen_queue listen_queue
# TYPE fpm_listen_queue gauge
fpm_listen_queue 0
# HELP fpm_listen_queue_len listen_queue_len
# TYPE fpm_listen_queue_len gauge
fpm_listen_queue_len 128
# HELP fpm_max_active_processes max_active_processes
# TYPE fpm_max_active_processes gauge
fpm_max_active_processes 3
# HELP fpm_max_children_reached max_children_reached
# TYPE fpm_max_children_reached gauge
fpm_max_children_reached 0
# HELP fpm_max_listen_queue max_listen_queue
# TYPE fpm_max_listen_queue gauge
fpm_max_listen_queue 0
# HELP fpm_proc_requests proc requests
# TYPE fpm_proc_requests gauge
fpm_proc_requests{pid="6"} 24
fpm_proc_requests{pid="7"} 24
fpm_proc_requests{pid="732"} 23
# HELP fpm_proc_start_time proc start time
# TYPE fpm_proc_start_time gauge
fpm_proc_start_time{pid="6"} 1596095160
fpm_proc_start_time{pid="7"} 1596095160
fpm_proc_start_time{pid="732"} 1596097386
# HELP fpm_slow_requests slow_requests
# TYPE fpm_slow_requests gauge
fpm_slow_requests 0
# HELP fpm_start_time start_time
# TYPE fpm_start_time gauge
fpm_start_time 1596095160
# HELP opcache_cache_full
# TYPE opcache_cache_full gauge
opcache_cache_full 0
# HELP opcache_interned_strings_usage_buffer_size
# TYPE opcache_interned_strings_usage_buffer_size gauge
opcache_interned_strings_usage_buffer_size 12582464
# HELP opcache_interned_strings_usage_free_memory
# TYPE opcache_interned_strings_usage_free_memory gauge
opcache_interned_strings_usage_free_memory 11203240
# HELP opcache_interned_strings_usage_number_of_strings
# TYPE opcache_interned_strings_usage_number_of_strings gauge
opcache_interned_strings_usage_number_of_strings 20693
# HELP opcache_interned_strings_usage_used_memory
# TYPE opcache_interned_strings_usage_used_memory gauge
opcache_interned_strings_usage_used_memory 1379224
# HELP opcache_memory_usage_free_memory
# TYPE opcache_memory_usage_free_memory gauge
opcache_memory_usage_free_memory 180941720
# HELP opcache_memory_usage_used_memory
# TYPE opcache_memory_usage_used_memory gauge
opcache_memory_usage_used_memory 20181624
# HELP opcache_memory_usage_wasted_memory
# TYPE opcache_memory_usage_wasted_memory gauge
opcache_memory_usage_wasted_memory 203248
# HELP opcache_opcache_enabled
# TYPE opcache_opcache_enabled gauge
opcache_opcache_enabled 1
# HELP opcache_opcache_statistics_blacklist_misses
# TYPE opcache_opcache_statistics_blacklist_misses gauge
opcache_opcache_statistics_blacklist_misses 0
# HELP opcache_opcache_statistics_hits
# TYPE opcache_opcache_statistics_hits gauge
opcache_opcache_statistics_hits 10595
# HELP opcache_opcache_statistics_last_restart_time
# TYPE opcache_opcache_statistics_last_restart_time gauge
opcache_opcache_statistics_last_restart_time 0
# HELP opcache_opcache_statistics_manual_restarts
# TYPE opcache_opcache_statistics_manual_restarts gauge
opcache_opcache_statistics_manual_restarts 0
# HELP opcache_opcache_statistics_max_cached_keys
# TYPE opcache_opcache_statistics_max_cached_keys gauge
opcache_opcache_statistics_max_cached_keys 16229
# HELP opcache_opcache_statistics_misses
# TYPE opcache_opcache_statistics_misses gauge
opcache_opcache_statistics_misses 215
# HELP opcache_opcache_statistics_num_cached_keys
# TYPE opcache_opcache_statistics_num_cached_keys gauge
opcache_opcache_statistics_num_cached_keys 394
# HELP opcache_opcache_statistics_num_cached_scripts
# TYPE opcache_opcache_statistics_num_cached_scripts gauge
opcache_opcache_statistics_num_cached_scripts 202
# HELP opcache_opcache_statistics_oom_restarts
# TYPE opcache_opcache_statistics_oom_restarts gauge
opcache_opcache_statistics_oom_restarts 0
# HELP opcache_opcache_statistics_start_time
# TYPE opcache_opcache_statistics_start_time gauge
opcache_opcache_statistics_start_time 1596095160
# HELP opcache_restart_in_progress
# TYPE opcache_restart_in_progress gauge
opcache_restart_in_progress 0
# HELP opcache_restart_pending
# TYPE opcache_restart_pending gauge
opcache_restart_pending 0
# HELP search_api_request_duration_milliseconds duration of http requests
# TYPE search_api_request_duration_milliseconds histogram
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="50"} 0
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="100"} 0
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="300"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="500"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="700"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="900"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="1000"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="1200"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="1500"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="2000"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="3000"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="5000"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="7500"} 3
search_api_request_duration_milliseconds_bucket{route="GET /",statusCode="200",le="+Inf"} 3
search_api_request_duration_milliseconds_count{route="GET /",statusCode="200"} 3
search_api_request_duration_milliseconds_sum{route="GET /",statusCode="200"} 657.34791755676
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="50"} 0
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="100"} 0
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="300"} 0
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="500"} 0
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="700"} 1
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="900"} 1
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="1000"} 1
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="1200"} 1
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="1500"} 1
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="2000"} 1
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="3000"} 1
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="5000"} 1
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="7500"} 1
search_api_request_duration_milliseconds_bucket{route="GET /asdasd",statusCode="404",le="+Inf"} 1
search_api_request_duration_milliseconds_count{route="GET /asdasd",statusCode="404"} 1
search_api_request_duration_milliseconds_sum{route="GET /asdasd",statusCode="404"} 561.01489067078
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="50"} 0
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="100"} 0
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="300"} 40
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="500"} 49
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="700"} 50
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="900"} 50
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="1000"} 50
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="1200"} 50
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="1500"} 50
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="2000"} 50
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="3000"} 50
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="5000"} 50
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="7500"} 50
search_api_request_duration_milliseconds_bucket{route="GET /metrics",statusCode="200",le="+Inf"} 50
search_api_request_duration_milliseconds_count{route="GET /metrics",statusCode="200"} 50
search_api_request_duration_milliseconds_sum{route="GET /metrics",statusCode="200"} 13587.605237961

注意 所有 HTTP 请求都被仪器化,包括 /metrics 端点本身。