Новинка Виртуальный VDS сервер в Нидерландах от 490р
Выберите продукт

Zabbix Agent 2 на Linux VDS: TLS PSK, systemd и шаблоны мониторинга

Разбираем установку и безопасную настройку Zabbix Agent 2 на Linux VDS: генерируем TLS PSK, подключаем хост в Zabbix, настраиваем systemd, firewall, шаблоны мониторинга и проверяем типовые сбои.
Zabbix Agent 2 на Linux VDS: TLS PSK, systemd и шаблоны мониторинга

Zabbix Agent 2 — удобный агент для мониторинга Linux на VDS: он собирает метрики CPU, памяти, диска, сети, systemd-сервисов, процессов, Docker, баз данных и приложений через плагины. В отличие от классического агента, zabbix_agent2 написан на Go, лучше расширяется и чаще используется для новых шаблонов Zabbix.

В этой инструкции настроим Zabbix Agent 2 на Linux VDS с шифрованием TLS PSK, аккуратно разберём параметры конфигурации, добавим unit-override для systemd, проверим активные и пассивные проверки, а в конце пройдёмся по типовым ошибкам. Материал рассчитан на админов и вебмастеров, которым нужно не просто установить пакет, а получить предсказуемый и безопасный мониторинг VDS.

PSK в Zabbix — это общий секретный ключ между сервером и агентом. Он проще в эксплуатации, чем сертификаты, но требует дисциплины: ключ нельзя отправлять в чатах, хранить в репозитории или оставлять доступным всем пользователям системы.

Что будем настраивать и как это работает

У Zabbix есть два основных режима опроса агента. В пассивном режиме сервер подключается к агенту на порт 10050 и спрашивает метрики. В активном режиме агент сам подключается к серверу на порт 10051, получает список проверок и отправляет значения. Для VDS часто удобнее активные проверки: серверу мониторинга не нужно иметь сетевой доступ к каждому агенту, а firewall на VDS можно сделать строже.

Но на практике полезно понимать оба режима. Пассивные проверки хороши для быстрой диагностики командой zabbix_get и для простых сетевых схем. Активные проверки лучше проходят через NAT, подходят для серверов с динамическими правилами доступа и уменьшают количество входящих соединений к агенту.

В этой статье базовая схема такая: Zabbix Server или Zabbix Proxy уже установлен, Linux VDS доступен по SSH, время синхронизировано через NTP или chrony, DNS-имя сервера мониторинга резолвится с VDS. На агенте включим TLS с PSK и привяжем конфигурацию к hostname, который будет создан в веб-интерфейсе Zabbix.

Подготовка VDS перед установкой агента

Перед установкой проверьте три вещи: имя хоста, время и сетевую доступность Zabbix Server или Proxy. Неправильный hostname — одна из самых частых причин, почему активные проверки не стартуют: агент подключается, но сервер не находит хост с таким именем.

hostnamectl
hostname -f
timedatectl status
getent hosts zabbix.example.local

Если FQDN не настроен, задайте понятное имя. Оно не обязано быть публичным доменом, но должно совпадать с полем Host name в Zabbix. Не путайте его с видимым именем Visible name: первое используется протоколом, второе — только для удобства в интерфейсе.

sudo hostnamectl set-hostname web-01.example.local

Проверьте, что VDS может подключиться к серверу мониторинга на порт 10051, если планируются активные проверки. Для пассивного режима сервер мониторинга должен подключаться к агенту на порт 10050.

nc -vz zabbix.example.local 10051

Если команды nc нет, установите пакет netcat или используйте telnet. Ошибка подключения на этом этапе обычно означает firewall, неверный адрес Zabbix Server или Proxy, закрытый порт либо проблему маршрутизации.

Файл TLS PSK и конфигурация Zabbix Agent 2 на Linux VDS

Установка Zabbix Agent 2 в Linux

