Установка, настройка агентов Zabbix для PHP-FPM, Docker и других служб
Zabbix агенты разворачиваются на наблюдаемых целях для активного мониторинга локальных ресурсов и приложений (статистика жестких дисков, памяти, процессоров и т.д.).
Агент локально собирает оперативную информацию и отправляет данные Zabbix серверу для дальнейшей обработки. В случае проблем (таких как отсутствие свободного места на жестком диске или аварийного завершения процесса сервиса), Zabbix сервер может быстро уведомить администраторов конкретного сервера, сообщившего об ошибке.
Мониторинг сервисов позволяет не только узнать о проблемах, но и даёт возможность оптимизировать конфигурацию и нагрузку.
Zabbix Агент версии 2
Zabbix агент 2 - новое поколение Zabbix агента, его можно использовать в качестве замены Zabbix агента. Агент 2 написан на Golang (Go).
- Официальная документация как скачать и установить Zabbix Агента.
- Zabbix SIA поставляет официальные RPM и DEB пакеты для Red Hat Enterprise Linux, Debian и Ubuntu LTS. Файлы пакетов доступны по адресу http://repo.zabbix.com. Репозитории yum и apt также доступны на сервере.
Установка:
apt install zabbix-agent2
Уберем все лишние из конфига агента Заббикс:
sed -i.bak '/ *#/d; /^$/d' zabbix_agent2.conf
После подставляем 3 параметра в zabbix_agent2.conf и агент настроен
Server=zabbix.example.net ServerActive=zabbix.example.net Hostname=cz394
где:
- Server=zabbix.example.net # IP addresses (or hostnames) of Zabbix servers
- !!! Hostname=cz394 # Должно совпадать с Host name указанном на Zabbix servers. Используйте Visible name (на Zabbix server) для написания удобочитаемых названий ваших серверов.
- ServerActive=zabbix.example.net # IP:port (or hostname:port) pairs of Zabbix servers for active checks
Перезагрузим агента для применения настроек
systemctl restart zabbix-agent2
Отладка Zabbix Агента
В первую очередь разберитесь как Заббикс агент находит запущенные процессы используя функцию proc.num. Казалось бы все просто, например выбрать количество процессов по имени и пользователю получим 6:
zabbix_get -s localhost -k 'proc.num[zabbix_agentd,zabbix]' 6
Можем даже упростить и оставить только имя процесса, то же получим 6 и команда ps тоже утверждает что 6.
zabbix_get -s localhost -k 'proc.num[zabbix_agentd]' 6 ps -ef | grep zabbix_agentd zabbix 951 1 0 2023 ? 00:00:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf zabbix 952 951 0 2023 ? 00:09:04 /usr/sbin/zabbix_agentd: collector [idle 1 sec] zabbix 953 951 0 2023 ? 00:08:02 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection] zabbix 954 951 0 2023 ? 00:07:58 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection] zabbix 955 951 0 2023 ? 00:08:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection] zabbix 956 951 0 2023 ? 00:06:36 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
Возьмем другую службу например php-fpm И команда ps нам скажет что процессов 48
ps -ef | grep php-fpm | wc -l 48 ps -ef | grep php-fpm ... www-data 3103692 3103690 0 Jan08 ? 00:02:16 php-fpm: pool sock-1-81 www-data 3103693 3103690 0 Jan08 ? 00:02:17 php-fpm: pool sock-1-81 www-data 3103694 3103690 0 Jan08 ? 00:02:16 php-fpm: pool sock-2-81 ...
Но Заббикс напишет что процессов 0
zabbix_get -s localhost -k 'proc.num["php-fpm"]' 0
Это связано с тем, что Zabbix agent начинает с проверки имени процесса. Открывает файл /proc/<pid>/status и проверяет строку Name. В нашем случае строки Name это:
grep Name /proc/{3103692,3103693,3103694}/status /proc/3103692/status:Name: php-fpm8.1 /proc/3103693/status:Name: php-fpm8.1 /proc/3103694/status:Name: php-fpm8.1
Поэтому в proc.num нужно указывать php-fpm8.1. Проверяем и получаем количество процессов 47:
zabbix_get -s localhost -k 'proc.num["php-fpm8.1"]' 47
Работа с шаблонами Zabbix агент 2
Примеры использования параметров командной строки:
- отображение всех встроенных элементов данных с их значениями
zabbix_agent2 --print
- Тестирование пользовательского параметра с ключом "mysql.ping", заданном в указанном файле конфигурации
zabbix_agent2 -t "mysql.ping" -c /etc/zabbix/zabbix_agent2.conf
- увеличение уровня журналирования агента
zabbix_agent2 -R log_level_increase
- вывод опций управления работой
zabbix_agent2 -R help
Мониторинг MySQL, MariaDB с помощью Zabbix agent 2
- Откройте страницу Host в Web-интерфейсе Zabbix для узла, на котором нужно контролировать работу MariaDB. Затем добавьте к хосту шаблон MySQL by Zabbix agent 2.
- Чтобы этот шаблон заработал, нужно создать пользователя, например zbx_monitor, с правами которого будет выполняться мониторинг
CREATE USER 'zbx_monitor'@localhost IDENTIFIED BY '********'; GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@localhost;
- Настроим макросы шаблона MySQL by Zabbix agent 2: В макросе
- {$MYSQL.DSN} задайте адрес и порт для подключения к MariaDB как
tcp://localhost:3306
- в макросах {$MYSQL.USER} и {$MYSQL.PASSWORD} задайте, соответственно, имя пользователя zbx_monitor и его пароль.
На скриншоте более наглядно
Мониторинг сервиса Docker с помощью Zabbix agent 2
Добавляем нужному хосту шаблон Docker by Zabbix agent 2. Добавляем пользователя zabbix в группу docker.
usermod -aG docker zabbix
systemctl restart zabbix-agent2.service
Обязательно перезапускаем заббикс агента. Дополнительно протестировать с хоста Zabbix сервера, можно командой
zabbix_get -s docker-host -k docker.info {"Id":"65231107-5ecb-4d85-87ab-6b81913e4420","Containers":1,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":1,"Images":1,"Driver":"overlay2","MemoryLimit":true,"SwapLimit":true,"KernelMemory":false,"KernelMemoryTCP":false,"CpuCfsPeriod":true,"CpuCfsQuota":true," ...
Сбор статистики, мониторинг PHP-FPM в Zabbix
На продакшене редко используется конфигурация PHP-FPM по умолчанию. В нашем случае проблема заключатся в пулах PHP-FPM созданных для upstream в Nginx оптимизация и использование, для наглядности привожу конфиг:
nano /etc/nginx/conf.d/upstream_php81.conf upstream php-fpm81 { server unix:/var/run/sock81-1.sock; server unix:/var/run/sock81-2.sock; server unix:/var/run/sock81-3.sock; server unix:/var/run/sock81-4.sock; }
Вторая проблема, которая может возникнуть, когда у вас установлено и используется несколько версий PHP-FPM, например сейчас часто запущены PHP 7.4 и PHP 8.1. В этом случае для каждой версии PHP мониторинг придется настраивать отдельно.
Чем эта инструкция отличается от официальной документации для Template App PHP-FPM by Zabbix agent:
- Для доступа используем директиву server, а не просто location, что позволяет упростить и обезопасить доступ к статистике.
- Мониторим конкретную версию PHP
- Мониторим только 1 пул sock81-4. Пулы настраиваются в моем случае в файле /etc/php/8.1/fpm/pool.d/www.conf.
PHP-FPM имеет встроенный инструмент для предоставления статистики. Для того что бы активировать необходимо задать соответствующий параметр в конфигурационном файле. Не забываем, у вас может быть установлено несколько версий PHP.
В моем случае в конфигурационный файл PHP для пула sock81-4 добавляем 3 параметра указанные после комментария "PM status enable":
nano /etc/php/8.1/fpm/pool.d/www.conf [sock-4-81] user = www-data group = www-data listen = /var/run/sock81-4.sock listen.owner = www-data listen.group = www-data ... ; PM status enable pm.status_path = /status ping.path = /ping ping.response = pong ; PM status END ...
В Nginx создаем сервере на localhost порт 8181 в отдельном файле, которые будет автоматически загружаться
nano /etc/nginx/conf.d/001-php-fpm_status.conf server { listen 127.0.0.1:8181; location ~ ^/(status|ping)$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/sock81-4.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; access_log off; } }
После внесения изменений в конфигурации PHP-FPM и NGINX проверьте правильность синтаксиса их конфигурации следующим образом:
php-fpm8.1 -t nginx -t
Если ошибок нет применяем изменеия
systemctl reload php8.1-fpm.service systemctl reload nginx
Проверяем 2 командами, используй curl:
curl http://127.0.0.1:8181/ping pong
curl http://127.0.0.1:8181/status pool: sock-4-81 process manager: dynamic start time: 12/Jan/2024:18:32:46 +0200 # время запуска FPM (FastCGI Process Manager) start since: 424 # время в секундах с момента запуска accepted conn: 12 # количество обработанных пулом запросов listen queue: 0 # количество запросов в очереди на обработку этим пулом, если количество > 0 – надо подумать об увеличении количества процессов; max listen queue: 0 listen queue len: 0 idle processes: 1 active processes: 1 total processes: 2 max active processes: 1 max children reached: 0 # максимальное количество дочерних потоков PHP-FPM с момента запуска, если количество >0 – есть смысл подумать об увеличении pm.max_children slow requests: 0
В настройках узла на Zabbix сервере добавляем шаблон "PHP-FPM by Zabbix agent", меняем порт на 8181. И теперь важно подставляем настоящее имя вашего процесса php-fpm в переменную {$PHP_FPM.PROCESS_NAME}, в моем случае это будет php-fpm8.1 (как найти настоящее имя процесса подробно описано Отладка Zabbix Агента).
Для измерения количества медленных запросов должен быть включён slowlog.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах