Короткий ответ
Инвентаризация узлов — не «опрос коллег». Сведите четыре источника в лист CMDB Hosts: Active Directory, гипервизор, DHCP/DNS, свой сетевой скан. На каждую строку: имя, IP, OS, роль (DC, файлы, 1С, jump), владелец, критичность, backup-job. Без роли строка не закрыта.
Contoso: домен contoso.example, гипервизор HV01, Linux ubuntu2404. Владелец сервиса по умолчанию — Иван Петров, пока не назначен другой. Не удаляйте «непонятные» VM, пока не доказано, что это мусор.
Симптомы и как отличить
Типичная картина:
- в стойке мигает сервер без бирки;
- в Hyper-V висит
New Virtual Machine, в AD её нет; - подрядчик оставил Ubuntu «для теста» на
10.0.10.77; - антивирусный отчёт по 40 узлам, в Excel — 22.
Отличия:
| Наблюдение | Это не «нет инвентаря» | Куда |
|---|---|---|
| Нет схемы VLAN | сеть | схема as-is |
| Нет паспорта конкретного FILE01 | карточка узла | паспорт сервера |
| Нет лицензий на Windows | учёт ПО | лицензии |
| Неясно, кто отвечает за 1С | owner | владельцы сервисов |
Возможные причины
- Рост «по одной VM» без строки в CMDB.
- Подрядчики поднимают стенды и не сдают.
- Физические коробки старше текущей команды.
- Облачные VM в другом тенанте, локальный список их не видит.
- Имена
SRV1/TESTбез роли. - Редко: намеренно скрытый jump у бывшего админа.
Диагностика
Цель диагностики — расхождения между источниками, не красивый отчёт.
1. Каталог компьютеров домена
Get-ADComputer -Filter * -Properties OperatingSystem, IPv4Address, LastLogonDate, Enabled |
Select-Object Name, Enabled, OperatingSystem, IPv4Address, LastLogonDate, DistinguishedName |
Sort-Object Name |
Export-Csv -NoTypeInformation -Encoding UTF8 C:\Temp\cmdb-ad.csvОтдельно серверы vs рабочие станции: по OU и по OperatingSystem -like '*Server*'. Выключенные (Enabled $false) не выкидывайте из отчёта — это кандидаты на decommission.
Группы с серверами:
Get-ADGroupMember -Identity 'Domain Controllers' |
Select-Object SamAccountName, objectClass2. Гипервизор и «железные» имена
С Hyper-V:
Get-VM -ComputerName 'HV01.contoso.example' |
Select-Object Name, State, CPUUsage, MemoryAssigned, IdС Proxmox/libvirt — штатный список VMID/имени вашей платформы. Сверьте hostname гостя с именем VM: рассинхрон — типичный призрак.
3. Свои сети
Только подсети с схемы:
nmap -sn 10.0.10.0/24 -oG /tmp/hosts-10.gnmap
# разбор: Up hosts
awk '/Up$/{print $2}' /tmp/hosts-10.gnmap# Linux-инвентарь пакетов на уже известных узлах (по SSH-ключу jump)
ssh admin@10.0.10.10 'hostnamectl; ip -br a; ss -lntup'4. DNS и «живые», но безымянные
Get-DnsServerResourceRecord -ZoneName 'contoso.example' -RRType A |
Select-Object HostName, RecordDataIP из nmap без A-записи и без AD — строка unidentified в CMDB, не «проигнорировать».
Решение
Лист CMDB Hosts
Минимальные колонки:
| hostname | IP | OS | role | site | owner | backup | last-seen | notes |
|---|---|---|---|---|---|---|---|---|
| DC01 | 10.0.10.10 | WS2022 | AD/DNS/DHCP | HQ | Иван Петров | Daily-VMs | 2026-09-08 | FSMO |
| FILE01 | 10.0.10.20 | WS2022 | SMB | HQ | Иван Петров | Daily-VMs | 2026-09-08 | shares |
| UBNT01 | 10.0.10.40 | Ubuntu 24.04 | git/ci | HQ | Иван Петров | restic | 2026-09-08 |
Правила заполнения:
- Одна строка — один узел (физический или VM). Кластер = отдельные узлы + строка сервиса.
roleиз короткого справочника: AD, DNS, DHCP, files, sql, 1c, mail-hybr, vpn, backup, jump, other. Не эссе.owner— человек, не «IT». Пока пусто — Иван Петров как временный, с датой назначения.- Источник строки:
ad,hv,nmap,manual. Можно несколько через;.
Сценарий A. Первичный проход за день
- Выгрузка AD + VM + nmap
-sn. - Join по IP и имени (осторожно с DHCP).
- Всё, что только в nmap — обход стойки/консоли гипервизора, бирка, скрин.
- Непонятное: статус
unknown, тикет на идентификацию, не delete VM.
Сценарий B. Призраки и выключение
Процедура decommission: владелец, данные, DNS/AD/backup-job, мониторинг, затем выключение в окно изменений. Без этого хост остаётся в списке как unknown.
Сценарий C. Linux вне домена
Отдельный контур: ключи SSH на jump, hostnamectl, cron, systemd. В CMDB тот же лист, колонка directory = workgroup/freeipa/none.
Как проверить, что проблема устранена
- Число Up-хостов nmap по серверной VLAN ≈ число строк CMDB с этими IP (± явно исключённые принтеры).
- Каждая VM на
HV01имеет строку. - У критичных ролей (DC, SQL, файлы, VPN) заполнены owner и backup.
- Новый сотрудник по листу находит
FILE01без опроса чата.
Повторите выгрузку через неделю: дельта новых имён без заявки на изменение — процесс ещё дырявый.
Если не помогло
- DHCP в пользовательской VLAN засоряет список: фильтруйте по серверным подсетям и по OS.
- Два домена/леса: два экспорта, колонка
domain. - Контейнеры на одном Linux: инвентарь хоста плюс отдельный лист сервисов, не 50 строк на каждый контейнер в том же формате, что DC.
- Облако: выгрузка инстансов API в тот же CMDB, не «потом».
Профилактика
- Создание VM только с именем из стандарта (
ROLE-NN) и строкой CMDB до включения в прод. - Еженедельный diff AD vs гипервизор (скрипт в журнал работ).
- Паспорт на каждый прод-узел.
- Квартальный аудит прав не заменяет инвентарь узлов, но ловит hop-серверы.
FAQ
Нужен ли GLPI/Snipe-IT сразу?
Нет. Лист CMDB с дисциплиной лучше пустой «системы учёта». Инструмент — когда таблица стабильно живёт квартал.
Что делать с рабочими станциями?
Отдельный лист Workstations или фильтр. Эта статья — про серверы и инфраструктурные узлы, не про каждый ноутбук.
Как быть с кластером SQL?
Строки узлов + строка сервиса sql-contoso с VIP. Иначе backup и мониторинг привяжут не туда.
nmap видит больше, чем AD. Это всегда плохо?
Часто норма: NAS, UPS-карточки, камеры. Плохо, если это Windows Server без учёта.
Можно ли доверять LastLogonDate как «сервер жив»?
Нет. Сервер может не логиниться в AD неделями и при этом отдавать SMB. Смотрите ping/порт/гипервизор.
Кто утверждает роль узла?
Владелец сервиса. Если владельца нет — сначала назначить owner, иначе инвентарь снова превратится в догадки.