АйТи Фреш
Главная / Статьи / DevOps и автоматизация
DevOps и автоматизация

Почему активный агент Zabbix 7.4 не выбирает доступный прокси

Автор: Семёнов Евгений Сергеевич, директор ООО «АйТи-Фреш» · · ~17 мин чтения
Почему активный агент Zabbix 7.4 не выбирает доступный прокси
Иллюстрация к статье «Почему активный агент Zabbix 7.4 не выбирает доступный прокси».

Прокси зелёный. Группа Online. Резерв есть. Но активный агент в филиале упорно пытается достучаться до адреса, к которому у него нет маршрута. Я, Евгений Семёнов, встречаю эту картину после каждого второго внедрения proxy groups: от Zabbix ждут проверки сетевой доступности глазами агента, хотя сервер проверяет совсем другое. Ниже разберу механику без магии, покажу кейс антикварного магазина на 44 рабочих места и дам порядок диагностики, с которого сам начинаю такие работы.

Зелёный прокси ещё не доступен агенту

Состояние Online у прокси означает только одно: прокси связался с Zabbix server в пределах заданного Failover period. По умолчанию это одна минута, допустимый диапазон в 7.4 — от 10 секунд до 15 минут. Сервер не запускает проверку из подсети филиала и не строит матрицу маршрутов «каждый агент — каждый прокси». Если активный proxy из ЦОД успешно выходит к серверу, он будет зелёным даже тогда, когда межсетевой экран филиала отбрасывает обращения агентов к его TCP/10051.

Группа прокси тоже не доказывает сквозную доступность. При Minimum number of proxies, равном 1, группе достаточно одного или нескольких прокси, поддерживающих связь с сервером. Параметр отвечает за состояние группы и возможность перераспределения хостов, а не за достижимость её участников из каждой клиентской сети. Уменьшать Failover period в такой ситуации бесполезно: недоступный агентам прокси продолжает вовремя общаться с сервером и остаётся Online.

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

Если сервер видит прокси, это ничего не говорит о маршруте «рабочая станция → прокси:10051». Проверяйте его именно с проблемного хоста.
Памятка: Зелёный прокси ещё не доступен агенту — схема
Памятка: Зелёный прокси ещё не доступен агенту. Открыть схему в полном размере

Что на самом деле делает ServerActive

Активный агент сам подключается к trapper-порту сервера или прокси, обычно TCP/10051, получает список active items, выполняет их и отправляет значения обратно. В Zabbix 7.4 участники одного кластера или proxy group перечисляются в ServerActive через точку с запятой. Запятая имеет другую семантику: она разделяет независимые серверы или кластеры, с которыми агент работает параллельно. Я регулярно вижу запятые, поставленные как знак «резервный адрес». Это неверная конфигурационная модель.

Даже если в ServerActive указан один участник группы, агент версии 7.0 и новее после успешного подключения получает и кэширует список адресов прокси группы и сведения об их нагрузке. Дальше запрос может быть перенаправлен на тот прокси, которому сервер назначил конкретный хост. Если опубликованный адрес недоступен через firewall или маршрутизацию, active checks зависнут до тайм-аута либо завершатся ошибкой. Наличие достижимого начального адреса не отменяет перенаправление.

Именно поэтому ServerActive я называю точкой входа и описанием кластера, но не гарантией маршрута. Перечислить два DNS-имени полезно: агент сможет стартовать, если первый узел действительно выключен. Однако список не обещает, что Zabbix выберет узел по результату локального Test-NetConnection. В официальной документации требование сформулировано прямо: агент должен иметь возможность подключиться через firewall ко всем прокси группы.

Для пассивных проверок логика зеркальная. В параметре Server агента нужно перечислить все прокси группы, и здесь разделитель — запятая: это список адресов, с которых агент принимает входящие подключения на TCP/10050, а не описание кластера. Если в Server оставить только первый прокси, после перераспределения второй начнёт опрашивать хост и получит отказ, хотя в интерфейсе оба узла будут зелёными. Address for active agents, заданный у прокси, используется и при подключении к активным, и к пассивным прокси.

