Zabbix监控PHP

  • A+
所属分类:Zabbix 监控

监控节点压缩zabbix目录并复制到Redis服务器上

安装zabbix-agent2客户端

cd /usr/local
tar -czvf zabbix.tar.gz zabbix-6.0.36 --exclude=/usr/local/zabbix/logs/*
scp zabbix.tar.gz 192.168.22.135:~

PHP安装zabbix-agent2客户端

tar xvf /root/zabbix.tar.gz -C /usr/local/
ln -s /usr/local/zabbix-6.0.36/ /usr/local/zabbix
vim /usr/local/zabbix/etc/zabbix_agent2.conf
Server=192.168.18.10
ServerActive=192.168.18.10
Hostname=Zabbix php

创建用户用授权

useradd -s /sbin/nologin -M zabbix
chown -R zabbix:zabbix /usr/local/zabbix*

配置开机自启动文件

cat >/usr/lib/systemd/system/zabbix-agent2.service <<EOF
[Unit]
Description=Zabbix Agent 2
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/usr/local/zabbix/etc/zabbix_agent2.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-agent2
Type=simple
Restart=on-failure
PIDFile=/usr/local/zabbix/logs/zabbix_agent2.pid
KillMode=control-group
ExecStart=/usr/local/zabbix/sbin/zabbix_agent2 -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
User=zabbix
Group=zabbix

[Install]
WantedBy=multi-user.target
EOF

开机自启并启动Zabbix-agent2

systemctl daemon-reload
systemctl enable --now zabbix-agent2.service

PHP-FPM 状态页配置

启用 PHP-FPM 状态页,编辑 PHP-FPM 配置文件

vim /usr/local/php/etc/php-fpm.d/www.conf        //把一下内容取消注释
pm.status_path = /status
ping.path = /ping
ping.response = pong

重启 PHP-FPM

systemctl restart php-fpm.service
编辑 Nginx 配置文件
vim /usr/local/nginx/conf/status

# php - fpm - status
server {
    listen      9999;  # 监听端口,可根据实际需求调整,和你现有 Nginx 状态页端口区分开或共用都行,只要不冲突
    server_name _;     # 域名,为无效域名,可匹配任意域名,优先级最低

    # 定位 PHP - FPM 状态页请求
    location /status {
        # 转发请求到 PHP - FPM 处理
        fastcgi_pass 127.0.0.1:9000;  # 假设 PHP - FPM 监听 9000 端口,若用 Unix Socket 则改为 unix:/path/to/php - fpm.sock 形式
        fastcgi_param SCRIPT_FILENAME $request_filename;
        include fastcgi_params;

        # 访问控制,可根据实际情况调整,比如只允许内网 IP 访问
        allow 127.0.0.1;
        allow 192.168.22.0/24;  # 示例开放内网网段,根据实际环境改
        deny all;

        # 关闭访问日志(可选,减少日志冗余)
        access_log off;
    }

    # 可选的 PHP - FPM 健康检查路径,简单返回 pong 表示存活
    location /ping {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        include fastcgi_params;

        access_log off;
    }
}

重载 Nginx

systemctl reload nginx.service

 验证状态页

curl http://localhost:9999/status
curl http://localhost:9999/ping
Zabbix监控PHP

配置 Zabbix Agent 自定义监控项

创建 Zabbix Agent 配置文件

vim /usr/local/zabbix/etc/zabbix_agent2.d/plugins.d/php-fpm.conf

# 获取php-fpm状态信息
# UserParameter=phpfpm.pool[*],/usr/bin/curl -s "http://127.0.0.1:9999/status" | grep "$1" | awk '{print $2}'
UserParameter=phpfpm.pool[*],/usr/bin/curl -s "http://localhost:9999/status" | grep -E "^$1" | awk '{print $NF}'
# 获取当前正在处理请求的 PHP-FPM 进程数量
UserParameter=phpfpm.active_processes,/usr/bin/curl -s "http://localhost:9999/status" | grep "active processes" | awk '{print $NF}'
# 获取 PHP-FPM 进程池的总进程数量(包括活跃和空闲进程)
UserParameter=phpfpm.total_processes,/usr/bin/curl -s "http://localhost:9999/status" | grep "total processes" | awk '{print $NF}'
# 获取PHP-FPM慢请求数(从状态页提取)
UserParameter=phpfpm.slow_requests,/usr/bin/curl -s "http://localhost:9999/status" | grep "slow requests" | awk '{print $NF}'

# 获取php-fpm进程数
UserParameter=phpfpm.processes,pgrep -c php-fpm

重启 Zabbix Agent 使配置生效

systemctl restart zabbix-agent

测试自定义监控项

zabbix_get -s 192.168.22.135 -k phpfpm.pool[active\ processes]
active processes:     1
max active processes: 1
zabbix_get -s 192.168.22.135 -k phpfpm.processes
3
Zabbix监控PHP

Zabbix Web 界面配置监控项

登录 Zabbix Web 界面 --> 进入主机配置页面(点击左侧菜单配置主机,找到被监控的主机) --> 创建监控项(在主机配置页面,点击监控项创建监控项

按照以下信息填写监控项内容

名称键值类型信息类型更新间隔
PHP-FPM 活跃进程数phpfpm.pool[active processes]Zabbix Agent数字(无符号)60s
PHP-FPM 总进程数phpfpm.pool[total processes]Zabbix Agent数字(无符号)60s
PHP-FPM 慢请求数phpfpm.pool[slow requests]Zabbix Agent数字(无符号)60s
PHP-FPM 进程总数phpfpm.processesZabbix Agent数字(无符号)60s
Zabbix监控PHP
Zabbix监控PHP
Zabbix监控PHP
Zabbix监控PHP

创建图形(可选)

在主机配置页面,点击图形创建图形,输入图形名称,如 “PHP-FPM 进程监控,在 “监控项” 部分,点击添加,选择前面创建的监控项,添加到图形中,点击添加保存图形

Zabbix监控PHP

为 PHP-FPM 监控项配置触发器

在主机配置页面,点击触发器创建触发器

1. PHP-FPM 活跃进程数触发器(高负载告警)

  • 名称:PHP-FPM 活跃进程数过高
  • 表达式示例:{被监控主机名:phpfpm.pool[active processes].avg(5m)}>15
  • 含义:当 5 分钟内活跃进程数平均值超过 15 时触发告警(阈值可根据实际业务调整)
  • 严重性:平均
  • 备注:表达式 --> 添加 --> 监控项(结果大于15) --> 选择 PHP-FPM 活跃进程数

示例:

Zabbix监控PHP
Zabbix监控PHP
Zabbix监控PHP

2. PHP-FPM 总进程数触发器(异常波动告警)

  • 名称:PHP-FPM 总进程数异常波动
  • 表达式:{被监控主机名:phpfpm.pool[total processes].diff(10m)}>8
  • 含义:10 分钟内总进程数变化超过 8 个时触发告警
  • 严重性:警告

3. PHP-FPM 慢请求数触发器(性能告警)

  • 名称:PHP-FPM 出现慢请求
  • 表达式:{被监控主机名:phpfpm.pool[slow requests].last()}>0
  • 含义:只要存在慢请求就触发告警
  • 严重性:平均
  • 进阶配置:可设置{被监控主机名:phpfpm.pool[slow requests].increase(5m)}>3,表示 5 分钟内慢请求数增加超过 3 个时告警

4. PHP-FPM 进程总数触发器(服务崩溃告警)

  • 名称:PHP-FPM 进程崩溃
  • 表达式:{被监控主机名:phpfpm.processes.last()}=0
  • 含义:当 PHP-FPM 进程数为 0 时触发告警
  • 严重性:高
  • 恢复表达式:{被监控主机名:phpfpm.processes.last()}>0
  • 含义:当进程数恢复为正数时,告警自动恢复

查看 PHP-FPM 相关指标的示例

1. 查看 PHP-FPM 活跃进程数

活跃进程数指的是当前正在处理 HTTP 请求的 PHP-FPM worker 进程数量

若活跃进程数长期接近或达到 pm.max_children(PHP-FPM 配置的最大进程数),说明服务器处于高负载状态,可能需要扩容或优化代码

若活跃进程数持续为 0,可能表示 PHP-FPM 服务未运行或网站无访问流量

zabbix_get -s 192.168.22.135 -k phpfpm.active_processes
  • 预期输出:纯数值(如 1),表示当前活跃的 PHP-FPM 进程数量。

2. 查看 PHP-FPM 总进程数

仅统计 worker 进程(处理 HTTP 请求的子进程),包括活跃和空闲进程

反映 PHP-FPM 进程池的负载状态,判断是否需要调整 pm.max_children 参数

zabbix_get -s 192.168.22.135 -k phpfpm.total_processes
  • 预期输出:纯数值(如 2),表示 PHP-FPM 所有进程的总数(活跃 + 空闲)。

3. 查看 PHP-FPM 慢请求数

慢请求数指的是执行时间超过 request_slowlog_timeout 配置的请求数量

慢请求会阻塞 PHP-FPM 进程,导致服务响应变慢甚至不可用。通过监控慢请求数,可及时发现性能瓶颈并优化代码

zabbix_get -s 192.168.22.135 -k phpfpm.slow_requests
  • 预期输出:纯数值(如 0),表示处理时间超过 request_slowlog_timeout 配置的请求数量。

4. 查看 PHP-FPM 进程总数(通过进程 ID 统计)

包括 master 进程(1 个,负责管理 worker 进程)和 所有 worker 进程

验证 PHP-FPM 服务是否正常运行,检测进程崩溃或异常创建的情况

zabbix_get -s 192.168.22.135 -k phpfpm.processes
xxx