Определение пользовательской топологии
Мы продолжаем рассматривать наш пример логистики Easy Shipping LTD, в котором грузовики и контейнеры, установленные на грузовиках, передают телеметрические данные в Ключ-АСТРОМ.
Пример потока данных соответствует формату протокола метрической линии Ключ-АСТРОМ.
| truck.fuel.total,trucknr=99,model=mac-granite 10234
truck.fuel.usage,trucknr=99,model=mac-granite 17 truck.operation.hours,trucknr=99,model=mac-granite 23766 truck.fuel.total,trucknr=12,model=mac-anthem 234 truck.fuel.usage,trucknr=12,model=mac-anthem 10 truck.operation.hours,trucknr=12,model=mac-anthem 13766 container.temperature,containernr=234321,trucknr=99 40 container.temperature.dev,containernr=234321,trucknr=99 0 container.temperature,containernr=111111,trucknr=12 39 container.temperature.dev,containernr=111111,trucknr=12 2.5 |
Определение нового типа сущности
Для определения нового типа сущности укажите имя сущности и задайте правила ее извлечения.
Определение имени сущности
На основе приведенного выше примера определите новый тип сущности «Грузовик» в среде Ключ-АСТРОМ.
- Перейдите в Настройки > Модель топологии > Типы общего назначения.
- Выберите Добавить определение типа, чтобы начать определять собственный пользовательский тип сущности
truck. - Укажите уникальное имя типа, которое будет служить идентификатором сущности.
Чтобы гарантировать уникальность имени типа для всей вашей среды Ключ-АСТРОМ, добавьте перед именем типа домен, специфичный для вашей топологии (например,logistics:truck). - Установите для параметра Тип отображаемого имени удобное для человека отображаемое имя.
- В поле Создано укажите имя создателя (человека или добавочный номер).
Укажите правила извлечения
Научите Ключ-АСТРОМ, как автоматически сопоставлять новый тип сущности и как идентифицировать уникальные экземпляры сущностей (грузовики).
- Выберите Добавить правило извлечения.
- Чтобы указать правило извлечения идентификатора экземпляра для нового типа сущности, установите параметр Шаблон извлекаемого идентификатора в значение
{trucknr}.
Необходимо использовать ссылку{placeholder}на имя измерения, чтобы гарантировать уникальность идентификатора экземпляра. Значение измерения станет идентификатором экземпляра. - Чтобы указать правило извлечения имени экземпляра для вашего нового типа сущности, установите шаблон имени экземпляра в значение
{trucknr}. Значение измерения станет именем экземпляра. - Чтобы задать правило извлечения для атрибута сущности, выберите Добавить правило извлечения атрибута. В этом примере данные по каждому грузовику отображаются с учетом измерения
model, которым является атрибут грузовика:- Ключ атрибута: уникальный идентификатор правила, из которого нужно извлечь значение атрибута.
- Отображаемое имя атрибута. Вы можете оставить это поле пустым, чтобы использовать ключ в качестве отображаемого имени.
- Шаблон извлечения значения атрибута. Добавьте заполнитель для измерения
{model}. Значение измерения станет именем атрибута.
Повторите для дополнительных объектов.
Повторите описанные выше шаги для определения дополнительных сущностей. В этом случае нам по-прежнему необходимо определить тип сущности container, указать правила ее извлечения (containernr) и указать правила извлечения для ее атрибутов (trucknr).
После настройки собственных типов доменов на основе входящих метрик или потоков логов Ключ-АСТРОМ автоматически будет извлекать и создавать новые экземпляры грузовиков и контейнеров всякий раз, когда грузовик или контейнер начинает отправлять свои телеметрические данные.
Определение взаимосвязи между сущностями
Для завершения определения топологии необходимо установить связь между грузовиком и перевозимым контейнером. Без этой связи измерения, относящиеся к грузовику и контейнеру, будут отображаться в Ключ-АСТРОМ отдельно, без указания топологической связи.
Для установления связи между одним типом сущности и другим типом сущности необходимо найти объединенный поток данных. В нашем примере это измерение температуры контейнера, содержащее оба идентификационных значения: номер грузовика и номер контейнера.
Например:
| container.temperature,containernr=111111,trucknr=12 39 |
Благодаря объединенному потоку данных мы теперь можем определить взаимосвязь между грузовиком и контейнером.
- Перейдите в Настройки > Модель топологии > Общие связи.
- Выберите Добавить определение связи.
- Выберите Добавить источник.
- Укажите источник:
- Установите тип источника данных для приема данных на
Metrics - Установите условие
$eq(container.temperature).
Это фильтр, который будет соответствовать имени объединяемой метрики. В этом примере$eq(container.temperature)используется для сопоставления метрикиcontainer.temperature. - Задайте имя типа источника
logistics:container. - Установите тип назначения на
logistics:truck - Установите тип связи на
is child of
Это определяет связь между именем типа источника (logistics:container) и типом назначения (logistics:truck), что в данном случае означает, чтоlogistics:containeris child oflogistics:truck.
- Установите тип источника данных для приема данных на
- Выберите Сохранить изменения.
Дополнительные роли
Использование ролей (таких как клиент и сервер, или вызывающий и вызываемый) необязательно. В нашем примере нам не нужно указывать эти роли, поскольку источник данных для объединения содержит два разных типа сущностей.
Роли необходимы, если вы хотите соединить два экземпляра одного и того же типа сущности с помощью метода объединения.
В качестве примера можно привести график, показывающий время ответа одной службы на вызов другой службы.
Например:
| service.responsetime,caller=service1,callee=service2 39 |
В приведенном выше примере необходимо выделить два экземпляра сервиса одного типа и объединить их с помощью связи вызова.
В этом случае одно правило извлечения должно быть связано с ролью (вызывающий), а другое — с другой ролью (вызываемый).
В процессе извлечения связи роли вызывающего и вызываемого могут быть использованы для определения направления результирующей связи.