Команды ниже предполагают, что репозиторий Zabbix для вашей версии ОС уже подключён либо пакет доступен из штатных репозиториев. В production лучше использовать репозиторий той же major-версии, что и Zabbix Server или Proxy: например, агент 7.0 LTS к серверу 7.0 LTS. Смешивать версии можно не всегда, а несовпадение возможностей шаблонов иногда приводит к странным unsupported items.

Debian и Ubuntu

sudo apt update
sudo apt install zabbix-agent2 zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-postgresql

Плагины MongoDB и PostgreSQL нужны не всем. Если мониторите только системные метрики, достаточно пакета zabbix-agent2. Для MySQL и MariaDB в современных версиях агент умеет работать через встроенный плагин или отдельные шаблоны; конкретный набор пакетов зависит от версии Zabbix и репозитория.

AlmaLinux, Rocky Linux, CentOS Stream, Oracle Linux

sudo dnf install zabbix-agent2 zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-postgresql

На старых системах может использоваться yum, но для актуальных RHEL-based дистрибутивов обычно достаточно dnf. Если пакет не найден, проверьте, подключён ли репозиторий Zabbix именно для вашей major-версии ОС.

Fedora

sudo dnf install zabbix-agent2

Fedora быстро обновляется, поэтому особенно важно сверять версию агента и сервера. Для долгоживущего мониторинга VDS чаще выбирают Debian, Ubuntu LTS или RHEL-compatible дистрибутивы, но сама настройка агента почти не отличается.

После установки пока не запускайте агент в production-режиме: сначала подготовим PSK и конфигурацию.

Генерируем TLS PSK и защищаем файл ключа

PSK-ключ должен быть достаточно длинным и случайным. Практичный вариант — 32 байта в hex-представлении. Zabbix ожидает ключ в виде строки из шестнадцатеричных символов. Создадим каталог для секретов, сгенерируем ключ и ограничим права доступа.

sudo install -d -o zabbix -g zabbix -m 0750 /etc/zabbix/keys
sudo sh -c 'openssl rand -hex 32 > /etc/zabbix/keys/agent2.psk'
sudo chown zabbix:zabbix /etc/zabbix/keys/agent2.psk
sudo chmod 0640 /etc/zabbix/keys/agent2.psk
sudo cat /etc/zabbix/keys/agent2.psk

Последняя команда выводит ключ: его нужно один раз перенести в настройки хоста в Zabbix. После этого лучше не держать PSK в терминальной истории, тикетах и заметках. Если ключ был случайно раскрыт, проще сгенерировать новый, заменить его на агенте и в интерфейсе Zabbix, затем перезапустить агент.

Имя PSK identity — не секрет, но оно должно совпадать на обеих сторонах. Используйте понятный формат, например psk-web-01 или vds-web-01-psk. Не используйте один и тот же PSK для десятков серверов: компрометация одного VDS тогда превращается в компрометацию доверия ко всей группе.

Настраиваем zabbix_agent2.conf

Основной файл обычно находится в /etc/zabbix/zabbix_agent2.conf. Перед изменениями сделайте копию: она поможет быстро откатиться и сравнить параметры после обновления пакета.

sudo cp -a /etc/zabbix/zabbix_agent2.conf /etc/zabbix/zabbix_agent2.conf.bak

Ниже пример конфигурации для активных проверок с TLS PSK. Замените zabbix.example.local, web-01.example.local и psk-web-01 на свои значения.

PidFile=/run/zabbix/zabbix_agent2.pid
LogType=file
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=10
Server=127.0.0.1
ServerActive=zabbix.example.local
Hostname=web-01.example.local
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/run/zabbix/agent.sock
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=psk-web-01
TLSPSKFile=/etc/zabbix/keys/agent2.psk

Параметр Server отвечает за пассивные проверки: какие адреса могут подключаться к агенту. Если пассивный режим не нужен, можно указать только loopback, как в примере, и не открывать порт 10050 наружу. Если пассивные проверки нужны, добавьте IP Zabbix Server или Proxy, например Server=192.0.2.10. Не ставьте 0.0.0.0/0 и не добавляйте лишние подсети.

