5 Прототипы обнаружения

Обзор

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

Прототипы обнаружения имеют собственные прототипы элементов данных, триггеров, графиков, узлов сети и прототипы обнаружения. Вложенный прототип обнаружения будет использовать то же JSON-значение, что и родительское правило, если вы укажете тип Nested.

Уровни вложенности для прототипов обнаружения не ограничены.

Конфигурация

Чтобы создать прототип обнаружения:

  • Нажмите Прототипы обнаружения в строке существующего правила обнаружения

  • Нажмите Создать прототип обнаружения

Поля конфигурации этой формы общие с обычным обнаружением на низком уровне.

Если в открывшейся форме прототипа обнаружения в качестве Type выбрать "Nested", то правила обнаружения (из прототипа обнаружения) будут генерироваться на основе JSON-объекта из того же JSON-значения, что и у родительского правила обнаружения. Например, если исходный JSON — [<object A>, <object B>] и существует один вложенный прототип правила обнаружения, то будут сгенерированы два правила обнаружения на основе данных object A и object B соответственно.

В этом случае прототип обнаружения активируется одновременно с родительским правилом. Таким образом, вложенное правило может использовать предварительную обработку, чтобы работать с другим "срезом" тех же данных, уже полученных родителем.

LLD-макросы из родительского LLD-правила доступны для вложенных правил обнаружения.

Вложенные правила LLD на обнаруженных узлах сети

Вложенное правило низкоуровневого обнаружения можно использовать в шаблоне узла сети, назначенном прототипу узла сети. Если на обнаруженном узле сети существует вложенное правило обнаружения, то JSON-объект, использованный для обнаружения узла сети, также отправляется всем правилам LLD вложенного типа на этом узле сети. Подробнее см. пример.

Макросы LLD из правила обнаружения, которое создало узел сети, доступны для вложенных правил обнаружения.

Пример

Давайте рассмотрим возможное применение прототипов обнаружения на основе получения следующего примера многоуровневого JSON.

[
  {
    "database": "db1",
    "created_at": "2024-02-01T12:30:00Z",
    "encoding": "UTF8",
    "tablespaces": [
      { "name": "ts1", "max_size": "10GB" },
      { "name": "ts2", "max_size": "20GB" },
      { "name": "ts3", "max_size": "15GB" }
    ]
  },
  {
    "database": "db2",
    "created_at": "2023-11-15T08:45:00Z",
    "encoding": "UTF16",
    "tablespaces": [
      { "name": "ts1", "max_size": "5GB" },
      { "name": "ts2", "max_size": "25GB" },
      { "name": "ts3", "max_size": "30GB" }
    ]
  },
  {
    "database": "db3",
    "created_at": "2024-01-05T15:10:00Z",
    "encoding": "UTF8",
    "tablespaces": [
      { "name": "ts1", "max_size": "12GB" },
      { "name": "ts2", "max_size": "18GB" },
      { "name": "ts3", "max_size": "22GB" }
    ]
  }
]
Случай 1

Обнаружение экземпляров базы данных на сервере баз данных, а затем обнаружение табличных пространств для каждого экземпляра.

  1. У вас есть как минимум один узел сети, связанный с обнаружением сервера баз данных.

  2. Создайте правило LLD для этого узла сети с именем Discover databases and tablespaces.

  3. Перейдите на вкладку LLD Macros в этом правиле, добавьте макрос {#DB}=$.database.

  4. Добавьте прототип элемента данных для этого правила с именем Active connections to {#DB} (Type: Agent, Key: db.connections[{#DB}]).

  5. Элементы данных, связанные с каждой базой данных, обнаруживаются:

Active connections to db1, Active connections to db2, Active connections to db3.
  1. Создайте прототип обнаружения для этого правила с именем Discover tablespaces for {#DB} (Type: Nested, Key: db.tablespace.discovery[{#DB}]).

  2. Перейдите на вкладку Preprocessing этого прототипа обнаружения и добавьте шаг JSONPath=$.tablespaces.

  3. Перейдите на вкладку LLD Macros этого прототипа обнаружения, добавьте макрос {#TSNAME}=$.name.

  4. Создайте прототип элемента данных для этого прототипа обнаружения с именем Size of tablespace {#TSNAME} for {#DB} (Type: Agent, Key: db.ts.size[{#DB}, {#TSNAME}]).

  5. Элементы данных, связанные с каждым табличным пространством каждой базы данных, обнаруживаются:

Size of tablespace ts1 for db1, Size of tablespace ts2 for db1, Size of tablespace ts3 for db1,
Size of tablespace ts1 for db2, Size of tablespace ts2 for db2, Size of tablespace ts3 for db2,
Size of tablespace ts1 for db3, Size of tablespace ts2 for db3, Size of tablespace ts3 for db3.

с ключами db.ts.size[db1,ts1], db.ts.size[db1,ts2], ... db.ts.size[db3,ts3].

Случай 2

Обнаружение экземпляров базы данных на сервере базы данных путем представления их как обнаруженных узлов сети, а затем обнаружение табличных пространств для каждого экземпляра.

  1. У вас есть как минимум один узел сети (корневой узел), связанный с обнаружением сервера базы данных.

  2. Создайте шаблон для обнаружения табличных пространств для каждой базы данных.

  3. Создайте в этом шаблоне элемент данных с именем Active connections to {#DB} (Тип: Agent, Ключ: db.connections[{#DB}]).

  4. Создайте правило LLD для этого шаблона с именем Discover tablespaces (Тип: Nested).

  5. Перейдите на вкладку Preprocessing этого правила и добавьте шаг JSONPath=$.tablespaces.

  6. Перейдите на вкладку LLD Macros этого правила и добавьте макрос {#TSNAME}=$.name.

  7. Создайте прототип элемента данных для этого правила с именем Size of tablespace {#TSNAME} for {#DB} (Тип: Agent, Ключ: db.ts.size[{#DB}, {#TSNAME}]).

  8. Вернитесь к корневому узлу сети и создайте правило LLD для этого узла с именем Discover databases and tablespaces.

  9. Перейдите на вкладку LLD Macros этого правила и добавьте макрос {#DB}=$.database.

  10. Добавьте прототип узла сети для этого правила с именем Host for database {#DB}.

  11. Перейдите на вкладку Macros этого прототипа узла сети и добавьте макрос {$DB}={#DB} (для имени и ключа элемента данных из шага 3).

  12. Свяжите шаблон из шага 2 с этим прототипом узла сети.

  13. Обнаруженные узлы сети содержат обнаруженные элементы данных, связанные с каждой базой данных и ее табличными пространствами:

Узел сети Элементы данных
Host for database db1 Active connections to db1
Size of tablespace ts1 for db1
Size of tablespace ts2 for db1
Size of tablespace ts3 for db1
Host for database db2 Active connections to db2
Size of tablespace ts1 for db2
Size of tablespace ts2 for db2
Size of tablespace ts3 for db2
Host for database db3 Active connections to db3
Size of tablespace ts1 for db3
Size of tablespace ts2 for db3
Size of tablespace ts3 for db3