brickheadz/prometheus-php

PHP 8.1或更高版本的Prometheus指标客户端

v1.0.2 2024-05-24 10:01 UTC

This package is auto-updated.

Last update: 2024-09-24 10:52:24 UTC


README

这是一个非官方的Prometheus (https://prometheus.ac.cn/) PHP客户端。这个分支几乎与@TimeZynk分支相同,除了它包括了计数器和直方图的测试脚本。此外,还提供了一个使用curl将序列化客户端数据推送到Prometheus推送网关的功能。最后,还提供了Prometheus、Prometheus推送网关和一些示例查询的设置说明及链接。

注意 如果你还没有阅读Prometheus的一些文档,强烈建议你阅读。

https://prometheus.ac.cn/docs/introduction/getting_started/

需求

一个运行在localhost上的Prometheus服务器,使用提供的.yml文件。一个运行在localhost上、监听9091端口的Prometheus推送网关。一个启用curl扩展的php安装...如果你不知道如何做,可以查找如何进行此操作。

设置Prometheus

让我们启动Prometheus服务器,使其只监听我们将在下一步设置的推送网关。我们故意不让Prometheus监听自己,这样以后更容易找到我们发送给它的数据。

  • 将"example_config.yml"文件放置在Prometheus服务器安装的旁边。
  • 如果Prometheus正在运行,请终止服务器。
  • 可选 删除Prometheus存储数据的/data/文件夹。仅当你想要删除迄今为止所做的任何先前测试数据时才执行此操作。
  • 运行此命令。
    ./prometheus -config.file=no_prom.yml

Prometheus现在正在运行,并配置为从localhost的9091端口拉取。让我们给它一些可以拉取的内容!

设置Prometheus推送网关

推送网关允许短生命周期应用程序仍然可以追踪,否则从这些应用程序中拉取数据会很麻烦。此外,它简化了将我们想要追踪的数据发送到Prometheus的任务,代价相对较小。Prometheus文档涵盖了PULL与PUSH日志的优势。

推送网关链接 https://github.com/prometheus/pushgateway

  • 按照Prometheus推送网关git上的说明进行操作,以在本地主机上安装和运行网关。
  • 这就完成了!

支持的指标

在解释如何使用客户端之前,了解PHP客户端支持哪些指标是很重要的。

  • Counter 这个指标只能通过1或更多来增加。
  • Gauge 这个指标可以正负增加。这有一些缺点,限制了某些查询函数的实用性。
  • Histogram 这个指标是一组桶,它计算每个桶中落入了多少数据点,以及所有这些数据点的值总和。
  • 不支持摘要。

强烈建议查看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"页面的status_codes。

	$counter->increment( [ 'url' => 'home.php', 'status_code' => 200 ], rand( 1, 50 ) );
	$counter->increment( [ 'url' => 'home.php', 'status_code' => 404 ], rand( 1, 50 ) );

一旦我们收集到足够的数据,我们就告诉客户端将指标发送到Prometheus Push Gateway。我们可以直接将数据发送到网关。或者,我们可能指定一个作业,或者该作业的一个实例。Prometheus Push Gateway 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();