Параметр ServerActive задаёт адрес, куда агент подключается сам. Здесь можно указать DNS-имя или IP, а при нестандартном порте — адрес с портом. Важно, чтобы агент мог установить исходящее TCP-соединение.

Параметр Hostname должен в точности совпадать с именем хоста в Zabbix. Регистр, точки и дефисы имеют значение. Если хотите брать имя автоматически, можно использовать HostnameItem=system.hostname, но для серверов с предсказуемым naming лучше явно прописывать Hostname.

TLSConnect=psk означает, что исходящие подключения агента к серверу будут защищены PSK. TLSAccept=psk разрешает входящие подключения к агенту только с PSK. Если пассивные проверки отключены firewall-ом и параметром Server, этот параметр всё равно полезно оставить для единообразия и будущей диагностики.

Добавляем хост в интерфейсе Zabbix

В веб-интерфейсе Zabbix создайте новый хост. В поле Host name укажите ровно то же значение, что и в Hostname на агенте. В группы добавьте, например, Linux servers или отдельную группу для VDS. Для активных проверок интерфейс агента можно добавить с IP или DNS, но ключевое — корректные настройки шифрования и шаблоны.

В разделе Encryption выберите PSK для подключений к хосту и от хоста. В поле PSK identity укажите значение из TLSPSKIdentity, в поле PSK вставьте содержимое файла /etc/zabbix/keys/agent2.psk. Не добавляйте пробелы и переносы строк.

Дальше привяжите шаблоны. Для базового мониторинга Linux обычно используют Linux by Zabbix agent active или аналогичный шаблон вашей версии Zabbix. Если хотите пассивные проверки, выбирайте вариант без active. Для мониторинга VDS чаще удобен active-шаблон: он собирает CPU, load average, память, swap, файловые системы, сетевые интерфейсы, процессы и базовые триггеры.

Если на VDS крутятся отдельные сервисы, добавляйте шаблоны Zabbix постепенно. Например, сначала Linux, затем Nginx, PHP-FPM, MySQL или PostgreSQL. Не подключайте сразу всё подряд: лишние discovery rules и unsupported items создают шум, усложняют диагностику и могут повышать нагрузку на маленькой VDS.

Запуск через systemd и базовая проверка

После настройки проверьте синтаксис и запустите сервис. У Zabbix Agent 2 есть режим тестирования отдельных ключей, который помогает понять, видит ли агент систему и может ли выполнять проверки.

sudo zabbix_agent2 -t system.uname
sudo zabbix_agent2 -t agent.ping
sudo systemctl enable --now zabbix-agent2
sudo systemctl status zabbix-agent2

Посмотрите логи сразу после запуска. На systemd-системах удобнее использовать journalctl, но файл логов тоже пригодится, если включён LogType=file.

sudo journalctl -u zabbix-agent2 -n 100 --no-pager
sudo tail -n 100 /var/log/zabbix/zabbix_agent2.log

Для активных проверок в логах должны появиться сообщения о подключении к серверу и получении списка active checks. Если видите ошибку вида host not found, почти всегда не совпадает Hostname на агенте и Host name в Zabbix.

Для пассивной проверки с сервера мониторинга можно использовать zabbix_get. Команду выполняют на Zabbix Server или Proxy, а не на агенте.

zabbix_get -s 192.0.2.20 -k agent.ping
zabbix_get -s 192.0.2.20 -k system.uname

Если пассивные проверки защищены PSK, обычный zabbix_get без TLS-параметров может не сработать. В таком случае используйте активный шаблон или запускайте zabbix_get с параметрами TLS, соответствующими вашей версии утилиты.

Firewall: что открывать на VDS

Для активных проверок на самой VDS обычно не нужно открывать входящий порт 10050. Агент инициирует исходящее соединение к Zabbix Server или Proxy на 10051. Это хороший вариант для небольших серверов и публичных VDS: меньше открытых портов — меньше поверхность атаки.

Если нужны пассивные проверки, разрешайте порт 10050 только с IP сервера мониторинга или прокси. Ниже примеры для популярных firewall-инструментов.

UFW

