You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP-FPM Exporter无法访问Unix Socket及'A'字符错误求助

问题描述

我使用php-fpm_exporter二进制文件尝试将PHP指标导出到Prometheus,目标Unix Socket权限如下:

srw-rw---- 1 www-data www-data 0 Sep  8 15:17 /var/run/php/php7.2-fpm.sock

执行以下命令:

admin@1234567:~$ sudo -u www-data bash -c "./php-fpm_exporter_2.2.0_linux_amd64 get --phpfpm.scrape-uri unix:///var/run/php/php7.2-fpm.sock"

得到报错信息:

ERRO[0000] Pool[unix:///var/run/php/php7.2-fpm.sock]: Access denied. 
ERRO[0000] invalid character 'A' looking for beginning of value 
ERRO[0000] invalid character 'A' looking for beginning of value 
Address:                unix:///var/run/php/php7.2-fpm.sock
Pool:                                                      
Start time:             Mon, 01 Jan 0001 00:00:00 +0000    
Start since:            0                                  
Accepted connections:   0                                  
Listen Queue:           0                                  
Max Listen Queue:       0                                  
Listen Queue Length:    0                                  
Idle Processes:         0                                  
Active Processes:       0                                  
Total Processes:        0                                  
Max active processes:   0                                  
Max children reached:   0                                  
Slow requests:          0     

补充信息:Nginx对应location配置如下(网站运行正常,说明Socket功能正常),且已尝试多种scrape-uri格式均无效:

include snippets/fastcgi-php.conf;

fastcgi_pass    unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param   SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_read_timeout 300;
}

需要解释两个问题:

  1. 无法访问Unix Socket的原因
  2. 无效字符'A'错误的成因

问题分析与解答

1. 无法访问Unix Socket的原因

并非Socket权限问题,核心原因是PHP-FPM未开启状态页监听:

  • 你的Socket权限为srw-rw----,执行命令的用户是www-data,和Socket的属主属组完全匹配,权限层面不存在访问障碍;
  • Nginx能正常使用Socket是因为它通过FastCGI协议处理业务请求,而php-fpm_exporter需要读取PHP-FPM的状态数据,这依赖PHP-FPM配置中开启专门的状态监听路径。

默认情况下PHP-FPM不会启用状态页,你需要检查PHP-FPM的池配置文件(通常路径为/etc/php/7.2/fpm/pool.d/www.conf),确认是否存在以下配置项:

pm.status_path = /status

如果没有,添加该配置后重启PHP-FPM服务。

2. 无效字符'A'错误的成因

这个错误是"Access denied"的连锁反应:

  • 当php-fpm_exporter尝试获取状态数据时,由于PHP-FPM未开启状态页,返回了文本形式的"Access denied"响应(开头字符为'A');
  • 但php-fpm_exporter期望接收的是JSON格式的状态数据,解析非JSON的文本响应时,就会抛出"invalid character 'A' looking for beginning of value"错误——因为JSON格式的开头应为{或[,而非'A'。

验证建议

配置完pm.status_path后,可使用cgi-fcgi工具直接测试状态页是否正常:

sudo -u www-data bash -c 'SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php/php7.2-fpm.sock'

若返回JSON格式的状态数据,说明配置正确,此时再运行php-fpm_exporter即可正常获取指标。


内容的提问来源于stack exchange,提问作者user1015214

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:31:24