Словари в GLPI: как стандартизировать автоматическую инвентаризацию

Техническое руководство по словарям в GLPI 10/11: SQL для оценки «мусора» в инвентаризации, правила для производителей и regex для моделей, отклонение KB, контролируемое повторное применение без падения сервера и матрица выбора действия. Так, как мы делаем это при сопровождении парков GLPI.

В этой статьеРазделов: 8

Автоматическая инвентаризация без словарей — это CMDB, которому никто не доверяет. Каждый агент сообщает «Dell Inc.», «DELL» и «Dell Technologies» как разных производителей, и руководитель открывает отчёт по парку с тремя строками для одного и того же. Словари GLPI решают это на входе данных — но по-настоящему работают, только если вы заранее оцените «мусор», поймёте, что отклонение деструктивно, и запустите повторное применение, не уронив сервер. Это руководство описывает путь, которым мы идём при сопровождении парков GLPI клиентов.

Почему инвентаризация приходит «грязной»

Когда GLPI Agent собирает данные с сотен компьютеров, один и тот же реальный объект появляется в нескольких написаниях, потому что каждый поставщик записывает строку по-своему в BIOS, реестре Windows или пакете. Классические случаи:

  • Производители: «Dell Inc.», «Dell», «DELL», «Dell Technologies» превращаются в четыре записи.
  • Модели: «Latitude 5520», «LATITUDE 5520» и «Dell Latitude 5520» не группируются.
  • ПО: сотни KB и «Update for Windows» заглушают программы, которыми вам действительно нужно управлять.
  • Операционная система: «Windows 10 Pro», «Microsoft Windows 10 Professional» и «Win10Pro» дробят любой подсчёт лицензий.

Практический эффект: дашборды с завышенными итогами, бесполезный отчёт о соответствии ПО и решения о закупках на основе неверных цифр. Стандартизация — это не эстетика, а то, что делает CMDB надёжной.

Оцените «мусор», прежде чем писать первое правило

Ошибка новичков — создавать правила вслепую. Сначала измерьте. Читающий SQL-запрос прямо к базе показывает масштаб проблемы и помогает расставить приоритеты. Запускайте на реплике или вне часов пик:

-- Fabricantes com grafias divergentes do mesmo grupo
SELECT id, name
FROM glpi_manufacturers
WHERE name LIKE 'Dell%' OR name LIKE '%DELL%'
ORDER BY name;

-- Volume de "poluicao" no catalogo de software (KBs e updates)
SELECT COUNT(*) AS softwares_lixo
FROM glpi_softwares
WHERE name LIKE 'KB%'
   OR name LIKE 'Update for%'
   OR name LIKE 'Security Update for%';

-- Top 20 nomes de software mais repetidos (candidatos a regra)
SELECT name, COUNT(*) AS ocorrencias
FROM glpi_softwares
GROUP BY name
ORDER BY ocorrencias DESC
LIMIT 20;

С этими цифрами вы знаете, где правило даст наибольшую отдачу. В большинстве парков основная часть «мусора» приходится на производителей и ПО.

Типы словарей и когда использовать каждое действие

В Администрирование > Словари есть словари для ПО, производителей, моделей (компьютер, монитор, принтер, телефон, сеть), типов и операционных систем. Разница между ними — в действии, которое вы выбираете. Эта матрица резюмирует решение:

Ситуация в инвентаризацииСловарьРекомендуемое действиеОбратимо?Подвох
Производитель в нескольких написанияхПроизводительПрисвоить фиксированное имяДаСлияние может оставить осиротевшую запись в выпадающем списке
Модель с префиксом производителяМоделиRegex + присвоить захваченную группуДаТребует критерия «регулярное выражение», а не «содержит»
KB и обновления засоряют каталогПОИгнорировать импортЧастичноПовторное применение УДАЛЯЕТ уже импортированное ПО
Раздробленные версии ОСОперационная системаПрисвоить ОС / редакциюДаНазвание ОС и редакция — разные поля
Несколько программ, которые являются одним продуктомПОПрисвоить имя + производителяДаГруппирует версии; проверьте перед слиянием

Нормализация производителей и моделей (пошагово)

  1. В словаре Производитель создайте правило: критерий Имя — содержит — Dell; действие Присвоить Имя = Dell. Это сворачивает все написания в одну запись.
  2. Для моделей, содержащих префикс производителя, «содержит» недостаточно — используйте regex. Отметьте критерий как регулярное выражение и захватите только полезную часть.
# Dicionario de Modelos de computador
# Criterio  -> Nome | expressao regular corresponde:
/^(?:Dell\s+)?(Latitude\s+\d+)/i

# Acao -> Nome | Atribuir valor da expressao regular:
#1

# Resultado:
#   "Dell Latitude 5520" -> "Latitude 5520"
#   "LATITUDE 5520"       -> "Latitude 5520"
#   "Latitude 5520"       -> "Latitude 5520"

#1 — первая захваченная группа; #0 — вся строка. На этой детали спотыкаются многие: действие «присвоить значение регулярного выражения» работает, только если критерий отмечен как регулярное выражение. С «содержит» #1 становится буквальным текстом.