sudo ufw allow from 192.0.2.10 to any port 10050 proto tcp
sudo ufw status verbose

firewalld

sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.0.2.10 port port=10050 protocol=tcp accept'
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

nftables

sudo nft add rule inet filter input ip saddr 192.0.2.10 tcp dport 10050 accept
sudo nft list ruleset

Команда nft add rule добавляет правило в текущий ruleset, но не всегда сохраняет его после перезагрузки: это зависит от того, как у вас организована конфигурация nftables. Для production внесите правило в основной файл конфигурации и проверьте загрузку после reboot на тестовом окне обслуживания.

FastFox VDS
Облачный VDS-сервер
Виртуальные серверы с быстрым запуском и гибкой конфигурацией от 390₽ / мес
Доступные локации
Россия Нидерланды

Укрепляем systemd-сервис без фанатизма

Zabbix Agent 2 уже запускается отдельным пользователем zabbix, но systemd позволяет добавить несколько защитных ограничений. Делать это нужно аккуратно: слишком жёсткая песочница может сломать discovery файловых систем, чтение сетевых параметров или плагины. Если хотите глубже разобраться в ресурсных ограничениях unit-ов, посмотрите материал про лимиты памяти и CPU в systemd.

Создадим drop-in файл. Не редактируйте unit из пакета напрямую: при обновлении он может измениться. Drop-in проще откатить и проверить.

sudo systemctl edit zabbix-agent2

Вставьте умеренный набор ограничений:

[Service]
NoNewPrivileges=true
ProtectHome=true
ProtectSystem=full
PrivateTmp=true
PrivateDevices=false
ReadWritePaths=/var/log/zabbix /run/zabbix /etc/zabbix/keys
CapabilityBoundingSet=
RestrictSUIDSGID=true
LockPersonality=true

После сохранения примените изменения и перезапустите агент.

sudo systemctl daemon-reload
sudo systemctl restart zabbix-agent2
sudo systemctl status zabbix-agent2
sudo systemd-analyze security zabbix-agent2

Параметр ProtectSystem=full делает системные каталоги недоступными для записи, а ReadWritePaths оставляет агенту нужные места для логов, runtime-файлов и PSK. ProtectHome=true закрывает домашние каталоги пользователей; это почти всегда нормально для мониторинга системных метрик, но может помешать кастомным UserParameter, которые читают файлы из /home.

Если после включения hardening часть метрик стала unsupported, временно откатите drop-in и включайте параметры по одному. Для мониторинга важнее стабильность и предсказуемость, чем красивый максимальный security score.

Systemd-мониторинг: сервисы, рестарты и watchdog

Многие админы хотят не только видеть CPU и диск, но и понимать, живы ли конкретные сервисы: nginx, php-fpm, mariadb, postgresql, очереди, воркеры. Шаблоны Zabbix частично закрывают это через proc- и service-checks, но для systemd удобно добавить явные проверки.

Начните с инвентаризации unit-ов:

systemctl list-units --type=service --state=running
systemctl list-units --type=service --state=failed

В Zabbix можно использовать встроенные ключи для systemd, если они поддерживаются вашей версией агента и шаблона. Альтернатива — UserParameter, но с ним не стоит увлекаться. Каждый пользовательский параметр должен быть быстрым, безопасным и предсказуемым.

Пример отдельного файла с простым UserParameter для проверки unit-а:

printf '%s\n' 'UserParameter=systemd.unit.active[*],systemctl is-active --quiet $1 && echo 1 || echo 0' | sudo tee /etc/zabbix/zabbix_agent2.d/systemd-services.conf

После добавления перезапустите агент и проверьте ключ локально:

sudo systemctl restart zabbix-agent2
zabbix_agent2 -t systemd.unit.active[nginx.service]

Такой подход удобен, но помните про безопасность: не делайте UserParameter с произвольным shell-кодом, не передавайте туда непроверенные строки из внешних источников и не запускайте тяжёлые команды каждую минуту. Для большого количества сервисов лучше использовать low-level discovery или готовые шаблоны.

Какие шаблоны выбрать для VDS

