Перейти к основному содержимому

Интеграция с ServiceNow

Интеграция с ServiceNow (Администрирование > Настройки > ServiceNow) обеспечивает двунаправленную синхронизацию между Canopy и вашей CMDB ServiceNow. В этом руководстве описано всё — от первоначальной настройки до продвинутых сценариев и лучших практик эксплуатации.

Настройки ServiceNow

Зачем интегрировать ServiceNow с Canopy?

ServiceNow CMDB и инструменты корпоративной архитектуры служат разным, но взаимодополняющим целям:

ServiceNow CMDBCanopy
ФокусИТ-операции — что работает, кто отвечает, какие инциденты произошлиСтратегическое планирование — как должен выглядеть ландшафт через 3 года?
ОбслуживаетсяИТ-операции, управление активамиКоманда EA, бизнес-архитекторы
Сильная сторонаАвтоматическое обнаружение, рабочие процессы ITSM, операционная точностьБизнес-контекст, карта возможностей, планирование жизненного цикла, оценки
Типичные данныеИмена хостов, IP-адреса, статус установки, группы назначения, контрактыБизнес-критичность, функциональное соответствие, технический долг, стратегическая дорожная карта

Canopy является основной системой записи для вашего архитектурного ландшафта — имена, описания, планы жизненного цикла, оценки и бизнес-контекст хранятся здесь. ServiceNow дополняет Canopy операционными и техническими метаданными (имена хостов, IP-адреса, данные SLA, статус установки), поступающими из автоматического обнаружения и рабочих процессов ITSM. Интеграция обеспечивает связь этих двух систем, при этом Canopy является ведущей.

Что вы можете сделать

  • Pull-синхронизация — наполнение Canopy CI из ServiceNow с последующим принятием управления. Последующие pull-операции обновляют только операционные поля (IP, статус, SLA), которые SNOW обнаруживает автоматически
  • Push-синхронизация — экспорт курируемых EA данных обратно в ServiceNow (имена, описания, оценки, планы жизненного цикла), чтобы команды ITSM видели контекст EA
  • Двунаправленная синхронизация — Canopy ведёт большинство полей; SNOW ведёт небольшой набор операционных/технических полей. Обе системы остаются синхронизированными
  • Карта идентификаторов — постоянное перекрёстное отслеживание (sys_id <-> UUID карточки) обеспечивает связь записей между синхронизациями

Архитектура интеграции

+------------------+ HTTPS / Table API +------------------+
| Canopy | <--------------------------------> | ServiceNow |
| | | |
| Карточки | Pull: SNOW CI -> Карточки Turbo | CMDB CI |
| (Application, | Push: Карточки Turbo -> SNOW CI | (cmdb_ci_appl, |
| ITComponent, | | cmdb_ci_server, |
| Provider, ...) | Identity Map: sys_id &lt;-> UUID | core_company) |
+------------------+ +------------------+

Интеграция использует Table API ServiceNow через HTTPS. Учётные данные шифруются при хранении с помощью Fernet (AES-128-CBC), производного от вашего SECRET_KEY. Все операции синхронизации регистрируются как события с source: "servicenow_sync" для полного аудита.


Планирование интеграции

Прежде чем настраивать что-либо, ответьте на следующие вопросы:

1. Какие типы карточек нуждаются в данных из ServiceNow?

Начните с малого. Наиболее распространённые точки интеграции:

ПриоритетТип CanopyИсточник ServiceNowПочему
ВысокийApplicationcmdb_ci_business_appПриложения — основа EA; в CMDB есть авторитетные имена, владельцы и статусы
ВысокийITComponent (Software)cmdb_ci_spkgПрограммные продукты для отслеживания EOL и технологического радара
СреднийITComponent (Hardware)cmdb_ci_serverСерверный ландшафт для карты инфраструктуры
СреднийProvidercore_companyРеестр вендоров для управления затратами и отношениями
НизкийInterfacecmdb_ci_endpointКонечные точки интеграции (часто поддерживаются вручную в EA)
НизкийDataObjectcmdb_ci_databaseЭкземпляры баз данных

2. Какая система является источником истины для каждого поля?

Это самое важное решение. По умолчанию Canopy ведёт — инструмент EA является системой записи для вашего архитектурного ландшафта. ServiceNow должен вести только узкий набор операционных и технических полей, поступающих из автоматического обнаружения или рабочих процессов ITSM. Всё остальное — имена, описания, оценки, планирование жизненного цикла, затраты — принадлежит команде EA в Canopy.

Рекомендуемая модель — «Canopy ведёт, SNOW дополняет»:

