ml65/prometheus_client_php

Prometheus PHP应用程序的仪表库。

v2.8.0 2022-08-05 20:38 UTC

This package is auto-updated.

Last update: 2024-09-06 01:06:15 UTC


README

Tests

此库使用Redis或APCu进行客户端聚合。如果使用Redis,我们建议在您的PHP工作进程旁边运行本地Redis实例。

它是如何工作的?

通常PHP工作进程不会共享任何状态。您可以选择四种适配器:Redis、APC、APCng或内存适配器。虽然第一种需要一个单独的二进制文件运行,但第二种和第三种只需要安装APC扩展。如果您不需要在请求之间持久化指标(例如,长时间运行的cron作业或脚本),内存适配器可能适合使用。

安装

将其作为Composer依赖项添加

composer require ml65/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',  // host redis server or sentinel server
        'port' => 6379,         // port redis server or sentinel server
        'password' => null,
        'timeout' => 0.1,       // in seconds
        'read_timeout' => '10', // in seconds
        'persistent_connections' => false,
        'sentinels' => false,   // support sentinel . Before requesting to redis, a request is made to the sentinel to get 
                                // the address and port of the master redis server.
    ]
);

使用InMemory存储

$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文件)

高级用法

高级直方图用法

在实例化时为桶参数传递空数组,将使用一组默认桶。

例如

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