Базовый набор для Linux VDS обычно начинается с шаблона Linux by Zabbix agent active. Он даёт нормальную картину по загрузке CPU, load average, памяти, swap, inode, файловым системам и сетевым интерфейсам. Для маленьких VDS особенно полезны триггеры по свободному месту, inode и memory pressure: именно они чаще всего предупреждают о будущих инцидентах раньше пользователей.

Дальше добавляйте сервисные шаблоны по фактической роли сервера. Для веб-сервера это могут быть Nginx или Apache, PHP-FPM, база данных и Redis. Для почтового сервера — Postfix, Dovecot, Rspamd и проверки очереди. Для контейнерной VDS — Docker или container runtime, но внимательно следите за количеством discovery-объектов.

Не все шаблоны Zabbix одинаково полезны из коробки. Проверьте макросы шаблона: порты, сокеты, URL status-страниц, логины мониторинга для баз данных. Если шаблон ожидает endpoint PHP-FPM status, а он не включён, Zabbix будет честно показывать unsupported item, но пользы от этого не будет.

Хорошая практика — после подключения шаблона подождать 10–20 минут, затем открыть Latest data и отфильтровать unsupported items. Так вы сразу увидите, какие проверки требуют настройки, а какие можно отключить, чтобы не плодить шум.

Если после включения мониторинга вы видите постоянный рост iowait или задержек диска, полезно отдельно проверить подсистему хранения: для этого пригодится инструкция по диагностике I/O через iostat, iotop и fio.

Шаблоны Zabbix и проверка Latest data для Linux VDS

Ротация PSK и безопасное обслуживание

Ротация PSK нужна при увольнении администратора, подозрении на утечку, переносе сервера между командами или плановой ревизии секретов. Процесс простой: создаёте новый ключ на агенте, меняете PSK в интерфейсе Zabbix, перезапускаете агент и проверяете получение данных.

sudo sh -c 'openssl rand -hex 32 > /etc/zabbix/keys/agent2.psk.new'
sudo chown zabbix:zabbix /etc/zabbix/keys/agent2.psk.new
sudo chmod 0640 /etc/zabbix/keys/agent2.psk.new
sudo mv /etc/zabbix/keys/agent2.psk.new /etc/zabbix/keys/agent2.psk
sudo systemctl restart zabbix-agent2

Важный момент: если сначала перезапустить агент с новым ключом, а в Zabbix ещё старый PSK, данные временно перестанут приходить. Поэтому планируйте короткое окно, меняйте обе стороны почти одновременно и сразу проверяйте логи.

Для группы серверов не делайте массовую ротацию вслепую. Начните с одного тестового VDS, затем обновляйте партиями. Так проще отловить ошибку в Ansible-роли, шаблоне конфигурации или правах на файл.

Диагностика типовых проблем

Агент запущен, но данных нет

Сначала проверьте hostname. В активном режиме это главный идентификатор хоста. Команда ниже покажет, что реально прописано в конфигурации, если параметр не переопределён include-файлами.

grep -E '^(Hostname|HostnameItem|ServerActive|TLS)' /etc/zabbix/zabbix_agent2.conf
sudo journalctl -u zabbix-agent2 -n 200 --no-pager

Если в логах есть сообщение о том, что host не найден, исправьте Host name в Zabbix или Hostname на агенте. Если сообщение связано с TLS, проверьте TLSPSKIdentity и сам PSK.

Ошибка TLS handshake или cannot set PSK

Проверьте права на файл ключа и отсутствие лишних символов. PSK должен быть одной hex-строкой. Частая ошибка — скопировать ключ с пробелом, переносом строки в поле веб-интерфейса или символами, которые не относятся к hex.

sudo ls -l /etc/zabbix/keys/agent2.psk
sudo wc -c /etc/zabbix/keys/agent2.psk
sudo grep -E '^[0-9a-fA-F]+$' /etc/zabbix/keys/agent2.psk

Команда wc -c учитывает перевод строки в конце файла. Для 32 байт в hex обычно получится 65 символов: 64 символа ключа и один перевод строки. Это нормально.

