promphp / prometheus_client_php
PHP应用程序的Prometheus仪表库。
Requires
- php: ^7.2|^8.0
- ext-json: *
Requires (Dev)
- guzzlehttp/guzzle: ^6.3|^7.0
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^1.5.4
- phpstan/phpstan-phpunit: ^1.1.0
- phpstan/phpstan-strict-rules: ^1.1.0
- phpunit/phpunit: ^9.4
- squizlabs/php_codesniffer: ^3.6
- symfony/polyfill-apcu: ^1.6
Suggests
- ext-apc: Required if using APCu.
- ext-pdo: Required if using PDO.
- ext-redis: Required if using Redis.
- promphp/prometheus_push_gateway_php: An easy client for using Prometheus PushGateway.
- symfony/polyfill-apcu: Required if you use APCu on PHP8.0+
- dev-main
- v2.11.0
- v2.10.0
- v2.9.0
- v2.8.0
- v2.7.2
- v2.7.1
- v2.7.0
- v2.6.2
- v2.6.1
- v2.6.0
- v2.5.0
- v2.4.0
- v2.3.0
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.1
- v2.1.0
- v2.0.1
- v2.0.0
- v1.0.3
- 1.0.1
- v1.0.0
- v0.9.1
- v0.9.0
- v0.8.0
- v0.7.0
- v0.6.0
- v0.5.1
- v0.5.0
- v0.4.5
- v0.4.4
- v0.4.3
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.0
- v0.2.1
- v0.2.0
- v0.1.0
- dev-remove-usage-of-apcu_inc
- dev-test-on-php-8
This package is auto-updated.
Last update: 2024-09-05 08:13:52 UTC
README
此库使用Redis或APCu进行客户端聚合。如果使用Redis,我们建议在PHP工作进程旁边运行本地Redis实例。
它是如何工作的?
通常PHP工作进程不会共享任何状态。您可以选择四种适配器。Redis、APC、APCng或内存适配器。第一个需要单独的二进制运行,而第二个和第三个只需要安装APC扩展。如果您不需要在请求之间持久化度量(例如,长时间运行的cron作业或脚本),内存适配器可能适合使用。
安装
作为Composer依赖项添加
composer require promphp/prometheus_client_php
用法
简单的计数器
\Prometheus\CollectorRegistry::getDefault() ->getOrRegisterCounter('', 'some_quick_counter', 'just a quick measurement') ->inc();
编写一些增强的度量
$registry = \Prometheus\CollectorRegistry::getDefault(); $counter = $registry->getOrRegisterCounter('test', 'some_counter', 'it increases', ['type']); $counter->incBy(3, ['blue']); $gauge = $registry->getOrRegisterGauge('test', 'some_gauge', 'it sets', ['type']); $gauge->set(2.5, ['blue']); $histogram = $registry->getOrRegisterHistogram('test', 'some_histogram', 'it observes', ['type'], [0.1, 1, 2, 3.5, 4, 5, 6, 7, 8, 9]); $histogram->observe(3.5, ['blue']); $summary = $registry->getOrRegisterSummary('test', 'some_summary', 'it observes a sliding window', ['type'], 84600, [0.01, 0.05, 0.5, 0.95, 0.99]); $summary->observe(5, ['blue']);
手动注册和检索度量(这些步骤在getOrRegister...
方法中组合)
$registry = \Prometheus\CollectorRegistry::getDefault(); $counterA = $registry->registerCounter('test', 'some_counter', 'it increases', ['type']); $counterA->incBy(3, ['blue']); // once a metric is registered, it can be retrieved using e.g. getCounter: $counterB = $registry->getCounter('test', 'some_counter') $counterB->incBy(2, ['red']);
公开度量
$registry = \Prometheus\CollectorRegistry::getDefault(); $renderer = new RenderTextFormat(); $result = $renderer->render($registry->getMetricFamilySamples()); header('Content-type: ' . RenderTextFormat::MIME_TYPE); echo $result;
更改Redis选项(示例显示默认值)
\Prometheus\Storage\Redis::setDefaultOptions( [ 'host' => '127.0.0.1', 'port' => 6379, 'password' => null, 'timeout' => 0.1, // in seconds 'read_timeout' => '10', // in seconds 'persistent_connections' => false ] );
使用内存存储
$registry = new CollectorRegistry(new InMemory()); $counter = $registry->registerCounter('test', 'some_counter', 'it increases', ['type']); $counter->incBy(3, ['blue']); $renderer = new RenderTextFormat(); $result = $renderer->render($registry->getMetricFamilySamples());
使用APC或APCng存储
$registry = new CollectorRegistry(new APCng()); or $registry = new CollectorRegistry(new APC());
(有关更多详细信息,请参阅README.APCng.md
文件)
使用PDO存储
$registry = new CollectorRegistry(new \PDO('mysql:host=localhost;dbname=prometheus', 'username', 'password')); or $registry = new CollectorRegistry(new \PDO('sqlite::memory:'));
高级用法
高级直方图用法
在实例化时为桶参数传递空数组时,将使用一组默认桶。虽然这对于典型的Web应用来说是一个很好的基础,但还有命名构造函数可以帮助生成指数/几何桶。
例如
Histogram::exponentialBuckets(0.05, 1.5, 10);
这将使用0.05的值开始您的桶,每个桶增加1.5倍,总共10个桶。
还可以查看示例。
PushGateway支持
从2.0.0版本开始,此库不再支持Prometheus PushGateway,因为我们希望将此包尽可能缩小。如果您需要Prometheus PushGateway支持,可以使用配套库:https://github.com/PromPHP/prometheus_push_gateway_php
composer require promphp/prometheus_push_gateway_php
开发
依赖关系
- PHP ^7.2 | ^8.0
- PHP Redis扩展
- PHP APCu扩展
- Composer
- Redis
启动Redis实例
docker-compose up redis
运行测试
composer install
# when Redis is not listening on localhost:
# export REDIS_HOST=192.168.59.100
./vendor/bin/phpunit
黑盒测试
只需使用docker-compose启动nginx、fpm和Redis设置。
docker-compose up
选择您想要测试的适配器。
docker-compose run phpunit env ADAPTER=apc vendor/bin/phpunit tests/Test/
docker-compose run phpunit env ADAPTER=apcng vendor/bin/phpunit tests/Test/
docker-compose run phpunit env ADAPTER=redis vendor/bin/phpunit tests/Test/
性能测试
此测试目前测试APC和APCng适配器,并报告APCng适配器是否在任何操作上较慢。
phpunit vendor/bin/phpunit tests/Test/ --group Performance
此测试也可以在容器内运行。
docker-compose up
docker-compose run phpunit vendor/bin/phpunit tests/Test/ --group Performance