Есть специфичный коммутатор, у него по SNMP при опросе конфигурации в списке сетевых интерфейсов выдается весь список доступных для использования номеров VLAN, от 1 до 4095. Соответственно при открытии ноды там более 4000 объектов, система подвисает.
Ранее было рабочее решение, как на вложенной картинке - запретить опрос конфигурации и вручную его также не запускать (проект сдан в эксплуатацию, конфиг годам не меняется). При этом после первого опроса удалить все VLAN, оставив только нужные интерфейсы. Тогда при последующих открытия ноды все ок - все VLAN не появляются.
Сейчас заметил что это уже не срабатывает, версия 5.2.8. Галочка запрета стоит, удаляешь VLAN, открываешь ноду - они снова все подгружаются. Возможно путь выше не самый оптимальный и есть какое то другое решение ?
Можно воспользоваться хук скриптом Hook::CreateInterface, там поставить
if (($1.node.name == "ISW001") and ($1->name ~= "^VLAN.*"))
{
return false; // Block creation
}
return true;
Про галочку запрета проверим.
А, кстати, в какой момент происходит добавление интерфейсов? Нет такого, что после рестарта этого коммутатора?
Quote from: Filipp Sudanov on February 23, 2026, 05:52:44 PMА, кстати, в какой момент происходит добавление интерфейсов? Нет такого, что после рестарта этого коммутатора?
нет. они всегда включены, порядок действий получения ошибки
- Исходное состояние: коммутатор добавлен опросом, галочка не стоит.
- В списке узлов нажать треугольник у ноды, раскрыть ноду.
- Удалить лишние VLAN.
- нажать треугольник у ноды свернуть ноду.
- поставить галочку запрета опроса.
- выйти в любое другое меню или другой экран.
- вернуться в список узлов, нажать треугольник, нода раскроется и все VLAN снова добавятся - ошибка.
Quote from: Filipp Sudanov on February 23, 2026, 05:50:08 PMМожно воспользоваться хук скриптом Hook::CreateInterface, там поставить
if (($1.node.name == "ISW001") and ($1->name ~= "^VLAN.*"))
{
return false; // Block creation
}
return true;
Про галочку запрета проверим.
Но операция опроса и добавления интерфейсов все равно будет происходить при раскрытии ноды ? просто это будет быстро происходить (сейчас заметная очень задержка при раскрытии) и VLAN не будут добавлятся, но опрос останется. Если так - то это не совсем подходящее решение.
Configuration poll не происходит при раскрытии ноды - он происходит по своему расписанию, по умолчанию раз в час. Здесь больше похоже на какую-то проблему клиента из-за того, что интерфейсов слишком много, вероятно он на самом деле их не стирает.
Проверьте, плс вот таким скриптом с любого другого объекта:
n = FindObject("ISW001"); // или по ID ноды: FindObject(12345);
println(n.name);
println(n.interfaces.size);
скрипт напечатает имя ноды и количество интерфейсов под ней. Затем попробоваться удалить интерфейсы и еще раз запустить скрипт.
сделал, снимки до и после во вложении. Странное дело - сейчас удалил VLAN и они пока не появляются. Галочку запрета не трогал - как стояла так и стоит. Подождем до завтра, появятся или нет (чтобы час прошел).
4105 / 10
появились все удаленные VLAN снова, то есть ошибка точно есть и воспроизводится. Тут скрипт выполнен с другой ноды.
версия 6.0.5 - проблема все еще есть
версия 6.1.1 - теперь при удалении сервер завершает работу с ошибкой
После такого завершения с ошибкой посмотрите в /var/log/netxmsd - если там видно что сервер рестартовал, то он вероятно крешится. Тогда нужно посмотреть, создался ли core файл (crash dump). Если ubuntu, то они обычно создаются в /var/crash
Quote from: Filipp Sudanov on May 18, 2026, 05:10:16 PMПосле такого завершения с ошибкой посмотрите в /var/log/netxmsd - если там видно что сервер рестартовал, то он вероятно крешится. Тогда нужно посмотреть, создался ли core файл (crash dump). Если ubuntu, то они обычно создаются в /var/crash
в /var/log/netxmsd новых записей нет, при этом дамп в /var/crash появляется. Что с ним сделать ?
1. установить пакеты netxms-dbg и gdb
2. распаковать креш дамп:
apport-unpack /var/crash/YOUR_CRASH_FILE TARGET_DIRECTORY
3. перейти в эту директорию
cd TARGET_DIRECTORY
4. запустить gdb
gdb /usr/bin/netxmsd CoreDump
5. в gdb дать команду
bt
и покажите вывод
обновился до 6.1.3, проблема осталась. Сначала вышло сообщение как на картинке 1, также во вложении вывод по команде bt
Сделал исправление в сервере, должно исправить падение. Войдет в следующий релиз.
Quote from: Victor Kirhenshtein on June 14, 2026, 07:34:18 PMСделал исправление в сервере, должно исправить падение. Войдет в следующий релиз.
не срабатывает, все равно опрашивает и заново добавляет все VLAN при открытии, версия 6.2.0
из плюсов: при удалении всех VLAN одной операцией теперь ошибок не возникает, сервер не останавливается.
Самое простое решение - добавить в Hook::CreateInterface:
if (($1.name == "ISW001") and ($1->name ~= "^VLAN.*"))
{
return false; // не создавать VLAN-интерфейсы
}
return true;
Quote from: Alex Kirhenshtein on July 09, 2026, 10:29:51 PMСамое простое решение - добавить в Hook::CreateInterface:
что то тоже не срабатывает - при ручном запуске опроса конфигурации в логе нет сообщений о блокировке(?) создания интерфейса. Компилятор ошибок на синтаксис не выдает.
Полагаю должно быть так ?
if (($node.name == "ISW001" or $node.name == "ISW002" or $node.name == "ISW003") and ($1.name ~= "^VLAN.*"))
{
return false; // не создавать VLAN-интерфейсы
}
return true;
Да, так правильно. Ну или можно чуть более лаконично:
if (($node.name in ["ISW001", "ISW002", "ISW003"]) and ($1.name ~= "^VLAN.*"))
{
return false; // не создавать VLAN-интерфейсы
}
return true;
Quote from: Filipp Sudanov on July 10, 2026, 01:31:03 PMДа, так правильно. Ну или можно чуть более лаконично:
if (($node.name in ["ISW001", "ISW002", "ISW003"]) and ($1.name ~= "^VLAN.*"))
{
return false; // не создавать VLAN-интерфейсы
}
return true;
на одном их трех коммутаторов не срабатывает, и странным образом - добавляются все равно интерфейсы, но не все как ранее - а только последние некоторые, к примеру с 3385 по 3418 как на картинке.
более подробно один из интерфейсов VLAN 3385 к примеру
Начиная с 5.2 статусный опрос сам запускает пересинхронизацию интерфейсов, если считает, что устройство перезагрузилось (коммит 4943ddf210, NX-2728). Перезагрузка определяется сравнением вычисленного времени старта системы (текущее время минус sysUpTime), а это значение из-за округления и сетевых задержек гуляет на 1–2 секунды между опросами. Любой сдвиг вперёд трактуется как рестарт — и выполняется полная синхронизация интерфейсов, которая не проверяет галочку запрета опроса конфигурации. Поэтому VLAN'ы возвращаются даже с установленной галочкой, обычно в течение нескольких минут: статусный опрос по умолчанию идёт раз в 60 секунд, отсюда и впечатление, что это происходит при раскрытии ноды.
По ISW002 (VLAN 3385–3418) по коду вижу два возможных пути: либо для этих интерфейсов не удалось запустить хук-скрипт (в этом случае интерфейс сейчас создаётся без проверки), либо они не создавались заново, а обновились по ifIndex — обновление существующего объекта хук не вызывает. Чтобы понять, какой вариант у вас, включите в netxmsd.conf отладку:
DebugTags = poll.status:5,node.iface:7
и после следующего появления VLAN'ов пришлите фрагмент лога по этой ноде — интересуют строки "system restart detected" и "accepted/rejected by filter".
Хук пока оставьте.
В 6.2.2 должно исправится.