Один доступный адрес в ServerActive помогает агенту войти в группу, но не делает остальные адреса достижимыми.
Почему активный агент Zabbix 7.4 не выбирает доступный прокси — схема
Схема к статье. Открыть схему в полном размере

Кейс «АнтикварГрад»: как замолчала половина агентов

Разберу обезличенный проект под условным названием антикварный магазин «АнтикварГрад». 44 рабочих места: 41 компьютер на Windows 11 (торговый зал, кассы, оценщики, бухгалтерия, реставрационная мастерская) и три Linux-узла на Ubuntu 24.04 LTS — сервер учёта, файловое хранилище фотокаталога и мини-ПК, который собирает данные датчиков температуры и влажности в хранилище. Честно скажу: для 44 машин один proxy или даже прямое подключение агентов к серверу — нормальная схема. Второй прокси появился по конкретной причине: однажды единственный proxy магазина завис в пятницу вечером, и до понедельника никто не узнал, что в хранилище с мебелью XVIII века влажность ушла за 70 %. Владелец попросил резерв именно для этого сценария.

На момент контрольного испытания server, два proxy и Agent 2 были обновлены до Zabbix 7.4.14. Серверу хватило 2 vCPU и 4 ГБ RAM, каждому прокси — 1 vCPU и 1 ГБ RAM с отдельной SQLite-базой. Это размеры конкретного стенда с большим запасом, а не официальные минимальные требования. Сначала все 44 хоста обслуживал proxy-a — виртуальная машина в серверной магазина с адресом 10.20.30.10. Затем в группу добавили proxy-b в арендованном облаке: у него был адрес управления 172.20.8.12, он исправно подключался к Zabbix server 172.20.8.5 и поэтому отображался как Online. В поле Address for active agents у второго прокси по ошибке оставили тот же 172.20.8.12. Из VLAN рабочих станций 10.20.30.0/24 маршрута к нему не было.

У группы стояли Failover period 1m и Minimum number of proxies 1. Сразу после добавления резерва всё выглядело нормально. Затем сработала балансировка. При распределении 44/0 среднее равно 22: у первого прокси избыток 22 хоста, что больше порога в 10 хостов и ровно вдвое выше среднего. Дисбаланс держался дольше grace period, равного десяти Failover period, и сервер перераспределил хосты 22/22. В Latest data у 22 станций, включая мини-ПК с датчиками хранилища, появились пробелы. Оба прокси при этом оставались зелёными.

Администратор добавил оба адреса в ServerActive и перезапустил Agent 2. Результат не изменился: агент успешно входил через первый прокси, получал актуальное назначение и затем пытался работать через недостижимый 172.20.8.12. После настройки маршрута через VPN, правила TCP/10051 и правильного DNS-имени для второго прокси мы повторили балансировку и полное выключение первого узла. Все 44 агента восстановили передачу; самое медленное переключение заняло 74 секунды. Благодаря persistent buffer потерь значений в нашем испытании не было.

Название организации условное, адреса и детали обезличены. Цифры стенда приведены, чтобы сценарий можно было воспроизвести, а не как раскрытие клиента.

Диагностика: начинаю с рабочей станции

Первое, что я делаю, — не перезапускаю Zabbix server и не меняю пороги группы. Открываю проблемный хост и проверяю DNS и TCP/10051 до каждого Address for active agents. Проверка с сервера, ноутбука администратора или самого прокси не подходит: у них другие таблицы маршрутизации, DNS-зоны и правила firewall.

На Windows достаточно штатного PowerShell. Важно проверить оба имени по отдельности и записать полученные IP. Если DNS возвращает management-адрес, NAT с неправильной стороны или IPv6 без рабочего маршрута, проблема уже найдена.

Resolve-DnsName proxy-a.mon.example.local
Resolve-DnsName proxy-b.mon.example.local
Test-NetConnection proxy-a.mon.example.local -Port 10051 -InformationLevel Detailed
Test-NetConnection proxy-b.mon.example.local -Port 10051 -InformationLevel Detailed

