Короткий ответ
Красный 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, AllowKey | Unsupported item |
| ICMP есть, ZBX красный | 10050/PSK/Hostname | этот материал |
| Хост за proxy, server не видит агент напрямую | mode proxy, PSK proxy | Proxy не передает данные |
| SNMP-хост без агента | community, UDP 161 | SNMP не отвечает |
| Зелёный ZBX, графики дырявые | item/queue | Нет данных от хоста |
Возможные причины
От частых к редким:
- Служба
zabbix-agent2не запущена, упала после обновления пакета, unit masked. - Firewall на
WS-042или на пути не пускает10050/tcpс10.0.20.50. - В интерфейсе хоста в UI указан не тот IP/DNS, порт не
10050, или leftover interface. Server=в агенте не содержит адрес, с которого реально приходит опрос (server vs proxy).- TLS PSK: разные identity (
psk-ws042vs опечатка), разный ключ в файле,TLSConnect/TLSAcceptнеpsk, server шлёт unencrypted. Hostname=в конфиге агента не совпадает с Host name в Zabbix (для availability active-пути и для autoregistration). Для чисто пассивногоagent.pingчаще ломает IP/порт/PSK, но Hostname всё равно сверяйте.- Агент слушает только
127.0.0.1(ListenIP), а server стучится на LAN-адрес. - Редко: два агента на одном порту, 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-pagerinactive / 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 openConnection 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-agent2Windows: 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 acceptUFW:
sudo ufw allow from 10.0.20.50 to any port 10050 proto tcp comment 'zabbix agent'
sudo ufw status numberedWindows 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 разъехался
- Сверьте identity: UI,
TLSPSKIdentity=агента, аргумент--tls-psk-identity— вездеpsk-ws042. - Сверьте ключ: один и тот же hex/строка, без CR, без пробела в конце, права
640, владелецzabbix. TLSConnect=pskиTLSAccept=psk(для пассива важен Accept; для active — Connect).- В 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.example ≠ WS-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.