lazyshot / prometheus-php
PHP的Prometheus指标客户端
Requires
- php: ^7.1
This package is not auto-updated.
Last update: 2020-08-21 20:12:32 UTC
README
这是一个非官方的Prometheus(《https://prometheus.ac.cn/》)PHP客户端。这个分支与@TimeZynk的分支几乎相同,除了它包含针对计数器和直方图的测试脚本。此外,还提供了一个函数,用于使用curl将序列化客户端数据推送到Prometheus推送网关。最后,还提供了Prometheus、Prometheus推送网关和一些示例查询的设置说明及链接。
注意 如果你还没有阅读过一些Prometheus文档,强烈建议你阅读一下。
https://prometheus.ac.cn/docs/introduction/getting_started/
要求
在本地主机上运行的Prometheus服务器,使用提供的.yml文件。在本地主机上运行的Prometheus推送网关,监听端口9091。已启用curl扩展的PHP安装...如果你不知道如何做,可以查找相关信息。
设置Prometheus
让我们启动Prometheus服务器,使其只监听我们将在下一步中设置的推送网关。我们故意不使Prometheus监听自己,这样以后更容易找到我们发送给它的数据。
- 将"example_config.yml"文件放在Prometheus服务器安装的位置旁边。
- 如果Prometheus正在运行,请杀死服务器。
- 可选 删除Prometheus存储数据的数据文件夹/data/。只有当你想删除到目前为止已经进行的任何测试数据时才执行此操作。
- 运行此命令。
./prometheus -config.file=no_prom.yml
Prometheus现在正在运行,并配置为从本地主机端口9091拉取数据。让我们给它一些东西去拉取!
设置Prometheus推送网关
推送网关允许短生命周期的应用程序仍然能够被跟踪,这对于从这些应用程序中拉取数据来说通常是一个难题。此外,它以相对较小的代价简化了将我们想要跟踪的数据发送到Prometheus的任务。Prometheus文档涵盖了PULL与PUSH日志的优势。
推送网关链接 https://github.com/prometheus/pushgateway
- 按照prometheus pushgateway git中的说明进行操作,以安装并运行在本地主机上的推送网关。
- 就这样!
支持的指标
在解释如何使用客户端之前,了解PHP客户端支持的指标很重要。
- 计数器 这个指标只能通过1或更多的方式递增。
- 仪表 这个指标既可以递增也可以递减。这限制了某些查询函数的可用性。
- 直方图 这个指标是一系列桶,它统计每个桶中落入的数据点的数量,以及这些数据点值的总和。
- 不支持摘要。
强烈建议查看 Prometheus 文档中的“概念 => 数据模型”部分,以了解这些指标的复杂性。
使用 PHP 推送网关客户端
这个分支尝试简化客户端的使用过程,以便不需要外部库,一切应该都可以直接使用。
要开始使用客户端,我们只需要包含一个文件,即 Client.php。
require_once dirname(__FILE__) . '/../src/Client.php';
创建一个新的客户端很简单。由于 PHP 客户端位于 Prometheus 命名空间中,我们创建新客户端时必须包含它。此外,客户端必须传递一个选项列表。目前唯一的有效选项是 'base_uri'。如果您不打算使用内置的 "pushMetrics" 函数,您可以将此设置为空字符串。
$client = new Prometheus\Client('https://:9091/metrics/job/');
接下来,我们告诉客户端创建一个新的指标。在这里,我们创建一个新的 Counter。
$counter = $client->newCounter([ 'namespace' => 'php_client', 'subsystem' => 'testing', 'name' => 'counter', 'help' => 'Testing the PHPClients Counter', ]);
我们可以使用新的计数器来增加不同的事物。在这里,我们假装在计算返回给客户端的 "home.php" 页面的想象中的服务器状态码。
$counter->increment( [ 'url' => 'home.php', 'status_code' => 200 ], rand( 1, 50 ) ); $counter->increment( [ 'url' => 'home.php', 'status_code' => 404 ], rand( 1, 50 ) );
一旦收集到足够的数据,我们就告诉客户端将指标发送到 Prometheus 推送网关。我们可以直接将数据发送到网关。或者,我们可以指定一个作业,或者该作业的一个实例。Prometheus 推送网关 Git 中的文档涵盖了设置作业和实例时发生的具体内容,这里不会涉及。
$client->pushMetrics( "pretend_server", $job_id );
以下是上面的代码在一个代码段中。
require_once dirname(__FILE__) . '/../src/Client.php'; $client = new Prometheus\Client('https://:9091/metrics/job/'); $counter = $client->newCounter([ 'namespace' => 'php_client', 'subsystem' => 'testing', 'name' => 'counter', 'help' => 'Testing the PHPClients Counter', ]); $counter->increment( [ 'url' => 'home.php', 'status_code' => 200 ], rand( 1, 50 ) ); $counter->increment( [ 'url' => 'home.php', 'status_code' => 404 ], rand( 1, 50 ) ); $client->pushMetrics( "pretend_server", "test_instance" );
进一步探索
运行 /test/histogram_test.php 函数一分钟或两分钟。输出很平凡,所以去喝杯咖啡。现在您可以在网络浏览器中导航到 "https://:9090/graph" 并执行以下查询。
rate(meta_data_tv_elements_per_hit_sum[5m]) / rate(meta_data_tv_elements_per_hit_count[5m])
调整图形以显示过去 15 分钟的数据。这是一个可以准确显示从两个不同域名中提取的每个点击元素数量的图形。
仅序列化数据
如果您想看到发送到服务器的数据,以便通过服务器暴露它或做任何您想做的事情,您可以简单地从客户端调用 serialize() 函数。
echo $client->serialize();