Тип поляИсточник истиныПочему
Имена и описанияTurbo ведётКоманда EA курирует авторитетные имена и пишет стратегические описания; имена в CMDB могут быть некорректными или автогенерированными
Бизнес-критичностьTurbo ведётСтратегическая оценка команды EA — не операционные данные
Функциональное / техническое соответствиеTurbo ведётОценки модели TIME — забота EA
Жизненный цикл (все фазы)Turbo ведётПланирование, внедрение, активный, вывод, окончание — всё это данные планирования EA
Данные о затратахTurbo ведётEA отслеживает совокупную стоимость владения; CMDB может иметь позиции контрактов, но EA владеет консолидированным представлением
Тип хостинга, категорияTurbo ведётEA классифицирует приложения по модели хостинга для стратегического анализа
Техническая метаинформацияSNOW ведётIP-адреса, версии ОС, имена хостов, серийные номера — данные автоматического обнаружения
SLA / операционный статусSNOW ведётСтатус установки, цели SLA, метрики доступности — операционные данные ITSM
Группа назначения / поддержкаSNOW ведётОперационное владение, отслеживаемое в рабочих процессах ServiceNow
Даты обнаруженияSNOW ведётПервое/последнее обнаружение, последнее сканирование — метаданные автоматизации CMDB

3. Как часто следует синхронизировать?

СценарийЧастотаПримечания
Первоначальный импортОднократноРежим добавления, тщательная проверка
Активное управление ландшафтомЕжедневноАвтоматизация через cron в нерабочие часы
Отчётность по соответствиюЕженедельноПеред генерацией отчётов
По запросуПо мере необходимостиПеред крупными обзорами EA или презентациями

Шаг 1: Предварительные требования ServiceNow

Создание сервисной учётной записи

В ServiceNow создайте выделенную сервисную учётную запись (никогда не используйте личные учётные записи):

РольНазначениеОбязательна?
itilДоступ на чтение к таблицам CMDBДа
cmdb_readЧтение конфигурационных элементовДа
rest_api_explorerПолезна для тестирования запросовРекомендуется
import_adminДоступ на запись в целевые таблицыТолько для push-синхронизации

Лучшая практика: Создайте пользовательскую роль с доступом только на чтение к конкретным таблицам, которые вы планируете синхронизировать. Роль itil слишком широкая — пользовательская роль с ограниченной областью снижает риск.

Сетевые требования

  • Бэкенд Canopy должен иметь доступ к вашему экземпляру SNOW через HTTPS (порт 443)
  • Настройте правила межсетевого экрана и списки разрешённых IP
  • Формат URL экземпляра: https://company.service-now.com или https://company.servicenowservices.com

Выбор метода аутентификации

МетодПреимуществаНедостаткиРекомендация
Basic AuthПростая настройкаУчётные данные отправляются с каждым запросомТолько для разработки/тестирования
OAuth 2.0На основе токенов, с областью, удобный для аудитаБольше шагов настройкиРекомендуется для производства

Для OAuth 2.0:

  1. В ServiceNow: System OAuth > Application Registry
  2. Создайте новую конечную точку OAuth API для внешних клиентов
  3. Запишите Client ID и Client Secret
  4. Ротируйте секреты каждые 90 дней

Шаг 2: Создание подключения

Перейдите в Администрирование > ServiceNow > вкладка Подключения.

Создание и тестирование

  1. Нажмите Добавить подключение
  2. Заполните:
ПолеПример значенияПримечания
ИмяПроизводственная CMDBОписательная метка для вашей команды
URL экземпляраhttps://company.service-now.comОбязательно HTTPS
Тип аутентификацииBasic Auth или OAuth 2.0OAuth рекомендуется для производства
Учётные данные(по типу аутентификации)Шифруются при хранении через Fernet
  1. Нажмите Создать, затем нажмите значок тестирования (символ WiFi) для проверки подключения
  • Зелёный индикатор «Подключено» — готово к работе
  • Красный индикатор «Ошибка» — проверьте учётные данные, сеть и URL

Несколько подключений

Вы можете создать несколько подключений для:

  • Производственных и тестовых экземпляров
  • Региональных экземпляров SNOW (например, EMEA, APAC)
  • Разных команд с отдельными сервисными учётными записями

Каждый маппинг ссылается на конкретное подключение.


Шаг 3: Проектирование маппингов

Переключитесь на вкладку Маппинги. Маппинг связывает один тип карточки Canopy с одной таблицей ServiceNow.

Создание маппинга

Нажмите Добавить маппинг и настройте:

ПолеОписаниеПример
ПодключениеКакой экземпляр ServiceNow использоватьПроизводственная CMDB
Тип карточкиТип карточки Canopy для синхронизацииApplication
Таблица SNOWИмя API таблицы ServiceNowcmdb_ci_business_app
Направление синхронизацииКакие операции доступны (см. ниже)ServiceNow -> Canopy
Режим синхронизацииКак обрабатывать удаленияКонсервативный
Макс. коэффициент удаленияПорог безопасности для массовых удалений50%
Фильтр запросаЗакодированный запрос ServiceNow для ограничения областиactive=true^install_status=1
Пропустить стейджингПрименять изменения без промежуточной проверкиВыкл (рекомендуется для начальной синхронизации)

Распространённые маппинги таблиц SNOW

