Перейти к основному содержимому
Версия: 2.4

Процесс обогащения

Страница описывает, что именно происходит с КЕ, её атрибутами и связями во время запуска. Общая картина запуска — в обзоре.

Обогащение одной КЕ​

Обогащение каждой КЕ — стартовой или связанной — проходит одни и те же этапы:

1. Обогащение атрибутов​

Система берёт все атрибуты ТКЕ, у которых настроен фетчер, и определяет порядок их обработки: если фетчер одного атрибута использует значение другого, зависимый атрибут обрабатывается позже.

Циклическая зависимость

Если атрибут A зависит от B, а B — от A, порядок построить невозможно. Обогащение КЕ прерывается с ошибкой Fetcher has a cyclical dependence on attributes. Проверьте настройки фетчеров в параметрах ТКЕ.

Дальше каждый атрибут проходит цепочку обработки:

Правила, которые из этого следуют:

  • Фетчер не назначен — атрибут в обогащении не участвует, значение не меняется.
  • Фетчер или парсер вернул None — значение атрибута удаляется.
  • Ошибка в фетчере, парсере или при сохранении — значение остаётся без изменений, остальные атрибуты продолжают обогащаться.
  • Парсер не назначен — значение от фетчера сразу приводится к типу атрибута.

Постпроцессоры задаются в параметрах парсера и применяются к его результату — отдельным этапом их настраивать не нужно.

примечание

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

2. Идентификация и разрешение конфликтов​

После обновления атрибутов система проверяет, не появилась ли в CMDB такая же КЕ.

Поиск ведётся по правилам идентификации ТКЕ среди всех КЕ этого типа, включая помеченные к удалению.

к сведению

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

Алгоритм разрешения конфликтов​

Разрешение конфликта оставляет из группы одну КЕ и переносит на неё всю информацию:

  1. Выбирается самая старая по времени создания КЕ — она становится выжившей.
  2. Если выжившая КЕ была помечена к удалению, отметка снимается.
  3. Атрибуты из всех КЕ группы переносятся на выжившую. Если атрибут заполнен в нескольких КЕ, побеждает самое новое по времени изменения значение. Значения текущего обогащения имеют приоритет над сохранёнными.
  4. Связи всех неудалённых КЕ группы переподключаются к выжившей.
  5. Остальные КЕ группы помечаются как удалённые.
Восстановление КЕ из удалённых

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

Если идентификация «увела» обогащение на другую КЕ, в журнал попадает предупреждение Identification has redefined ci — все дальнейшие этапы применяются уже к выжившей КЕ.

3. Присвоение имени​

Имя КЕ формируется по шаблону имени, настроенному на ТКЕ. Шаблон использует jinja-подстановки со значениями атрибутов: [[ attributes.<имя_атрибута> ]].

Если шаблон не задан или его не удалось отрисовать, имя не меняется. Каждое присвоенное имя сохраняется в истории имён КЕ.

4. Очистка атрибутов​

Удаляются значения атрибутов, у которых настроен фетчер, но которые не получили значения в этом обогащении. Так из КЕ уходят данные, которых больше нет в источнике.

warning

Очистка касается только атрибутов с фетчером. Атрибуты, заполненные вручную, обогащение не трогает.

5. Сохранение КЕ​

После всех этапов КЕ считается обогащённой и сохраняется в базу данных.

Обогащение связей​

В конфигурации КЕ может содержаться информация о её составных частях. Эти части выделяются в отдельные КЕ и связываются со стартовой.

Для каждого элемента конфигурации выполняется один и тот же цикл:

Когда обработаны все элементы, система удаляет связи, которых в новом результате не оказалось.

подсказка

Обогащение может создавать связи разных типов.

1. Формирование связанных КЕ​

  1. Фетчер связи получает информацию о составных частях. Она может быть взята из атрибута обогащаемой КЕ или запрошена с объекта контроля.
  2. Парсер связи превращает её в список: каждый элемент — стартовая конфигурация одной связанной КЕ.
  3. Для каждой конфигурации создаётся временная КЕ — она ещё не сохранена в базе.