Пассивные проверки не работают

Проверьте, слушает ли агент порт 10050, разрешён ли IP сервера мониторинга в Server и открыт ли firewall.

sudo ss -ltnp | grep 10050
grep '^Server=' /etc/zabbix/zabbix_agent2.conf
sudo journalctl -u zabbix-agent2 -n 100 --no-pager

Если вы сознательно используете только active checks, отсутствие открытого 10050 — не ошибка. Не открывайте порт только ради зелёной галочки, если архитектура мониторинга этого не требует.

Метрики файловых систем или сервисов стали unsupported после hardening

Временно отключите drop-in systemd и проверьте снова. Если проблема исчезла, значит одно из ограничений мешает агенту читать нужные данные.

sudo systemctl revert zabbix-agent2
sudo systemctl daemon-reload
sudo systemctl restart zabbix-agent2

После этого верните hardening частями. Особенно внимательно проверяйте ProtectHome, ProtectSystem, PrivateDevices и ReadWritePaths, если у вас есть кастомные проверки, плагины или нестандартные сокеты.

Очередь данных растёт, графики отстают

Проблема может быть не на агенте, а на Zabbix Server или Proxy: не хватает poller/trapper-процессов, медленная база, тяжёлые discovery rules, слишком много новых элементов данных. На агенте проверьте логи, задержки сети и количество активных проверок. На сервере смотрите внутренние метрики Zabbix queue, busy processes и slow queries базы данных.

Мини-чеклист для production

  • Hostname на агенте совпадает с Host name в Zabbix.
  • ServerActive указывает на правильный Zabbix Server или Proxy.
  • TLSConnect, TLSAccept, TLSPSKIdentity и TLSPSKFile настроены одинаково с веб-интерфейсом.
  • PSK-файл принадлежит пользователю zabbix и не читается всеми пользователями.
  • Для active checks открыт исходящий доступ к 10051; входящий 10050 открыт только если он действительно нужен.
  • Подключён базовый Linux-шаблон active или passive в соответствии с выбранной схемой.
  • После подключения шаблонов проверены Latest data, unsupported items и шумные триггеры.
  • Systemd drop-in протестирован и не ломает нужные проверки.

Итоги

Надёжный мониторинг VDS в Zabbix начинается не с красивых дашбордов, а с аккуратной базовой настройки агента. Для Linux VDS оптимальный вариант во многих случаях — zabbix_agent2 с активными проверками и TLS PSK: минимум открытых портов, понятная модель безопасности и хорошая совместимость с современными шаблонами Zabbix.

Не забывайте, что мониторинг — это эксплуатационный контур, а не разовая установка пакета. Проверяйте логи после обновлений, следите за unsupported items, не храните PSK в открытом виде, документируйте hostname и шаблоны. Тогда Zabbix будет не просто собирать графики, а заранее предупреждать о проблемах с диском, памятью, сервисами и сетью на ваших VDS.

Поделиться статьей

Вам будет интересно

systemd-tmpfiles: безопасная очистка /tmp и кэшей вместо cron rm -rf OpenAI Статья написана AI (GPT 5)

systemd-tmpfiles: безопасная очистка /tmp и кэшей вместо cron rm -rf

Когда /tmp разрастается, рука тянется к cron и rm -rf. Разбираем, почему это рискованно, как работает systemd-tmpfiles, где лежат ...
Linux sudoers.d и visudo: безопасный sudo для deploy user OpenAI Статья написана AI (GPT 5)

Linux sudoers.d и visudo: безопасный sudo для deploy user

Показываем, как выдать deploy user только нужные sudo-права для выкладки приложения: создать правило в sudoers.d, проверить его че ...
Linux capabilities: как слушать 80 и 443 без запуска приложения от root OpenAI Статья написана AI (GPT 5)

Linux capabilities: как слушать 80 и 443 без запуска приложения от root

Показываем, как разрешить приложению bind privileged ports 80 и 443 без запуска от root: через setcap, cap_net_bind_service и syst ...