На Linux я выполняю эквивалентную проверку через getent и nc:

getent ahosts proxy-a.mon.example.local
getent ahosts proxy-b.mon.example.local
nc -vz -w 3 proxy-a.mon.example.local 10051
nc -vz -w 3 proxy-b.mon.example.local 10051

Затем сверяю три вещи в интерфейсе: хост должен быть Monitored by proxy group, оба proxy должны входить именно в эту группу, а их Address for active agents обязаны быть адресами, доступными агентам. Полезно посмотреть текущее количество назначенных хостов у каждого прокси. Если перестали обновляться примерно 20–22 станции из 44, а распределение стало 22/22, это гораздо сильнее указывает на маршрут до одного участника, чем на случайный сбой Agent 2.

Если DNS и TCP-подключение до одного из опубликованных прокси не проходят с рабочей станции, сначала чините сеть. Дальнейшая настройка Zabbix только маскирует причину.
Порядок действий: Диагностика: начинаю с рабочей станции — схема
Порядок действий: Диагностика: начинаю с рабочей станции. Открыть схему в полном размере

Конфигурация, которую я оставил в проекте

Я выбираю простой вариант: одна proxy group соответствует одной зоне сетевой достижимости. В «АнтикварГрад» первый proxy остался в серверной магазина, второй — в ЦОД, но для него сделали отдельное имя proxy-b.mon.example.local, которое из сети магазина разрешалось в 10.20.254.22 — адрес на стороне VPN. Firewall разрешал 10.20.30.0/24 обращаться по TCP/10051 к обоим узлам. Серверный адрес и management-интерфейс второго прокси агентам больше не публиковались.

В Administration → Proxies мы указали Address for active agents: proxy-a.mon.example.local:10051 и proxy-b.mon.example.local:10051. Это отдельное понятие от адреса, по которому активный proxy сам соединяется с сервером. Смешивать agent-facing и management-сети удобно только на маленьком плоском стенде. В филиальной инфраструктуре я их разделяю и называю явно.

Фрагмент конфигурации Windows Agent 2 выглядел так. PSK у каждого хоста был свой; файл ключа создавался системой управления конфигурациями и не распространялся вместе с шаблоном.

Hostname=AG-RM-023
ServerActive=proxy-a.mon.example.local;proxy-b.mon.example.local
RefreshActiveChecks=5
Timeout=5
TLSConnect=psk
TLSPSKIdentity=AG-RM-023
TLSPSKFile=C:\ProgramData\Zabbix\agent.psk
EnablePersistentBuffer=1
PersistentBufferFile=C:\ProgramData\Zabbix\zabbix_agent2.db
PersistentBufferPeriod=24h
LogType=file
LogFile=C:\ProgramData\Zabbix\zabbix_agent2.log

RefreshActiveChecks=5 — штатное значение по умолчанию в Agent 2 версии 7.4. После неудачного обновления агент делает следующую попытку через 60 секунд, поэтому переключение не обязано укладываться в пять секунд. Timeout=5 немного удобнее на VPN, но увеличивать его до 30 секунд ради недоступного маршрута я не советую.

Перед распространением конфиг проверяли штатным тестом, затем перезапускали службу:

& 'C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe' -T -c 'C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf'
Restart-Service 'Zabbix Agent 2'
Get-Content 'C:\ProgramData\Zabbix\zabbix_agent2.log' -Tail 100

Persistent buffer полезен при коротком обрыве, но это страховка данных, а не средство выбора маршрута. Если TCP/10051 недоступен сутками, буфер лишь отсрочит потерю значений.

Если обеспечить доступ ко всем участникам невозможно, не включайте их в одну группу для этих агентов. Создайте отдельную proxy group по зоне достижимости.

Как испытывать резерв, а не индикатор

После исправления я всегда провожу два разных теста. Сначала останавливаю proxy, на котором находятся выбранные контрольные хосты. Сервер должен признать его Offline после Failover period и перераспределить хосты. Затем запускаю или перезагружаю один агент, пока исходный proxy выключен. Второй сценарий ловит опасную конфигурацию, где в ServerActive указан единственный недоступный bootstrap-адрес.

