Конфигурация PHP окружения для Zabbix
Настройка PHP для Zabbix: полное руководство
Zabbix использует PHP для работы веб-интерфейса. От корректной настройки PHP зависит стабильность, скорость и безопасность мониторинга. В статье рассматриваются различные подходы к конфигурации PHP с примерами кода и указанием типичных проблем.
Как настроить PHP для Zabbix, чтобы веб-интерфейс работал стабильно?
Наиболее эффективное решение - использование официального репозитория Zabbix и установка готового пакета zabbix-frontend-php. Пакет устанавливает все необходимые зависимости, включая PHP-FPM и модули. Остаётся настроить параметры PHP.
Шаг 1. Установка репозитория Zabbix
# Для Ubuntu 22.04
wget https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.4-1+ubuntu22.04_all.deb
apt update
Шаг 2. Установка пакетов Zabbix и PHP
apt install zabbix-frontend-php php8.1-fpm php8.1-mysql php8.1-bcmath php8.1-gd php8.1-mbstring php8.1-xml php8.1-ldap
Шаг 3. Настройка php.ini для Zabbix
Отредактировать файл /etc/php/8.1/fpm/php.ini. Основные параметры:
date.timezone = Europe/Moscow
max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
session.auto_start = Off
mbstring.func_overload = 0
Шаг 4. Настройка пула PHP-FPM
В файле /etc/php/8.1/fpm/pool.d/zabbix.conf (создать или отредактировать):
[zabbix]
user = www-data
group = www-data
listen = /run/php/php8.1-fpm-zabbix.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
Шаг 5. Проверка и перезапуск
systemctl restart php8.1-fpm
systemctl restart zabbix-server zabbix-agent2 apache2
Типичные ошибки:
- Ошибка Date timezone not set - исправить date.timezone в php.ini.
- Ошибка PHP memory limit too low - увеличить memory_limit до 256M для больших инсталляций.
- Проблема с подключением к БД - проверить, что модуль pdo_mysql установлен и параметры подключения корректны.
Как собрать PHP с поддержкой всех модулей Zabbix из исходников?
Вариант для систем, где нет готовых пакетов или требуются специфические настройки компиляции. Пример сборки PHP 8.1 с необходимыми модулями:
./configure --prefix=/usr/local/php8.1 \
--enable-fpm --with-pdo-mysql --with-gd --with-ldap \
--enable-bcmath --enable-mbstring --with-xml --with-zip \
--with-openssl --with-curl
make -j$(nproc)
make install
После сборки скопировать php.ini-production в php.ini и настроить аналогично предыдущему варианту.
Частые проблемы: Отсутствие заголовочных файлов для библиотек (libmysqlclient-dev, libgd-dev, libldap2-dev). Перед сборкой установить все зависимости через пакетный менеджер.
Как развернуть Zabbix веб-интерфейс с помощью Docker без ручной настройки PHP?
Использование официальных образов Zabbix упрощает конфигурацию. Пример docker-compose.yml для запуска Zabbix с PHP-FPM:
version: '3'
services:
zabbix-web:
image: zabbix/zabbix-web-nginx-pgsql:alpine-6.4-latest
ports:
- "8080:8080"
environment:
- DB_SERVER_HOST=zabbix-db
- POSTGRES_USER=zabbix
- POSTGRES_PASSWORD=secret
- ZBX_SERVER_HOST=zabbix-server
links:
- zabbix-server
- zabbix-db
Образ включает настроенный PHP-FPM и Nginx. Пользователю нужно только указать параметры подключения к БД.
Ограничения: Сложность кастомизации PHP-параметров (требуется собственный Dockerfile).
Как настроить Zabbix веб-интерфейс на Nginx с PHP-FPM?
Альтернатива Apache. Пример конфигурации серверного блока /etc/nginx/sites-available/zabbix:
server {
listen 80;
server_name monitoring.example.com;
root /usr/share/zabbix;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Затем включить сайт и перезагрузить Nginx.
Ошибка: Пустой экран - проверить путь к сокету PHP-FPM и права доступа.
Как улучшить производительность PHP для Zabbix при большом количестве хостов?
Кроме базовых настроек, включить OPcache и настроить размер сессий. Пример для php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
session.gc_maxlifetime = 604800
session.save_path = "/var/lib/php/sessions"
Также рекомендуется использовать Redis для хранения сессий (установить php8.1-redis и настроить session.save_handler = redis).
Проблема: При использовании OPcache не забыть очищать кэш после обновления файлов (opcache_reset()).
Расширенные примеры настройки PHP для Zabbix
1. Полный пример конфигурационного файла php.ini для Zabbix с комментариями
; Пример php.ini для Zabbix (версия 8.1)
[Date]
date.timezone = Europe/Moscow
[PHP]
max_execution_time = 300
max_input_time = 300
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 4M
[Sessions]
session.auto_start = Off
session.gc_maxlifetime = 604800
session.save_path = "/var/lib/php/sessions"
[mbstring]
mbstring.func_overload = 0
[OPcache]
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 0 ; Отключать только в production
Результат: после применения перезапустить PHP-FPM. Проверить настройки можно через phpinfo().
Параметр memory_limit = 256M успешно применен OPcache активен
2. Пример настройки пула PHP-FPM с мониторингом статуса
[zabbix]
user = www-data
group = www-data
listen = /run/php/php8.1-fpm-zabbix.sock
listen.owner = www-data
listen.group = www-data
pm = ondemand
pm.max_children = 100
pm.process_idle_timeout = 10s
pm.status_path = /status ; Включить статус для мониторинга
После перезапуска проверить статус пула через curl:
curl unix:/run/php/php8.1-fpm-zabbix.sock:/status?json
{"pool":"zabbix","process-manager":"ondemand","start time":1700000000,"accepted conn":1024,"active processes":2,"idle processes":0}
3. Скрипт проверки модулей PHP, необходимых для Zabbix
#!/usr/bin/php
<?
$required = ['bcmath', 'gd', 'mbstring', 'mysqli', 'xml', 'ldap', 'openssl', 'curl'];
$missing = [];
foreach ($required as $ext) {
if (!extension_loaded($ext)) {
$missing[] = $ext;
}
}
if (empty($missing)) {
echo "All required modules are loaded.\n";
} else {
echo "Missing modules: " . implode(', ', $missing) . "\n";
}
?>
All required modules are loaded.
4. Пример конфигурации Redis для хранения сессий Zabbix
Установить расширение:
apt install php8.1-redis
В php.ini добавить:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=yourpassword"
Проверка работы сессий (создать PHP-скрипт):
<?
session_start();
$_SESSION['test'] = time();
echo "Session ID: " . session_id();
?>
Session ID: abc123def456 (сессия сохранена в Redis)
5. Настройка PHP-FPM для использования сювера Unix-сокетов с разными правами для Zabbix
; /etc/php/8.1/fpm/pool.d/zabbix.conf
[zabbix]
user = zabbix
group = zabbix
listen = /run/php/zabbix.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
Важно: пользователь zabbix должен существовать и иметь доступ к сокету. Ошибка при неправильном listen.mode - 502 Bad Gateway на стороне Nginx.