Стартовая конфигурация может быть использована двумя способами:

подсказка

Вместо списка парсер может вернуть один объект. Тогда он используется без изменений для создания одной связанной КЕ.

2. Обогащение атрибутов связанного КЕ​

Атрибуты временной КЕ заполняются по тем же правилам, что и у стартовой КЕ, — фетчерами и парсерами, настроенными на её ТКЕ.

3. Идентификация связанного КЕ​

примечание

Если несколько элементов конфигурации после идентификации схлопнулись в одну КЕ, в журнал попадает предупреждение вида Of the N elements found, the identification left M. Обычно это признак того, что правила идентификации связанного ТКЕ слишком широкие.

4. Создание связи​

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

5. Удаление устаревших связей​

После обработки всех элементов конфигурации удаляются связи этого типа, ведущие к КЕ, которых не оказалось в текущем результате:

  • обычная связь — удаляется только сама связь, связанная КЕ остаётся в системе;
  • связь типа композиция — вместе со связью помечается к удалению и связанная КЕ, поскольку она не может существовать отдельно от родителя. Удаление распространяется вглубь по цепочке композиции.

6. Рекурсивное обогащение​

Для каждой связанной КЕ ставится отдельная задача обогащения, и процесс повторяется вглубь.

к сведению

В рекурсивной задаче атрибуты повторно не обогащаются — они уже заполнены на шаге 2, когда КЕ была временной. Рекурсивная задача обрабатывает только связи этой КЕ.

Все КЕ, затронутые запуском, накапливаются в общем контексте обогащения — он понадобится на следующей фазе.

примечание

Если одна и та же КЕ попадает в запуск несколько раз (например, сервер связан сразу с несколькими приложениями), повторно она не обрабатывается — в журнал попадает предупреждение о повторной обработке.

Обогащение дополнительных связей​

КЕ, созданные в разных ветках рекурсии, могут быть связаны между собой — а также с КЕ, которые уже были в базе и в запуск не входили. Такие связи строятся отдельной фазой, после того как рекурсия полностью завершилась.

Дополнительной считается связь, у которой в настройках ТКЕ задан TQL-фильтр. Для каждой КЕ из общего контекста обогащения система:

  1. удаляет все существующие связи этого типа, исходящие из КЕ;
  2. получает конфигурацию фетчером и парсером связи;
  3. подставляет полученные значения в TQL-фильтр и ищет по нему подходящие КЕ;
  4. создаёт связи с каждой найденной КЕ.

Область поиска​

ОбластьГде ищутся КЕ
local (по умолчанию)Только среди КЕ, участвовавших в текущем запуске
globalСреди всех КЕ в базе

Особенности композиции​

Для связей типа композиция дополнительные связи не строятся, и существующие КЕ не удаляются — состав композиции определяется только фазой рекурсивного обогащения.

Удаление КЕ​

КЕ удаляется вручную или в процессе обогащения. Обогащение помечает КЕ к удалению в трёх случаях:

  • при разрешении конфликта — все КЕ группы, кроме выжившей;
  • при обработке композиции — связанные КЕ, которых не оказалось в новом составе;
  • когда КЕ не может существовать без связей.

Удаление выполняется в два этапа:

1. Пометка на удаление. В базе проставляется время удаления. Физически КЕ, её атрибуты и связи остаются на месте — благодаря этому КЕ можно восстановить при разрешении конфликта.

2. Физическое удаление. Выполняется фоновой задачей по расписанию. Из базы удаляются сама КЕ, её атрибуты и связи. После этого восстановление невозможно.

Изменение значения атрибута​

БылоСталоРезультат
Значения не былоПолучено новое значениеЗначение записывается, обновляется время последнего изменения атрибута
Значение былоПолучено новое значениеСтарое значение заменяется, обновляется время последнего изменения
Значение былоФетчер или парсер вернул NoneЗначение удаляется
Значение былоАтрибут с фетчером не участвовал в обогащенииЗначение удаляется на этапе очистки атрибутов
Значение былоОшибка в фетчере, парсере или при сохраненииЗначение остаётся без изменений