Второй тест сетевой: proxy оставляем Online для сервера, но временно закрываем путь от тестовой рабочей станции к его agent-facing адресу. Это и есть сценарий из статьи. Ожидаемый результат честный: Zabbix не обязан объявить proxy Offline, потому что его связь с сервером цела. Мы проверяем, что такого одностороннего ограничения в боевой матрице firewall вообще не может возникнуть и что мониторинг отдельно контролирует доступность TCP/10051 из каждой филиальной зоны.

На что можно забить? На попытку добиться переключения за две-три секунды для обычных рабочих мест. Failover period в 30–60 секунд плюс повторное обновление active checks обычно разумнее, чем агрессивные десять секунд и нервная реакция на краткий сетевой джиттер. А вот на запуск агента при выключенном первом адресе забивать нельзя: именно этот тест выявляет резерв, существующий только на схеме.

Failover считается проверенным только после контролируемого отказа каждого proxy и старта нового процесса агента при недоступности первого адреса.

Мой приоритет: сначала связность, потом Zabbix

Причина такого сбоя обычно не в алгоритме балансировки Zabbix 7.4. Наоборот, он делает ровно то, что обещано: видит два online proxy и распределяет между ними хосты. Ошибка появляется уровнем ниже — один из опубликованных адресов недостижим из сети агента. Сервер об этом не знает и узнавать по текущей модели не обязан.

Порядок действий у меня жёсткий. Сначала проверяю с проблемного хоста DNS и TCP/10051 ко всем участникам. Затем сверяю Address for active agents и назначение хоста группе. После этого исправляю маршруты, ACL и имена. И только потом трогаю Failover period, Minimum number of proxies, буферы и интервалы. Такой порядок экономит часы бессмысленных перезапусков.

На сентябрь 2026 года актуальный выпуск ветки — Zabbix 7.4.14 от 25 августа 2026 года; сама 7.4 является Standard release с ограниченной поддержкой до IV квартала 2026 года, а 7.0 LTS поддерживается полностью до 30 июня 2027 года. Для нового долгоживущего внедрения я уже планировал бы переход на следующую LTS-ветку после её стабильного выпуска и проверки миграции. Но обновление версии само по себе не исправит отсутствующий маршрут: правило «каждый агент достигает каждого proxy своей группы» останется главным.

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

Частые вопросы

Почему Zabbix server считает недоступный агенту proxy исправным?

Online отражает своевременную связь proxy с Zabbix server. Маршрут от конкретного агента к TCP/10051 этого proxy сервер не проверяет.

Переключится ли агент, если перечислить два proxy в ServerActive?

Список через точку с запятой улучшает начальное подключение, но агент всё равно может быть перенаправлен на назначенный сервером proxy. Каждый участник группы должен быть доступен агенту.

Поможет ли уменьшение Failover period до 10 секунд?

Нет, если proxy продолжает общаться с сервером. Он останется Online независимо от того, доступен ли его agent-facing адрес из филиала.

Можно ли разделить участников proxy group запятыми?

Для одной группы используйте точку с запятой. Запятые разделяют независимые серверы или кластеры, с которыми агент работает параллельно.

Как указать прокси группы для пассивных проверок?

Перечислите все прокси группы в параметре Server через запятую. Иначе после перераспределения хоста новый proxy не сможет его опрашивать, потому что агент отклонит подключение.

Что делать, если филиал физически не может обращаться ко всем proxy?

Разнести хосты по отдельным proxy groups, соответствующим зонам сетевой достижимости, либо сначала построить общий доступ через VPN и firewall. Я предпочитаю отдельные группы, если общий маршрут нельзя гарантировать.

Почему после исправления маршрута данные восстановились не сразу?

На время влияют Failover period, обновление назначения и повторная попытка агента. После неудачного обновления active checks Agent 2 повторяет его через 60 секунд.

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 💬 MAX: +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

© ООО «АйТи-Фреш» · Москва · Все статьи