Конфигурация PHP окружения для Zabbix

Раздел: Администрирование PHP

Настройка 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.

Настройка Zabbix с PHP - comments

En
Zabbix php (php)