Тип CanopyТаблица ServiceNowОписание
Applicationcmdb_ci_business_appБизнес-приложения (наиболее распространённый)
Applicationcmdb_ci_applОбщие CI приложений
ITComponent (Software)cmdb_ci_spkgПрограммные пакеты
ITComponent (Hardware)cmdb_ci_serverФизические/виртуальные серверы
ITComponent (SaaS)cmdb_ci_cloud_service_accountУчётные записи облачных сервисов
Providercore_companyВендоры / компании
Interfacecmdb_ci_endpointКонечные точки интеграции
DataObjectcmdb_ci_databaseЭкземпляры баз данных
Systemcmdb_ci_computerCI компьютеров
Organizationcmn_departmentОтделы

Примеры запросов фильтрации

Всегда фильтруйте, чтобы избежать импорта устаревших или выведенных из эксплуатации записей:

# Только активные CI (минимальный рекомендуемый фильтр)
active=true

# Активные CI со статусом установки «Установлен»
active=true^install_status=1

# Приложения в производственном использовании
active=true^used_for=Production

# CI, обновлённые за последние 30 дней
active=true^sys_updated_on>=javascript:gs.daysAgoStart(30)

# Определённая группа назначения
active=true^assignment_group.name=IT Operations

# Исключить выведенные из эксплуатации CI
active=true^install_statusNOT IN7,8

Лучшая практика: Всегда включайте active=true как минимум. Таблицы CMDB часто содержат тысячи выведенных из эксплуатации записей, которые не должны импортироваться в ваш архитектурный ландшафт.


Шаг 4: Настройка маппингов полей

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

Добавление полей

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

НастройкаОписание
Поле CanopyПуть поля в Canopy (автозаполнение предлагает варианты на основе типа карточки)
Поле SNOWИмя API столбца ServiceNow (например, name, short_description)
НаправлениеИсточник истины для каждого поля: SNOW ведёт или Turbo ведёт
ПреобразованиеКак конвертировать значения: Прямое, Карта значений, Дата, Логическое
Идентификатор (флажок ID)Используется для сопоставления записей при начальной синхронизации

Пути полей Canopy

Автозаполнение группирует поля по секциям. Полная справка путей:

ПутьЦельПример значения
nameОтображаемое имя карточки"SAP S/4HANA"
descriptionОписание карточки"Основная ERP-система для финансов"
lifecycle.planЖизненный цикл: дата планирования"2024-01-15"
lifecycle.phaseInЖизненный цикл: дата внедрения"2024-03-01"
lifecycle.activeЖизненный цикл: дата активации"2024-06-01"
lifecycle.phaseOutЖизненный цикл: дата вывода"2028-12-31"
lifecycle.endOfLifeЖизненный цикл: дата окончания"2029-06-30"
attributes.<key>Любой пользовательский атрибут из схемы полей типа карточкиЗависит от типа поля

Например, если ваш тип Application имеет поле с ключом businessCriticality, выберите attributes.businessCriticality из выпадающего списка.

Поля идентификации — как работает сопоставление

Отметьте одно или несколько полей как Идентификатор (значок ключа). Они используются при первой синхронизации для сопоставления записей ServiceNow с существующими карточками Canopy:

  1. Поиск в карте идентификаторов — если связь sys_id <-> UUID карточки уже существует, используется она
  2. Точное совпадение имени — сопоставление по значению поля идентификации (например, по имени приложения)
  3. Нечёткое совпадение — если нет точного совпадения, используется SequenceMatcher с порогом сходства 85%

Лучшая практика: Всегда отмечайте поле name как поле идентификации. Если имена различаются между системами (например, SNOW включает номера версий типа «SAP S/4HANA v2.1», а Canopy — «SAP S/4HANA»), приведите их в соответствие перед первой синхронизацией для лучшего качества сопоставления.

После того как первая синхронизация установит связи в карте идентификаторов, последующие синхронизации используют постоянную карту идентификаторов и не полагаются на сопоставление имён.


Шаг 5: Запуск первой синхронизации

Переключитесь на вкладку Панель синхронизации.

Запуск синхронизации

Для каждого активного маппинга вы видите кнопки Pull и/или Push в зависимости от настроенного направления синхронизации:

  • Pull (значок загрузки из облака) — извлекает данные из SNOW в Canopy
  • Push (значок выгрузки в облако) — отправляет данные Canopy в ServiceNow

Что происходит во время Pull-синхронизации

1. ИЗВЛЕЧЕНИЕ Получение всех подходящих записей из SNOW (пакетами по 500)
2. СОПОСТАВЛЕНИЕ Сопоставление каждой записи с существующей карточкой:
a) Карта идентификаторов (постоянный поиск sys_id &lt;-> UUID карточки)
b) Точное совпадение имени по полям идентификации
c) Нечёткое совпадение имени (порог сходства 85%)
3. ПРЕОБРАЗОВАНИЕ Применение маппингов полей для конвертации SNOW -> формат Canopy
4. СРАВНЕНИЕ Сравнение преобразованных данных с существующими полями карточки
5. СТЕЙДЖИНГ Назначение действия каждой записи:
- create: Новая, подходящая карточка не найдена
- update: Совпадение найдено, поля различаются
- skip: Совпадение найдено, различий нет
- delete: В карте идентификаторов, но отсутствует в SNOW
6. ПРИМЕНЕНИЕ Выполнение промежуточных действий (создание/обновление/архивация карточек)

