Короткий ответ

Красный ZBX на WS-042 почти никогда не лечится сменой шаблона. Сначала докажите три вещи с сервера 10.0.20.50 (или с proxy, если хост за ним): TCP 10050 открыт до агента, PSK psk-ws042 совпадает на обеих сторонах, поле Hostname в zabbix_agent2.conf буква в букву совпадает с именем хоста в Zabbix. Только после этого трогайте item'ы.

Пассивная проверка: сервер/proxy стучится на агент, порт 10050. Активная: агент сам ходит на 10.0.20.50:10051. Это разные пути. Если у хоста только active checks, «недоступен агент» в UI часто значит «нет данных agent.ping в интервале Unavailable delay», а не «порт 10050 закрыт». Разбор «данных нет, агент вроде жив» — в Нет данных от хоста. Active checks отдельно: Active checks не работают.

Симптомы и как отличить

Типичная картина:

  • в Monitoring → Hosts у WS-042 иконка ZBX серая или красная;
  • триггер шаблона «Zabbix agent is not available by ICMP» или «Zabbix agent is not available» в PROBLEM;
  • Latest data: agent.ping пусто или давно не обновлялся;
  • с 10.0.20.50 команда zabbix_get зависает или cannot connect.

Отличия:

Что видноСкорее не «агент лёг»Куда
ZBX зелёный, один item пустойключ, timeout, AllowKeyUnsupported item
ICMP есть, ZBX красный10050/PSK/Hostnameэтот материал
Хост за proxy, server не видит агент напрямуюmode proxy, PSK proxyProxy не передает данные
SNMP-хост без агентаcommunity, UDP 161SNMP не отвечает
Зелёный ZBX, графики дырявыеitem/queueНет данных от хоста

Возможные причины

От частых к редким:

  1. Служба zabbix-agent2 не запущена, упала после обновления пакета, unit masked.
  2. Firewall на WS-042 или на пути не пускает 10050/tcp с 10.0.20.50.
  3. В интерфейсе хоста в UI указан не тот IP/DNS, порт не 10050, или leftover interface.
  4. Server= в агенте не содержит адрес, с которого реально приходит опрос (server vs proxy).
  5. TLS PSK: разные identity (psk-ws042 vs опечатка), разный ключ в файле, TLSConnect/TLSAccept не psk, server шлёт unencrypted.
  6. Hostname= в конфиге агента не совпадает с Host name в Zabbix (для availability active-пути и для autoregistration). Для чисто пассивного agent.ping чаще ломает IP/порт/PSK, но Hostname всё равно сверяйте.
  7. Агент слушает только 127.0.0.1 (ListenIP), а server стучится на LAN-адрес.
  8. Редко: два агента на одном порту, AppArmor/SELinux режет бинарь после кастомного пути, IPv6 AAAA в DNS ведёт не туда.

Диагностика

Рабочее место: сам сервер Zabbix zabbix.example (10.0.20.50) или proxy, который опрашивает хост. Подставьте свой IP агента вместо плейсхолдера.

1. Служба и порт на WS-042

На Windows (служба «Zabbix Agent 2»):

Get-Service 'Zabbix Agent 2'
Get-NetTCPConnection -LocalPort 10050 -ErrorAction SilentlyContinue |
  Format-Table State, LocalAddress, OwningProcess
Select-String -Path 'C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf' -Pattern '^(Server|Hostname|TLS|Listen)'

На Linux:

systemctl status zabbix-agent2 --no-pager
ss -lntp | grep 10050
sudo grep -E '^(Server|ServerActive|Hostname|TLS|Listen)' /etc/zabbix/zabbix_agent2.conf
sudo journalctl -u zabbix-agent2 -n 80 --no-pager

inactive / failed — сначала логи unit, не UI. ListenIP=127.0.0.1 при опросе на LAN — типичный «после hardening» сюрприз.

2. TCP с сервера 10.0.20.50

# с zabbix.example, IP агента подставьте свой
nc -vz WS-042 10050
# или
timeout 3 bash -c 'echo >/dev/tcp/10.0.20.42/10050' && echo open

Connection refused — процесс не слушает. Timeout — фильтр на пути. Успех TCP ещё не значит, что протокол Zabbix и PSK в порядке.

3. zabbix_get без TLS и с PSK

Сначала как в UI хоста: тот же IP/DNS и порт.

zabbix_get -s WS-042 -p 10050 -k agent.ping
zabbix_get -s 10.0.20.42 -p 10050 -k agent.hostname

Если в хосте включён PSK (так и должно быть вне лаборатории):

zabbix_get -s 10.0.20.42 -p 10050 -k agent.ping \
  --tls-connect psk \
  --tls-psk-identity psk-ws042 \
  --tls-psk-file /etc/zabbix/psk-ws042.psk

Файл ключа на сервере должен быть тем же содержимым, что /etc/zabbix/psk-ws042.psk на агенте (или Windows-путь в конфиге). Identity строго psk-ws042. Ответ 1 и имя хоста — агент жив. failed to connect, handshake error, empty response — фиксируйте stderr целиком в заявку.

4. Согласование имён и TLS в UI

В Configuration → Hosts → WS-042:

  • Host name = значение Hostname= агента;
  • интерфейс Agent: адрес, с которым вы только что открыли 10050;
  • Encryption: PSK, identity psk-ws042, ключ тот же;
  • если хост на proxy — поле Monitored by proxy заполнено, Server= агента содержит IP proxy, не обязательно 10.0.20.50.

Лог агента при неверном PSK обычно кричит про TLS ещё до item'ов. Временно DebugLevel=4 в конфиге агента, рестарт, одна попытка zabbix_get, сразу вернуть 3.

sudo grep -iE 'psk|tls|denied|refused|hostname' /var/log/zabbix/zabbix_agent2.log | tail -n 50

Решение

Сценарий A. Служба не запущена

sudo systemctl enable --now zabbix-agent2
systemctl is-active zabbix-agent2

Windows: Start-Service 'Zabbix Agent 2', StartType Automatic. Если unit падает сразу — читайте journalctl -u zabbix-agent2 / Event Log: битый конфиг, нет файла PSK, права на psk-ws042.psk не для пользователя службы.

Сценарий B. Порт фильтруется

На агенте откройте только источник мониторинга:

# пример nftables: заменить на ваш набор
sudo nft add rule inet filter input ip saddr 10.0.20.50 tcp dport 10050 ct state new accept

UFW:

sudo ufw allow from 10.0.20.50 to any port 10050 proto tcp comment 'zabbix agent'
sudo ufw status numbered

Windows Firewall: inbound TCP 10050, Remote IP 10.0.20.50 (или подсеть proxy), профиль Domain. Не создавайте Any/Any.

SELinux: не setenforce 0 насовсем. Если агент из пакета дистрибутива — порт zabbix_agent_port_t уже есть. Кастомный бинарь — отдельный модуль, не permissive навсегда.

Сценарий C. Неверный Server / ListenIP / интерфейс UI

В /etc/zabbix/zabbix_agent2.conf (фрагмент):

Server=10.0.20.50
ListenPort=10050
# ListenIP не сужайте к 127.0.0.1, если poller ходит на LAN
Hostname=WS-042

После правки:

sudo systemctl restart zabbix-agent2
zabbix_get -s 10.0.20.42 -p 10050 -k agent.hostname

В UI интерфейс Agent должен резолвиться в тот же адрес. Лишний DNS с чужим A-записью даёт «иногда недоступен».

Сценарий D. PSK разъехался

  1. Сверьте identity: UI, TLSPSKIdentity= агента, аргумент --tls-psk-identity — везде psk-ws042.
  2. Сверьте ключ: один и тот же hex/строка, без CR, без пробела в конце, права 640, владелец zabbix.
  3. TLSConnect=psk и TLSAccept=psk (для пассива важен Accept; для active — Connect).
  4. В UI хоста Encryption = PSK, не «No encryption» на одной стороне.
