Zabbix — зрелая система мониторинга с агентом на каждом узле, сервером хранения метрик и веб-интерфейсом для триггеров и оповещений. Разберём установку сервера на Debian, подключение удалённого агента, настройку шаблонов и маршрутизацию уведомлений по почте с эскалацией.
Архитектура и компоненты
Состоит из сервера, веб-интерфейса и агентов. Агент отвечает на запросы сервера в пассивном режиме или сам отправляет данные в активном. Для удалённых площадок выделяют прокси. Данные лежат в PostgreSQL или MySQL, история по умолчанию хранится 90 дней, тренды — год.
# добавить официальный репозиторий Zabbix 7.0 для Debian 12
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+bookworm_all.deb
sudo dpkg -i zabbix-release_latest_7.0+bookworm_all.deb
sudo apt update
apt-cache policy zabbix-server-pgsql zabbix-agent2 | head -20
Версия репозитория должна совпадать с версией сервера: при обновлении сначала меняют репозиторий, затем пакеты, иначе схема базы не поднимется. Список доступных версий всегда лежит на сайте проекта.
Установка сервера
Ставим сервер, веб-интерфейс и PostgreSQL. Схема импортируется из готового дампа, параметры подключения сервера лежат в /etc/zabbix/zabbix_server.conf.
sudo apt install postgresql zabbix-server-pgsql zabbix-frontend-php php-fpm apache2
sudo -u postgres psql -c "CREATE USER zabbix WITH PASSWORD 'strong-pass';"
sudo -u postgres psql -c "CREATE DATABASE zabbix OWNER zabbix;"
zcat /usr/share/doc/zabbix-server-pgsql*/schema.sql.gz | sudo -u postgres psql zabbix
sudo systemctl enable --now zabbix-server apache2 php-fpm
После запуска откройте /zabbix в браузере и пройдите мастер установки: он создаст администратора и запишет параметры подключения в conf/zabbix.conf.php. Проверьте, что сервер стартовал без ошибок в логе и что порт 10051 слушается.
# ключевые параметры конфигурации
grep -E "^(DBHost|DBName|DBUser|StartPollers|HistoryStorage)" /etc/zabbix/zabbix_server.conf
# журнал сервера: сюда смотрят при любых проблемах
sudo tail -50 /var/log/zabbix/zabbix_server.log
# порты сервера и веб-интерфейса
ss -tlnp | grep -E "10051|:80"
Агент на удалённом хосте
Агент ставится на каждый мониторимый узел. Пассивный режим проще: сервер сам опрашивает по порту 10050. Для хостов за трансляцией адресов удобнее активный режим, когда агент сам стучится на сервер по порту 10051.
sudo apt install zabbix-agent2
# важные строки в /etc/zabbix/agent2/zabbix_agentd.conf
Server=192.168.1.10
ServerActive=192.168.1.10
Hostname=db01
Timeout=30
sudo systemctl enable --now zabbix-agent2
# локальная проверка: ключ должен вернуть значение
sudo zabbix_agentd -t system.cpu.load
sudo zabbix_agentd -t agent.version
Ключ system.cpu.load[percpu,avg1] возвращает среднюю нагрузку за минуту. Тестировать удалённо удобно утилитой zabbix_get с сервера: она показывает, видит ли сервер агента и не блокирует ли порт 10050 локальный файрвол.
# проверка с сервера на агента
zabbix_get -s 192.168.1.20 -p 10050 -k agent.version
# открыть порт только для адреса сервера
sudo ufw allow from 192.168.1.10 to any port 10050 proto tcp
sudo ufw reload
Хост, шаблон и самописные метрики
В веб-интерфейсе создайте хост с именем, точно совпадающим с Hostname агента, и привяжите шаблон Linux by Zabbix agent. Шаблон содержит готовые элементы данных и триггеры, поэтому базовый мониторинг настраивается за минуты.
# имя хоста в веб-интерфейсе = Hostname в конфиге агента
zabbix_get -s 192.168.1.20 -k agent.hostname
# свои метрики: любой ключ, возвращающий одно число
# UserParameter=queue.size,redis-cli llen queue
# тест ключа локально на агенте
sudo zabbix_agentd -t queue.size
UserParameter в конфиге агента превращает любую команду в элемент данных: размер очереди, статус сервиса, число зависших процессов. Так закрываются потребности, которых нет в готовых шаблонах, без написания плагинов.
Триггеры и оповещения
Триггер выражает условие на метрике, действие описывает, кому и как сообщать. Эскалация не даёт потерять важное событие: если первое письмо не прочитано, уходит следующему адресату через заданный интервал.
# средняя нагрузка выше 4 в течение пяти минут
{db01:system.cpu.load[percpu,avg1].avg(5m)}>4
# операция: письмо при проблеме и при восстановлении
# Recovery message: включить, иначе неясно, когда всё закончилось
# Operations → step 1 → Media types → email
Создайте тип медиа с транспортом email, укажите SMTP-сервер, порт и адрес отправителя, затем привяжите его к пользователю. Проверьте доставку кнопкой Test в настройках типа медиа — так вы отловите ошибки TLS до первого реального инцидента.
Автоматическое обнаружение узлов
Вместо ручного добавления хостов можно включить обнаружение: сервер периодически опрашивает заданный диапазон адресов и создаёт узлы при отклике агента. Для небольшой лаборатории хватает одного правила с фильтром по типу устройства и интервалом опроса в час.
# веб-интерфейс: Configuration → Discovery → Create discovery rule
# диапазон адресов и период опроса
iprange: 192.168.1.0/24
update interval: 1h
# привязка найденных узлов к шаблону
# Link to template: Linux by Zabbix agent
Обнаружение удобно, но управлять им сложнее, чем ручным списком: случайно поднятый сервис превращается в новый узел и в переписку о непокрытых метриках. Для критичных машин надёжнее ручное добавление, а обнаружение оставьте для временных и тестовых адресов.
Обслуживание данных и сроки хранения
С ростом числа узлов база разрастается быстрее, чем кажется: история по каждому элементу хранится отдельно. Ограничьте сроки хранения в разделе Housekeeping, включите агрегацию трендов и периодически снимайте резервную копию базы: удаление событий необратимо, а часть отчётов опирается именно на них.
# глобальные сроки: Administration → Housekeeping
# размер базы данных мониторинга
sudo -u postgres psql zabbix -c "SELECT pg_size_pretty(pg_database_size('zabbix'));"
# число элементов данных
sudo -u postgres psql zabbix -c "SELECT count(*) FROM items;"
# свободное место на томе с данными
df -h /var/lib/postgresql
Свободное место на файловой системе с данными PostgreSQL проверяйте отдельно: его падение останавливает приём метрик со всех узлов сразу, а восстановление после нехватки места занимает дольше, чем профилактика.
Диагностика типичных проблем
- Хост недоступен — проверьте порт 10050, правила файрвола и точное совпадение Hostname.
- ZBX_NOTSUPPORTED — версия агента старше элемента данных, обновите пакет на узле.
- Нет данных — посмотрите лог агента /var/log/zabbix/zabbix_agent2.log и состояние элемента.
- Письма не приходят — журнал сервера, очередь оповещений и настройки SMTP без ошибок TLS.
- Высокая нагрузка сервера — увеличьте StartPollers и удлините интервал опроса редких метрик.
Итог
Zabbix разворачивается за час: сервер с PostgreSQL, агент2 на узлах, готовый шаблон и почтовые оповещения. Ключевые правила — совпадение имени хоста, порт 10050, открытый только для сервера, и включённые сообщения о восстановлении. Начните с базового шаблона, добавляйте самописные ключи по мере необходимости и держите лог сервера под рукой при первых запусках.