Когда Пропустить стейджинг включён, шаги 5 и 6 объединяются — действия применяются напрямую без записи промежуточных записей.

Просмотр результатов синхронизации

Таблица История синхронизации показывает после каждого запуска:

СтолбецОписание
НачалоКогда синхронизация началась
НаправлениеPull или Push
Статусcompleted, failed или running
ИзвлеченоВсего записей получено из ServiceNow
СозданоНовых карточек создано в Canopy
ОбновленоСуществующих карточек обновлено
УдаленоКарточек архивировано (мягкое удаление)
ОшибкиЗаписей, которые не удалось обработать
ДлительностьФактическое время

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

Рекомендуемая процедура первой синхронизации

1. Установите маппинг в режим ДОБАВЛЕНИЯ с включённым стейджингом
2. Запустите pull-синхронизацию
3. Просмотрите промежуточные записи — убедитесь, что создания корректны
4. Перейдите в Реестр, проверьте импортированные карточки
5. При необходимости скорректируйте маппинги полей или запрос фильтрации
6. Повторяйте до удовлетворительного результата
7. Переключитесь в КОНСЕРВАТИВНЫЙ режим для текущего использования
8. После нескольких успешных запусков включите «Пропустить стейджинг»

Понимание направления синхронизации и направления полей

Это наиболее часто неправильно понимаемая концепция. Существует два уровня направления, которые работают вместе:

Уровень таблицы: направление синхронизации

Устанавливается на самом маппинге. Контролирует какие операции синхронизации доступны на панели синхронизации:

Направление синхронизацииКнопка Pull?Кнопка Push?Когда использовать...
ServiceNow -> CanopyДаНетCMDB является мастер-источником, вы только импортируете
Canopy -> ServiceNowНетДаИнструмент EA обогащает CMDB оценками
ДвунаправленныйДаДаОбе системы вносят данные в разные поля

Уровень поля: направление

Устанавливается для каждого маппинга поля. Контролирует значение какой системы приоритетнее во время синхронизации:

Направление поляПри Pull (SNOW -> Turbo)При Push (Turbo -> SNOW)
SNOW ведётЗначение импортируется из ServiceNowЗначение пропускается (не передаётся)
Turbo ведётЗначение пропускается (не перезаписывается)Значение экспортируется в ServiceNow

Как они работают вместе — пример

Маппинг: Application <-> cmdb_ci_business_app, Двунаправленный

ПолеНаправлениеPull делает...Push делает...
nameTurbo ведётПропускает (EA курирует имена)Передаёт имя EA -> SNOW
descriptionTurbo ведётПропускает (EA пишет описания)Передаёт описание -> SNOW
lifecycle.activeTurbo ведётПропускает (EA управляет жизненным циклом)Передаёт дату запуска -> SNOW
attributes.businessCriticalityTurbo ведётПропускает (оценка EA)Передаёт оценку -> пользовательское поле SNOW
attributes.ipAddressSNOW ведётИмпортирует IP из обнаруженияПропускает (операционные данные)
attributes.installStatusSNOW ведётИмпортирует операционный статусПропускает (данные ITSM)

Ключевое понимание: Направление на уровне таблицы определяет какие кнопки отображаются. Направление на уровне поля определяет какие поля фактически передаются при каждой операции. Двунаправленный маппинг, где Canopy ведёт большинство полей, а SNOW ведёт только операционные/технические поля — наиболее мощная конфигурация.

Лучшая практика: направление поля по типу данных

По умолчанию должно быть Turbo ведёт для подавляющего большинства полей. Устанавливайте SNOW ведёт только для операционных и технических метаданных из автоматического обнаружения или рабочих процессов ITSM.

Категория данныхРекомендуемое направлениеОбоснование
Имена, метки отображенияTurbo ведётКоманда EA курирует авторитетные, чистые имена — имена в CMDB часто автогенерированные или непоследовательные
ОписаниеTurbo ведётОписания EA содержат стратегический контекст, бизнес-ценность и архитектурную значимость
Бизнес-критичность (модель TIME)Turbo ведётОсновная оценка EA — не операционные данные
Функциональное/техническое соответствиеTurbo ведётОценка и классификация дорожной карты EA
Жизненный цикл (все фазы)Turbo ведётПланирование, внедрение, активный, вывод, окончание — всё это решения планирования EA
Данные о затратахTurbo ведётEA отслеживает совокупную стоимость владения и распределение бюджета
Тип хостинга, классификацияTurbo ведётСтратегическая категоризация, поддерживаемая архитекторами
Информация о вендоре/поставщикеTurbo ведётEA управляет стратегией вендоров, контрактами и рисками
Техническая метаинформация (ОС, IP, хост)SNOW ведётДанные автоматического обнаружения — EA этого не поддерживает
Цели SLA, метрики доступностиSNOW ведётОперационные данные из рабочих процессов ITSM
Статус установки, операционное состояниеSNOW ведётCMDB отслеживает, установлен ли CI, выведен из эксплуатации и т.д.
Группа назначения, команда поддержкиSNOW ведётОперационное владение, управляемое в ServiceNow
Метаданные обнаружения (первое/последнее обнаружение)SNOW ведётВременные метки автоматизации CMDB

