Ubuntu 20.04 上使用 Prometheus 和 Grafana 监控 PHP 8.0

本文方案监听php状态信息是采用php-php-exporter直接通过sock监控php-fpm信息。还可以通过nginx查询php状态信息从而监控,中间需要加上nginx配置。详见本文末尾

查找最新的 php-fpm_exporter 版本

访问 php-fpm_exporter 的 GitHub releases 页面 来查找最新版本。获取最新版本的下载链接,然后使用该链接。y也可以浏览器直接点击下载

  1. 下载最新版本的 php-fpm_exporter
    可以使用以下命令来下载:
bash 复制代码
wget https://github.com/bakins/php-fpm-exporter/releases/download/v0.6.1/php-fpm-exporter.linux.amd64 -O php-fpm-exporter
chmod +x php-fpm-exporter
sudo mv php-fpm-exporter /usr/local/bin/

使用 Systemd 创建一个服务文件:

bash 复制代码
sudo nano /etc/systemd/system/php-fpm-exporter.service

添加以下内容:

bash 复制代码
[Unit]
Description=PHP-FPM Exporter
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/php-fpm-exporter --addr="0.0.0.0:9253" --fastcgi=unix:///run/php/php8.0-fpm.sock
Restart=always

[Install]
WantedBy=multi-user.target

保存文件并退出,然后启动并启用服务:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl start php-fpm-exporter
sudo systemctl enable php-fpm-exporter

确保 php-fpm 的 status 页面在配置中被正确指向。可以通过编辑 /etc/php/8.0/fpm/pool.d/www.conf 启用:

bash 复制代码
sudo nano /etc/php/8.0/fpm/pool.d/www.conf

找到 pm.status_path 并确保它没有被注释掉,并设置为 /status:

bash 复制代码
pm.status_path = /status

重启prometheus

1.3. 检查 PHP-FPM Exporter 状态

验证 php-fpm-exporter 是否正常运行:

bash 复制代码
curl http://<PHP_Server_IP>:9253/metrics
  1. 配置 Prometheus 以监控 PHP-FPM
    在 Prometheus 主机上,编辑 Prometheus 配置文件 prometheus.yml,添加 PHP-FPM 主机的 php-fpm-exporter 作为新的抓取目标。

2.1. 编辑 Prometheus 配置文件

bash 复制代码
sudo nano /etc/prometheus/prometheus.yml

添加以下内容:

bash 复制代码
scrape_configs:
  - job_name: 'php-fpm'
    static_configs:
      - targets: ['<PHP_Server_IP>:9253']

保存文件并退出。

2.2. 重起加载 Prometheus 配置

导入 PHP-FPM 监控仪表盘id 11237或15096

错误解决:

bash 复制代码
root@iZ2zeinkufk6dnq6zhds1rZ:~# curl http://127.0.0.1:9253/metrics
# HELP phpfpm_scrape_failures_total Number of errors while scraping php_fpm
# TYPE phpfpm_scrape_failures_total counter
phpfpm_scrape_failures_total 1
# HELP phpfpm_up able to contact php-fpm
# TYPE phpfpm_up gauge
phpfpm_up 0

根据输出,php-fpm_exporter 未能成功抓取 PHP-FPM 的指标。这可以从以下两点看出:

phpfpm_scrape_failures_total 为 1:表示在抓取 php-fpm 时发生了一次错误。

phpfpm_up 为 0:表示无法联系到 php-fpm。

原因:

PHP-FPM 使用 Unix 套接字 (.sock 文件) 而不是网络端口 (127.0.0.1:9000),那么 php-fpm_exporter 需要配置为通过 FastCGI 协议连接到 PHP-FPM。可以通过以下步骤解决问题:

更新 Systemd 服务文件以使用 Unix 套接字:

bash

复制代码

sudo nano /etc/systemd/system/php-fpm-exporter.service

将 ExecStart 行修改为:

bash 复制代码
php-fpm-exporter --addr="127.0.0.1:9253" --fastcgi=unix:///run/php/php8.0-fpm.sock

保存文件并退出。

第二种方案

步骤 1:启用 PHP-FPM 状态页面

修改 PHP-FPM 池配置文件:

打开 PHP-FPM 的池配置文件。默认情况下,这些配置文件位于 /etc/php/8.0/fpm/pool.d/ 目录中(根据 PHP 版本不同,路径可能会有所不同)。

bash 复制代码
sudo nano /etc/php/8.0/fpm/pool.d/www.conf

配置状态页面:

在配置文件中,找到并修改以下参数(如果没有这些参数,可以手动添加):

bash 复制代码
pm.status_path = /status

这行配置将启用 /status 路径来提供 PHP-FPM 的状态信息。

设置监听地址(可选):

确保 PHP-FPM 的监听配置可以通过 HTTP 访问。默认情况下,PHP-FPM 使用 Unix socket 来与 Web 服务器通信。如果您希望通过 TCP 端口访问,请更改 listen 参数,例如:

bash 复制代码
listen = 127.0.0.1:9000

通过这样配置,PHP-FPM 将通过 TCP 端口 9000 来监听来自 127.0.0.1 的请求。

重启 PHP-FPM 服务:

配置完成后,重启 PHP-FPM 服务以应用更改:

bash 复制代码
sudo systemctl restart php8.0-fpm

步骤 2:配置 Nginx 代理 PHP-FPM 状态页面

编辑 Nginx 配置文件:

打开 Nginx 配置文件(通常位于 /etc/nginx/sites-available/default 或 /etc/nginx/nginx.conf,具体路径可能因您的配置不同):

bash

复制代码

sudo nano /etc/nginx/sites-available/default

添加状态页面配置:

在 Nginx 配置中,添加一个新位置块来代理 PHP-FPM 的状态页面:

bash 复制代码
server {
    listen 80;
    server_name your_domain_or_ip;

    location /status {
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        allow 127.0.0.1;  # 仅允许本地主机访问
        deny all;          # 禁止其他所有访问
    }

    # 其他配置...
}

请确保状态页面仅对 Prometheus 和 php-fpm_exporter 所在的主机可见,以防止暴露敏感的 PHP-FPM 状态信息。

测试 Nginx 配置并重启服务:

bash 复制代码
sudo nginx -t
sudo systemctl restart nginx
相关推荐
SRETalk2 天前
Zabbix、Prometheus、Grafana、Nightingale,四个监控如何选型?
zabbix·grafana·prometheus·nightingale
两个人的幸福6 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo8 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack8 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982079 天前
PHP 扩展——从入门到理解
php
虚无境9 天前
如何编写一个SpringBoot项目告警推送的Starter
java·prometheus·webhook
鹏仔先生9 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下10 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip10 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
张飞飞飞飞飞10 天前
Tmux命令使用教程
linux·服务器·ubuntu