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; }
需要解释两个问题:
- 无法访问Unix Socket的原因
- 无效字符'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
相关产品推荐
相关产品推荐