Пропуск стейджинга — когда использовать

По умолчанию pull-синхронизации следуют рабочему процессу стейджинг-применение:

Извлечение -> Сопоставление -> Преобразование -> Сравнение -> СТЕЙДЖИНГ -> Проверка -> ПРИМЕНЕНИЕ

Записи помещаются в промежуточную таблицу, позволяя вам просмотреть изменения перед применением.

Режим пропуска стейджинга

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

Извлечение -> Сопоставление -> Преобразование -> Сравнение -> ПРЯМОЕ ПРИМЕНЕНИЕ

Промежуточные записи не создаются — изменения происходят немедленно.

Стейджинг (по умолчанию)Пропуск стейджинга
Этап проверкиДа — проверка diff перед применениемНет — изменения применяются сразу
Таблица промежуточных записейЗаполняется записями create/update/deleteНе заполняется
АудитПромежуточные записи + история событийТолько история событий
ПроизводительностьНемного медленнее (записывает промежуточные строки)Немного быстрее
ОтменаМожно прервать перед применениемНеобходимо отменять вручную

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

СценарийРекомендация
Первый импортИспользуйте стейджинг — проверьте, что создаётся, перед применением
Новый или изменённый маппингИспользуйте стейджинг — убедитесь, что преобразования полей дают корректный результат
Стабильный, хорошо проверенный маппингПропустите стейджинг — нет необходимости проверять каждый запуск
Автоматизированные ежедневные синхронизации (cron)Пропустите стейджинг — автоматические запуски не могут ждать проверки
Большая CMDB (10 000+ CI)Пропустите стейджинг — избегает создания тысяч промежуточных строк
Среда с требованиями соответствияИспользуйте стейджинг — сохранение полного аудита в промежуточной таблице

Лучшая практика: Начните со стейджингом включённым для первых нескольких синхронизаций. Когда вы убедитесь, что маппинг даёт корректные результаты, включите пропуск стейджинга для автоматических запусков.


Режимы синхронизации и безопасность удалений

Режимы синхронизации

РежимСозданиеОбновлениеУдалениеПодходит для
ДобавлениеДаДаНикогдаПервоначальный импорт, среды с низким риском
КонсервативныйДаДаТолько карточки, созданные при синхронизацииПо умолчанию для текущих синхронизаций
СтрогийДаДаВсе связанные карточкиПолное зеркало CMDB

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

Консервативный (по умолчанию) отслеживает, была ли каждая карточка изначально создана движком синхронизации. Только эти карточки могут быть автоматически архивированы, если они исчезнут из ServiceNow. Карточки, созданные вручную в Canopy или импортированные из других источников, никогда не затрагиваются.

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

Максимальный коэффициент удаления — предохранитель

В качестве предохранителя движок пропускает все удаления, если их количество превышает настроенный коэффициент:

удаления / всего_связанных > макс_коэффициент_удаления -> ПРОПУСТИТЬ ВСЕ УДАЛЕНИЯ

Пример с 10 связанными записями и порогом 50%:

СценарийУдаленияКоэффициентРезультат
3 CI удалены нормально3 / 10 = 30%Ниже порогаУдаления выполняются
6 CI удалены одновременно6 / 10 = 60%Выше порогаВсе удаления пропущены
SNOW возвращает пусто (сбой)10 / 10 = 100%Выше порогаВсе удаления пропущены

Это предотвращает катастрофическую потерю данных от изменений запроса фильтрации, временных сбоев ServiceNow или неправильно настроенных имён таблиц.

Лучшая практика: Держите коэффициент удаления на уровне 50% или ниже для таблиц с менее чем 100 записями. Для больших таблиц (1000+) можно безопасно установить 25%.

Рекомендуемая прогрессия

Неделя 1: Режим ДОБАВЛЕНИЯ, стейджинг ВКЛ, запуск вручную, проверка каждой записи
Недели 2-4: Режим КОНСЕРВАТИВНЫЙ, стейджинг ВКЛ, ежедневный запуск, выборочная проверка
Месяц 2+: Режим КОНСЕРВАТИВНЫЙ, стейджинг ВЫКЛ (пропуск), автоматический ежедневный cron

Рекомендуемые сценарии по типам

Сценарий 1: Приложения из CMDB (наиболее распространённый)

Цель: Импортировать ландшафт приложений из ServiceNow, затем принять управление именами, описаниями, оценками и жизненным циклом в Canopy. SNOW ведёт только операционные поля.

Маппинг:

НастройкаЗначение
Тип карточкиApplication
Таблица SNOWcmdb_ci_business_app
НаправлениеДвунаправленный
РежимКонсервативный
Фильтрactive=true^install_status=1

Маппинги полей:

Поле CanopyПоле SNOWНаправлениеПреобразованиеID?
namenameTurbo ведётПрямоеДа
descriptionshort_descriptionTurbo ведётПрямое
lifecycle.activego_live_dateTurbo ведётДата
lifecycle.endOfLiferetirement_dateTurbo ведётДата
attributes.businessCriticalitybusines_criticalityTurbo ведётКарта значений
attributes.hostingTypehosting_typeTurbo ведётПрямое
attributes.installStatusinstall_statusSNOW ведётПрямое
attributes.ipAddressip_addressSNOW ведётПрямое

Конфигурация карты значений для businessCriticality:

{
"mapping": {
"1 - most critical": "missionCritical",
"2 - somewhat critical": "businessCritical",
"3 - less critical": "businessOperational",
"4 - not critical": "administrativeService"
}
}

Совет для первой синхронизации: При первом pull значения SNOW заполняют все поля (поскольку карточки ещё не существуют). После этого поля, которые ведёт Turbo, принадлежат команде EA — последующие pull обновляют только операционные поля, которые ведёт SNOW (статус установки, IP), а команда EA управляет всем остальным напрямую в Canopy.

После импорта: Уточните имена приложений, напишите стратегические описания, свяжите с бизнес-возможностями, добавьте оценки функционального/технического соответствия и установите фазы жизненного цикла — всё это теперь принадлежит Canopy и будет передано обратно в ServiceNow при push-синхронизациях.


Сценарий 2: ИТ-компоненты (серверы)

Цель: Импортировать серверную инфраструктуру для карты инфраструктуры и анализа зависимостей.

Маппинг:

НастройкаЗначение
Тип карточкиITComponent
Таблица SNOWcmdb_ci_server
НаправлениеДвунаправленный
РежимКонсервативный
Фильтрactive=true^hardware_statusNOT IN6,7

Маппинги полей:

Поле CanopyПоле SNOWНаправлениеПреобразованиеID?
namenameTurbo ведётПрямоеДа
descriptionshort_descriptionTurbo ведётПрямое
attributes.manufacturermanufacturer.nameTurbo ведётПрямое
attributes.operatingSystemosSNOW ведётПрямое
attributes.ipAddressip_addressSNOW ведётПрямое
attributes.serialNumberserial_numberSNOW ведётПрямое
attributes.hostnamehost_nameSNOW ведётПрямое

Примечание: Для серверов операционные поля обнаружения, такие как ОС, IP, серийный номер и имя хоста, естественно поступают из автоматического обнаружения SNOW. Но команда EA по-прежнему владеет отображаемым именем и описанием для стратегического контекста.

После импорта: Свяжите ИТ-компоненты с приложениями через связи, что питает граф зависимостей и отчёты по инфраструктуре.


Сценарий 3: Программные продукты с отслеживанием EOL

Цель: Импортировать программные продукты и объединить с интеграцией endoflife.date Canopy.

Маппинг:

НастройкаЗначение
Тип карточкиITComponent
Таблица SNOWcmdb_ci_spkg
НаправлениеДвунаправленный
РежимКонсервативный
Фильтрactive=true

Маппинги полей:

Поле CanopyПоле SNOWНаправлениеПреобразованиеID?
namenameTurbo ведётПрямоеДа
descriptionshort_descriptionTurbo ведётПрямое
attributes.versionversionSNOW ведётПрямое
attributes.vendormanufacturer.nameTurbo ведётПрямое

После импорта: Перейдите в Администрирование > EOL и используйте Массовый поиск для автоматического сопоставления импортированных ИТ-компонентов с продуктами endoflife.date. Это обеспечивает автоматическое отслеживание рисков EOL.


Сценарий 4: Вендоры / поставщики (двунаправленный)

Цель: Поддерживать реестр вендоров в синхронизированном состоянии. Canopy владеет именами вендоров, описаниями и стратегическим контекстом.

Маппинг:

НастройкаЗначение
Тип карточкиProvider
Таблица SNOWcore_company
НаправлениеДвунаправленный
РежимДобавление
Фильтрvendor=true

Маппинги полей:

Поле CanopyПоле SNOWНаправлениеПреобразованиеID?
namenameTurbo ведётПрямоеДа
descriptionnotesTurbo ведётПрямое
attributes.websitewebsiteTurbo ведётПрямое
attributes.contactEmailemailSNOW ведётПрямое

Сценарий 5: Передача оценок EA обратно в ServiceNow

Цель: Экспортировать специфичные для EA оценки в пользовательские поля ServiceNow, чтобы команды ITSM видели контекст EA.

Маппинг:

НастройкаЗначение
Тип карточкиApplication
Таблица SNOWcmdb_ci_business_app
НаправлениеCanopy -> ServiceNow
РежимДобавление

Маппинги полей:

Поле CanopyПоле SNOWНаправлениеПреобразованиеID?
namenameSNOW ведётПрямоеДа
attributes.businessCriticalityu_ea_business_criticalityTurbo ведётКарта значений
attributes.functionalSuitabilityu_ea_functional_fitTurbo ведётКарта значений
attributes.technicalSuitabilityu_ea_technical_fitTurbo ведётКарта значений

