Коротко. NIC_DOWN по портам без кабеля — не поломка: чекер считает состояние DOWN отказом, а порт просто не скоммутирован. Штатное лечение — перевести такие порты в модели в NOTMANAGED: сканер их не перезаписывает, чекер пропускает и закрывает событие сам.
Симптом
- Пачка
ERROR NIC_DOWNпо нескольким портам (enp…/eth…), события висятLIVE. - В GUI интерфейсов больше, чем портов: на 8 портов — 16 записей (дубли
eth*иenp*). - Рядом
NIC_NOT_FOUNDпо портамNOTMANAGED/NOTFOUNDиNOLINKпо порту без кабеля. - На S3 и модель событие не влияет, но шумит в мониторинге и маскирует настоящий отказ порта.
Что проверить первым (read-only)
-
Линк по портам:
bash ip -br link showОжидаетсяUPу портов с кабелем иDOWNбезLOWER_UPу неподключённых. -
Линк и скорость по спорному порту:
bash ethtool <IF> | grep -E 'Speed|Link detected'ОжидаетсяLink detected: no— кабеля нет, порт не сломан. -
Что в модели:
bash sudo curl -sk --cert <CERT> --key <KEY> \ https://127.0.0.1:8443/model/machine/<MGUID>/nic/ \ | jq '.nic[] | {device,status,macaddress}'ОжидаетсяDOWN/NOTFOUNDу лишних,UP/BONDEDу рабочих. -
Кто эмитит событие:
bash grep -i 'network_interfaces_status' /opt/ampli/var/log/mona/mona.log | tail -10Ожидается запись чекера по этому порту: событие модельное, не от драйвера. -
Нет ли настоящего отказа: порт с кабелем, который
DOWN, — уже не «лишний NIC»; дальше идти по статье про storage-кольцо. -
Сверка с проектом подключения. По схеме площадки выписать порты, которые должны быть заняты, и сравнить с выводом
ip -br link. Ожидается: занятые порты совпадают с проектом один к одному, остальные — кандидаты вNOTMANAGED. Такая сверка заодно ловит ошибку «кабель в чужом порту», которая иначе всплывёт позже как разрыв кольца.
Причина
1. Чекер считает DOWN отказом
Чекер network_interfaces_status.py проверяет только {UP, DOWN, BONDED} и репортит любое из них.
Порт без линка штатно в DOWN и попадает в ту же корзину, что реально упавший.
2. Модель знает больше портов, чем подключено
Инвентарь перечисляет все порты платформы, включая неподключённые. Плюс ошибка установки: профиль
описывает eth0..eth7, а ОС называет порты enp… — в модели обе записи. Отсюда «16 NIC на 8
портов». Скан при этом не «лишние» записи не удаляет: он только добавляет и обновляет, поэтому
разбирать список нужно вручную, а не ждать, что инвентаризация сама всё приведёт в порядок.
3. NIC_NOT_FOUND и NOLINK — та же семья
Рядом с NIC_DOWN обычно идут NIC_NOT_FOUND (порт есть в модели, но не сопоставлен с железом
или помечен NOTFOUND) и NOLINK (порт без линка). Все три — про отсутствие кабеля или про
расхождение инвентаря, а не про отказ адаптера. Хронический характер таких событий (месяцами по
одним и тем же MAC) — признак именно этой семьи, а не «плавающего» железа. Разбирать их нужно
вместе: пока в модели остаются записи о неподключённых портах, чекер будет находить их каждым
циклом.
4. Почему нельзя «выключить порт»
Действие nic down на пустом порту падает: load_settings() требует хотя бы одну сетевую секцию →
ValueError: Insufficient settings to configure interface. Остаётся смена статуса в модели.
5. Почему NOTMANAGED — штатный путь
NOTMANAGED — допустимое состояние NIC в модели; для сканера оно в NO_UPDATE_STATES
(NOTMANAGED, DECOMMISSIONED, DISABLED) и не перезаписывается. Чекер пропускает все статусы,
кроме {UP, DOWN, BONDED}; при пустом списке правило само снимает событие. Закрытие — на следующем
цикле монитора (в наших условиях 600 с).
Решение (штатное)
- Определить лишние порты пунктами 1–3: нет кабеля, нет линка, статус
DOWN/NOTFOUND. - Перевести в
NOTMANAGEDпо одному, с проверкой ответа:bash sudo curl -sk --cert <CERT> --key <KEY> -X PUT \ -H 'Content-Type: application/json' -d '{"status": "NOTMANAGED"}' \ https://127.0.0.1:8443/model/machine/<MGUID>/nic/<NGUID>/Ожидается200; безContent-Type: application/jsonтот жеPUTдаёт400. - Проверить, что сканер не вернул статус после ближайшей инвентаризации — повторный
GETпо NIC показываетNOTMANAGED. - Дождаться цикла чекера:
LIVE NIC_DOWNпо этим портам исчезает (наблюдали 8 → 4 → 0). - Не трогать порты с кабелем — их статус менять нельзя, иначе порт выпадет из проверки.
Если штатный путь недоступен
Временная мера, не штатно. Если правка модели недоступна (нет доступа к Model API), допустимо
закрыть событие действием ignore с записью в журнал. Событие вернётся на следующем цикле — это не
устранение, а пауза до получения доступа.
Проверка
ip -br linkиethtoolподтверждают отсутствие линка на этих портах.GET /model/machine/<MGUID>/nic/→NOTMANAGEDу лишних,UP/BONDEDу рабочих.LIVE NIC_DOWNпо этим портам — 0; новых нет за цикл (600 с).- Порты с кабелем остаются в проверке и не показывают
DOWN. - Повторный
GETNIC через час: статусы лишних портов всё ещёNOTMANAGED, инвентаризация их не вернула вDOWN. Если вернула — проверить, что правка пришлась на документ NIC, а не на копию.
Профилактика
- До установки переписать профиль машины на реальные имена
enp*или убрать NIC из профиля — скан создаст их сам. - После установки провести чистку лишних записей (в нашем образе — пост-установочный скрипт чистки FAN/NIC через Model API).
- Не оставлять в модели порты без кабеля в статусе
DOWN: сразуNOTMANAGED. - Сверять список интерфейсов модели с проектом подключения при приёмке.
Источники и дата
- Software Documentation Center (доступ 2026-11-07).
- Наша практика (обезличено): 6 портов без линка переведены в
NOTMANAGEDна 3-нодном кластере;LIVE NIC_DOWNзакрылись в течение цикла (8 → 4 → 0). - Обновлено: 2026-11-07.