danaide / prometheus_client_php
Prometheus 仪表库,用于 PHP 应用程序。
v1.1.3
2021-06-11 20:50 UTC
Requires
- php: ^7.2
- ext-json: *
- guzzlehttp/guzzle: ^6.3
- symfony/polyfill-apcu: ^1.6
Requires (Dev)
- phpunit/phpunit: ^8.4
- squizlabs/php_codesniffer: ^3.5
Suggests
- ext-apc: Required if using APCu.
- ext-redis: Required if using Redis.
Replaces
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- dev-master / 1.0.x-dev
- 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-7-error-when-rendering-multiple-histograms
- dev-5-Add-_sum-and-_count-for-each-set-of-labels-in-histograms
- dev-3-allow-changing-labels-keeping-the-metrics-values
- dev-allow-multiple-labels-on-same-metric
- dev-develop
This package is auto-updated.
Last update: 2024-09-12 03:45:09 UTC
README
此库使用 Redis 或 APCu 进行客户端聚合。如果使用 Redis,我们建议在您的 PHP 工作进程旁边运行一个本地 Redis 实例。
它是如何工作的?
通常 PHP 工作进程不共享任何状态。您可以从三种适配器中选择。Redis、APC 或内存适配器。虽然第一个需要一个单独的二进制文件运行,但第二个只需要安装 APC 扩展。如果您不需要在请求之间持久化度量值(例如,长时间运行的 cron 作业或脚本),内存适配器可能适合使用。
安装
作为 Composer 依赖项添加
composer require endclothing/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']);
手动注册和检索度量值(这些步骤在 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());
高级使用
高级直方图使用
在实例化时传递空数组给 bucket 参数,将使用一组默认的桶。虽然这对于典型的 Web 应用程序来说是一个很好的基础,但有一个命名构造函数可以帮助生成指数/几何桶。
例如
Histogram::exponentialBuckets(0.05, 1.5, 10);
这将从 1.5 的值开始桶,每个桶增长 1.5 倍,跨越 10 个桶。
还可以查看 示例。
开发
依赖项
- PHP ^7.3
- 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=redis vendor/bin/phpunit tests/Test/