Отклонение KB без перегрузки инвентаризации

Чтобы убрать обновления из каталога, создайте в словаре ПО правило с действием Игнорировать импорт:

  • Критерий: Имя — начинается с — KB — действие Игнорировать импорт.
  • Критерий: Имя — содержит — Update for Windows — действие Игнорировать импорт.

С этого момента новые импорты пропускают эти элементы. Деталь, которую почти никто не предвидит: при повторном применении этого правила GLPI удаляет уже импортированное ПО, соответствующее критерию. Это правильное действие для очистки, но оно деструктивно — поэтому его всегда сначала проверяют в тестовой среде.

Повторное применение: правила к существующим данным

Правило словаря срабатывает только на входе. Для данных, которые уже есть в базе, используйте кнопку Повторно применить правила словаря внутри каждого словаря. Две эксплуатационные предосторожности, которые мы усвоили на собственном опыте:

  • Разбивайте по производителям. При повторном применении словаря ПО GLPI позволяет выбрать производителя. Запуск всего сразу на большом каталоге превышает max_execution_time PHP и возвращает ошибку 500. Запускайте партиями.
  • Окно низкой нагрузки. Повторное применение заново обрабатывает тысячи строк; планируйте его вне рабочего времени.

После повторного применения убедитесь, что консолидация сработала, простым подсчётом:

-- Deve sobrar 1 registro "Dell" (e nao 4)
SELECT id, name FROM glpi_manufacturers
WHERE name LIKE '%Dell%';

-- Softwares KB devem tender a zero apos o replay com "Ignorar importacao"
SELECT COUNT(*) AS kb_restantes
FROM glpi_softwares
WHERE name LIKE 'KB%';

Типичная ошибка при сопровождении клиентов

В парке клиента примерно из 3 тысяч активов словарь ПО, отклоняющий KB и обновления, сократил каталог с десятков тысяч «программ» до нескольких тысяч реальных элементов — отчёт о соответствии наконец стал читаемым. Но мы запустили повторное применение с «игнорировать импорт» прямо в продуктиве, и клиент потерял информацию о том, на каких компьютерах был каждый KB, потому что отклонение удаляет запись, а не просто скрывает её. Решение, которое с тех пор действует во всех средах: повторное применение словаря начинается в тестовой среде, отклонение считается деструктивной операцией, а за слиянием производителей всегда следует очистка осиротевших значений в выпадающем списке, которые GLPI сам не удаляет. Такие детали проявляются только после работы с настоящим парком.

Практики, которые избавляют от переделок

  • Начинайте с производителей и ПО — на них приходится большая часть «мусора», и отдача быстрая.
  • Порядок правил важен: ставьте более конкретные перед общими.
  • Всегда тестируйте в тестовой среде и проверяйте повторное применение SQL-подсчётом до и после.
  • Пересматривайте словари после каждой крупной волны инвентаризации (новая партия компьютеров, поглощение, смена поставщика).
  • Документируйте каждое правило: словарь без истории «почему» превращается в чёрный ящик при следующем сопровождении.

Стандартизация инвентаризации — основа для надёжных показателей и жизненного цикла активов. Если ваш парк уже разросся, а CMDB превратилась в клубок дубликатов, NexTool выполняет такую санацию в рамках сопровождения: оценка «мусора», правила словарей, проверенные в тестовой среде, и контролируемое повторное применение без падения вашего GLPI.


Проверено командой NexTool Solutions.

Часто задаваемые вопросы

В «Администрирование > Словари». Оттуда доступны словари программного обеспечения, производителей, моделей (компьютер, монитор, принтер, телефон, сеть), типов и операционных систем. Каждый словарь — это набор правил с критерием и действием, которые применяются при импорте инвентаризации.

Не автоматически. Правило срабатывает на входе новых данных. Чтобы применить его к существующим записям, используйте кнопку «Повторно применить правила словаря» внутри словаря. Запускайте частями по производителям и вне часов пик, потому что повторное применение обрабатывает тысячи строк и может превысить время выполнения PHP (ошибка 500).

Создайте правило, присваивающее фиксированное имя (например, содержит «Dell» — присвоить «Dell»), и запустите повторное применение, чтобы заново связать активы. Затем проверьте в «Настройки > Выпадающие списки», не осталось ли производителей с нулём элементов, и очистите их. GLPI заново связывает активы, но не всегда удаляет старое значение из выпадающего списка.

Да, при повторном применении. Действие «Игнорировать импорт» не только блокирует будущие импорты: при повторном применении оно удаляет уже импортированное ПО, соответствующее критерию, и вы теряете информацию о том, на каких компьютерах был этот KB. Поэтому тестируйте в тестовой среде и считайте отклонение деструктивной операцией.

Да. Отметьте критерий как «регулярное выражение» и используйте группы захвата. В действии «присвоить значение регулярного выражения» принимаются #0 (вся строка) и #1–#9 (захваченные группы). Типичная ошибка — оставить критерий «содержит» и ожидать, что #1 сработает: он работает только тогда, когда критерий — regex.

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

Нужна помощь?