Важно: Push-синхронизация в пользовательские поля (с префиксом u_) требует, чтобы эти столбцы уже существовали в ServiceNow. Согласуйте с администратором ServiceNow их создание перед настройкой push-маппинга. Сервисной учётной записи нужна роль import_admin для доступа на запись.


Справочник типов преобразований

Прямое (по умолчанию)

Передаёт значение без изменений. Используйте для текстовых полей одинакового формата в обеих системах.

Карта значений

Преобразует перечисляемые значения между системами. Настройте с помощью JSON-маппинга:

{
"mapping": {
"1": "missionCritical",
"2": "businessCritical",
"3": "businessOperational",
"4": "administrativeService"
}
}

Маппинг автоматически обращается при push из Canopy в ServiceNow.

Формат даты

Обрезает значения datetime ServiceNow (2024-06-15 14:30:00) до формата только даты (2024-06-15). Используйте для дат фаз жизненного цикла, где время несущественно.

Логическое

Конвертирует между строковыми булевыми значениями ServiceNow ("true", "1", "yes") и нативными булевыми значениями.


Лучшие практики безопасности

Управление учётными данными

ПрактикаДетали
Шифрование при храненииВсе учётные данные шифруются через Fernet (AES-128-CBC), производный от SECRET_KEY. При ротации SECRET_KEY повторно введите все учётные данные ServiceNow.
Минимальные привилегииСоздайте выделенную сервисную учётную запись SNOW с доступом только на чтение к конкретным таблицам. Предоставляйте доступ на запись только при использовании push-синхронизации.
OAuth 2.0 предпочтителенBasic Auth отправляет учётные данные при каждом вызове API. OAuth использует краткосрочные токены с ограничениями области.
Ротация учётных данныхРотируйте пароли или секреты клиента каждые 90 дней.

Сетевая безопасность

ПрактикаДетали
HTTPS обязателенHTTP URL отклоняются при валидации. Все подключения должны использовать HTTPS.
Валидация имён таблицИмена таблиц проверяются по ^[a-zA-Z0-9_]+$ для предотвращения инъекций.
Валидация sys_idЗначения sys_id проверяются как 32-символьные шестнадцатеричные строки.
Список разрешённых IPНастройте контроль доступа по IP в ServiceNow, чтобы разрешить только IP-адрес вашего сервера Canopy.

Контроль доступа

ПрактикаДетали
Защита RBACКонечные точки ServiceNow только для чтения требуют разрешения servicenow.view; все изменения требуют servicenow.manage.
АудитВсе изменения, созданные синхронизацией, публикуют события с source: "servicenow_sync", видимые в истории карточки.
Без раскрытия учётных данныхПароли и секреты никогда не возвращаются в ответах API.

Контрольный список для производства

  • Выделенная сервисная учётная запись ServiceNow (не личная)
  • OAuth 2.0 с грантом клиентских учётных данных
  • График ротации учётных данных (каждые 90 дней)
  • Сервисная учётная запись ограничена только маппированными таблицами
  • Настроен список разрешённых IP ServiceNow для сервера Canopy
  • Максимальный коэффициент удаления 50% или ниже
  • Мониторинг запусков синхронизации на необычные ошибки или удаления
  • Запросы фильтрации включают active=true как минимум

Руководство по эксплуатации

Последовательность начальной настройки

1. Создайте сервисную учётную запись ServiceNow с минимальными требуемыми ролями
2. Проверьте сетевое подключение (может ли Canopy достичь SNOW через HTTPS?)
3. Создайте подключение в Canopy и протестируйте его
4. Убедитесь, что типы метамодели имеют все поля для синхронизации
5. Создайте первый маппинг в режиме ДОБАВЛЕНИЯ с включённым стейджингом
6. Запустите первую pull-синхронизацию — проверьте промежуточные записи
7. Примените промежуточные записи
8. Проверьте импортированные карточки в Реестре
9. При необходимости скорректируйте маппинги полей, повторите
10. Переключите маппинг в КОНСЕРВАТИВНЫЙ режим для текущего использования
11. После нескольких успешных запусков включите «Пропустить стейджинг» для автоматизации

Текущие операции

ЗадачаЧастотаКак
Запуск pull-синхронизацииЕжедневно или еженедельноПанель синхронизации > кнопка Pull (или cron)
Проверка статистики синхронизацииПосле каждого запускаПроверьте количество ошибок/удалений
Тестирование подключенийЕжемесячноНажмите кнопку тестирования на каждом подключении
Ротация учётных данныхЕжеквартальноОбновите в обеих системах — SNOW и Canopy
Проверка карты идентификаторовЕжеквартальноПроверьте осиротевшие записи через статистику синхронизации
Аудит истории карточекПо необходимостиФильтруйте события по источнику servicenow_sync

Настройка автоматических синхронизаций

Синхронизации можно запускать через API для автоматизации:

# Ежедневная pull-синхронизация в 2:00
0 2 * * * curl -s -X POST \
-H "Authorization: Bearer $TURBOEA_TOKEN" \
"https://canopy.company.com/api/v1/servicenow/sync/pull/$MAPPING_ID" \
>> /var/log/canopy-sync.log 2>&1

Лучшая практика: Запускайте синхронизации в непиковые часы. Для больших таблиц CMDB (10 000+ CI) ожидайте 2-5 минут в зависимости от задержки сети и количества записей.

Планирование ёмкости

Размер CMDBОжидаемая длительностьРекомендация
< 500 CI< 30 секундСинхронизация ежедневно, стейджинг опционален
500-5000 CI30с - 2 минутыСинхронизация ежедневно, пропуск стейджинга
5000-20 000 CI2-5 минутСинхронизация ночью, пропуск стейджинга
20 000+ CI5-15 минутСинхронизация еженедельно, используйте фильтры для разделения

Устранение неполадок

Проблемы подключения

СимптомПричинаРешение
Connection failed: [SSL]Самоподписанный или просроченный сертификатУбедитесь, что SNOW использует действительный сертификат публичного CA
HTTP 401: UnauthorizedНеверные учётные данныеПовторно введите имя пользователя/пароль; проверьте, не заблокирована ли учётная запись
HTTP 403: ForbiddenНедостаточно ролейПредоставьте роли itil и cmdb_read сервисной учётной записи
Connection failed: timed outБлокировка межсетевым экраномПроверьте правила; добавьте IP Canopy в список разрешённых SNOW
Тест ОК, но синхронизация не работаетРазрешения на уровне таблицыПредоставьте доступ на чтение к конкретной таблице CMDB

Проблемы синхронизации

СимптомПричинаРешение
0 записей извлеченоНеверная таблица или фильтрПроверьте имя таблицы; упростите запрос фильтрации
Все записи — «create»Несовпадение идентификаторовОтметьте name как идентификатор; проверьте совпадение имён
Много ошибокСбои преобразованияПроверьте промежуточные записи на сообщения об ошибках
Удаления пропущеныКоэффициент превышенУвеличьте порог или исследуйте, почему CI исчезли
Изменения не видныКэш браузераПринудительное обновление; проверьте историю карточки на наличие событий
Дублирование карточекНесколько маппингов для одного типаИспользуйте один маппинг на тип карточки на подключение
Push-изменения отклоненыОтсутствуют разрешения SNOWПредоставьте роль import_admin сервисной учётной записи

Диагностические инструменты

# Предварительный просмотр маппинга записей (5 примеров, без побочных эффектов)
POST /api/v1/servicenow/mappings/{mapping_id}/preview

# Обзор таблиц экземпляра SNOW
GET /api/v1/servicenow/connections/{conn_id}/tables?search=cmdb

# Просмотр столбцов таблицы
GET /api/v1/servicenow/connections/{conn_id}/tables/cmdb_ci_business_app/fields

# Фильтрация промежуточных записей по действию или статусу
GET /api/v1/servicenow/sync/runs/{run_id}/staged?action=create
GET /api/v1/servicenow/sync/runs/{run_id}/staged?action=update
GET /api/v1/servicenow/sync/runs/{run_id}/staged?status=error

Справочник API (краткий)

Все конечные точки требуют Authorization: Bearer <token>. Конечные точки только для чтения требуют разрешения servicenow.view, изменяющие — servicenow.manage. Базовый путь: /api/v1.

Подключения

МетодПутьОписание
GET/servicenow/connectionsСписок подключений
POST/servicenow/connectionsСоздание подключения
GET/servicenow/connections/{id}Получение подключения
PATCH/servicenow/connections/{id}Обновление подключения
DELETE/servicenow/connections/{id}Удаление подключения + всех маппингов
POST/servicenow/connections/{id}/testТестирование подключения
GET/servicenow/connections/{id}/tablesОбзор таблиц SNOW
GET/servicenow/connections/{id}/tables/{table}/fieldsСписок столбцов таблицы

Маппинги

МетодПутьОписание
GET/servicenow/mappingsСписок маппингов с маппингами полей
POST/servicenow/mappingsСоздание маппинга с маппингами полей
GET/servicenow/mappings/{id}Получение маппинга с маппингами полей
PATCH/servicenow/mappings/{id}Обновление маппинга (заменяет поля, если указаны)
DELETE/servicenow/mappings/{id}Удаление маппинга
POST/servicenow/mappings/{id}/previewПредварительный просмотр (5 примеров записей)

Операции синхронизации

МетодПутьОписание
POST/servicenow/sync/pull/{mapping_id}Pull-синхронизация (?auto_apply=true по умолчанию)
POST/servicenow/sync/push/{mapping_id}Push-синхронизация
GET/servicenow/sync/runsСписок истории синхронизации (?limit=20)
GET/servicenow/sync/runs/{id}Детали запуска + статистика
GET/servicenow/sync/runs/{id}/stagedСписок промежуточных записей запуска
POST/servicenow/sync/runs/{id}/applyПрименение ожидающих промежуточных записей