sudo -u zabbix test -r /etc/zabbix/psk-ws042.psk && echo readable
sudo wc -c /etc/zabbix/psk-ws042.psk

Пересоздавать ключ можно, но синхронно на агенте и в UI. Иначе получите час «агент мёртв» на всём шаблоне.

Сценарий E. Hostname

Hostname=WS-042 и Host name в Zabbix — идентичны, без домена, если в UI короткое имя. WS-042.zabbix.exampleWS-042. Для active checks это критично; для пассива availability всё равно держите консистентно, иначе autoregistration и metadata разъедутся.

Как проверить, что проблема устранена

С 10.0.20.50 (или с proxy):

zabbix_get -s 10.0.20.42 -p 10050 -k agent.ping \
  --tls-connect psk \
  --tls-psk-identity psk-ws042 \
  --tls-psk-file /etc/zabbix/psk-ws042.psk

Ожидание: 1. Затем в UI: Availability ZBX зелёный, Latest data agent.ping свежий в пределах update interval. Триггер недоступности в OK, не в закрытом вручную FALSE.

Подождите Unavailable delay + один цикл poller (часто 1–3 минуты, смотрите макрос шаблона). Не объявляйте победу по одному зеленому пингу ICMP.

Если не помогло

  • TCP 10050 есть, zabbix_get без PSK получает мусор — UI требует PSK, вы стучитесь plaintext.
  • zabbix_get с server OK, UI красный — хост на proxy, cache не обновился, или интерфейс в UI другой. zabbix_server -R config_cache_reload на 10.0.20.50 после смены encryption.
  • Active-only хост: пассивный zabbix_get может быть закрыт политикой, смотрите лог cannot send list of active checks — это уже active checks.
  • Кластер / NAT: poller видит DNAT на чужой агент. Сверьте agent.hostname.
  • Timeout 3s на загруженном хосте: поднимите Timeout агента и item timeout в UI согласованно, не маскируйте мёртвый диск бесконечным timeout.

Профилактика

  • Агент 2 из пакета, unit enabled, мониторинг самой службы (systemd.unit.info / Windows service).
  • PSK на каждый хост или на группу с учётом процедуры ротации; identity вида psk-ws042, ключ не в git.
  • Firewall: allowlist IP 10.0.20.50 или proxy, не world.
  • Имя хоста в golden image задавайте скриптом, не клонируйте один Hostname=WS-042 на два сервера.
  • Проверяйте zabbix_get с сервера в runbook приёмки VM, до передачи «в прод».

FAQ

Можно ли оставить агент без шифрования в LAN?

Технически да, как политика — нет. Пассивный агент принимает ключи и system.run, если их открыть. PSK identity psk-ws042 — минимум для WS-042. TLS cert сложнее в мелкой инфраструктуре, PSK достаточно.

Почему ping есть, а zabbix_get нет?

ICMP разрешён, 10050/tcp нет. Или слушает localhost. Или PSK. Три разные поломки.

Агент 1 или agent 2?

Для 6.0/7.0 LTS ставьте Zabbix agent 2. Конфиг похож, но plugins и AllowKey другие. Не смешивайте два агента на одном 10050.

Нужно ли открывать 10051 на WS-042?

Нет. 10051 слушает server/proxy на 10.0.20.50. На агенте для пассива нужен 10050. Для active агент исходящий на 10051.

Host metadata и авторегистрация путают имя?

Если Host name задан вручную WS-042, авторегистрация с другим Hostname создаст дубль. Держите один источник правды — inventory/CMDB → Hostname.

Стоит ли DebugLevel=5 на ночь?

Нет. Диск и I/O агента раздуются, симптомы «недоступен» усилятся. Сняли handshake — вернули 3.