© 2025 Rocky. All rights reserved.

|浙ICP备2025179428号-3|

魔法施展中...

技术文章

技术实践

在PHP中集成prometheus

2024-02-29
5 分钟
...

在PHP中添加自定义的Prometheus指标通常涉及到几个步骤,这些步骤包括使用或搭建一个Prometheus客户端,定义指标,更新这些指标,以及将这些指标暴露给Prometheus服务器。下面是如何在PHP项目中进行此操作的一般指导。

步骤 1: 选择或搭建Prometheus PHP客户端

首先,你需要有一个方式来与Prometheus通信。有一些PHP库可用于此目的,比如promphp/prometheus_client_php。你可以使用Composer来安装这个库:

composer require promphp/prometheus_client_php

步骤 2: 创建Prometheus指标

接下来,在你的PHP应用程序中创建和注册Prometheus指标。假设你想要追踪页面请求的次数,你可以创建一个计数器(Counter)指标。在创建指标时,你需要指定指标的名称、帮助信息以及任何相关的标签。

use Prometheus\CollectorRegistry;
use Prometheus\Storage\InMemory;
use Prometheus\RenderTextFormat;

$adapter = new InMemory();
$registry = new CollectorRegistry($adapter);

$counter = $registry->getOrRegisterCounter('my_namespace', 'page_requests', 'It counts page requests', ['path']);

步骤 3: 更新和记录指标

每当相关的业务事件发生时,你就应该更新这些指标。使用之前创建的计数器作为例子,每当页面被请求时,就增加计数器的值。

// 假设这是页面请求的处理函数
function handlePageRequest($path) {
    global $counter;
    // 增加计数器,用路径标签标识不同的页面
    $counter->inc(['path' => $path]);
    // 处理页面请求
}

步骤 4: 暴露指标给Prometheus

最后,你需要在你的应用中提供一个端点(endpoint),Prometheus可以通过这个端点拉取(scrape)这些指标。创建一个服务端点来生成并返回当前的所有指标。

use Prometheus\RenderTextFormat;

$renderer = new RenderTextFormat();

// 假设你使用的是某种路由库
$router->get('/metrics', function() use ($renderer, $registry) {
    header('Content-type: ' . RenderTextFormat::MIME_TYPE);
    echo $renderer->render($registry->getMetricFamilySamples());
    exit();
});

步骤 5: 配置Prometheus服务器

最后,在Prometheus的配置文件中添加一个job,用于定期拉取你的PHP应用暴露的指标。

scrape_configs:
  - job_name: 'php_application'
    metrics_path: '/metrics' # 指向你的指标端点
    static_configs:
      - targets: ['your_php_app_host:port']

这只是一个基本示例,具体实现细节可能会根据你使用的具体库和框架,以及你的业务需求而有所不同。

重要的是要在实际的业务场景中思考哪些指标是有价值的,并确保它们能够在不对应用性能产生负面影响的情况下被有效地收集和暴露。考虑到性能和资源消耗,你可能还需要在生产环境中使用基于文件或网络的更高效的存储方式,而不是示例中提到的InMemory存储方式。墙裂推荐Redis这种分布式存储。

💡 关于技术判断: 本文反映了我在真实系统中评估技术风险的思考方式。 我现在专注于为创始人和决策者提供独立的后端与架构风险评估服务。 如果您在重大技术决策前需要第三方意见,了解评估服务或联系咨询。

感谢阅读!如果您觉得这篇文章有帮助,欢迎分享给更多的朋友。

上一篇
技术分享

Rails集成prometheus的几个经验

单纯地将prometheus集成进rails,整体上比较方便:

下一篇
技术实践

优化 dokku 在国内主机上的发版速度

通过配置代理优化 dokku 在国内主机上的发版速度,解决部署缓慢的问题。

📮 订阅更新
每周收到最新文章推送,不错过精彩内容

💡 我们尊重您的隐私,不会将邮箱用于其他用途

加载中...

猜你喜欢

产品思考

繁星直播是个吸金的产品

研究了一阵繁星直播,觉得这个产品经理太牛了。

2020-04-20
生活随笔

三观正,城府深:高手皆是温柔的狠角色

真正能挣到钱的人,往往三观很正,城府却很深。那些真正厉害的人,能够同时拥有三观极正和城府极深这两个特质。

2024-12-19
职场
技术实践

一个诡异的 java 应用健康检测失败排查

早上6点41分左右,飞书突然收到健康检查失败的通知,说 van-course 应用的 /health 接口访问不了。经过排查发现是 Ubuntu 系统的 apt-daily-upgrade 定时任务在更新过程中停止了 supervisor 服务,导致应用重启。

2025-11-02
Java