디스커버리 프로토타입

Zabbix v7.4번역일: 2026-09-09원본 보기

개요

디스커버리 프로토타입은 "부모" 디스커버리 규칙 안에 있는 중첩된 로우 레벨 디스커버리 규칙으로, 자체 아이템, 트리거 등을 가진 객체의 다단계 디스커버리를 생성할 수 있게 해줍니다. 예를 들어, 데이터베이스 서버의 모든 데이터베이스 인스턴스를 발견한 다음, 각 인스턴스에 대한 테이블스페이스를 발견하고, 다시 각 테이블스페이스에 대한 테이블을 발견하고 싶을 수 있습니다.

디스커버리 프로토타입은 자체 아이템, 트리거, 그래프, 호스트, 디스커버리 프로토타입을 가집니다. Nested 유형을 지정하면 중첩된 디스커버리 프로토타입은 부모 규칙과 동일한 JSON 값을 사용합니다.

디스커버리 프로토타입의 중첩 단계는 제한이 없습니다.

설정

디스커버리 프로토타입을 생성하려면:

  • 기존 디스커버리 규칙의 행에서 Discovery prototypes를 클릭합니다

  • Create discovery prototype를 클릭합니다

이 폼의 설정 필드는 일반 로우 레벨 디스커버리와 공유됩니다.

열린 디스커버리 프로토타입 폼에서 Type으로 "Nested"를 선택하면, (디스커버리 프로토타입에서 나온) 디스커버리 규칙은 부모 디스커버리 규칙과 동일한 JSON 값의 JSON 객체를 기반으로 생성됩니다. 예를 들어, 원본 JSON이 [<object A>, <object B>]이고 중첩된 디스커버리 규칙 프로토타입이 하나 있다면, 각각 object A와 object B 데이터를 기반으로 두 개의 디스커버리 규칙이 생성됩니다.

이 경우 디스커버리 프로토타입은 부모 규칙과 동시에 활성화됩니다. 따라서 중첩된 규칙은 전처리를 사용하여 부모가 이미 획득한 동일한 데이터의 다른 "슬라이스"에서 작업할 수 있습니다.

부모 LLD 규칙의 LLD 매크로는 중첩된 디스커버리 규칙에서 사용할 수 있습니다.

발견된 호스트에서의 중첩 LLD 규칙

Nested 로우 레벨 디스커버리 규칙은 호스트 프로토타입에 할당된 호스트 템플릿에서 사용할 수 있습니다. 발견된 호스트에 Nested 디스커버리 규칙이 존재하면, 호스트를 발견하는 데 사용된 JSON 객체가 이 호스트의 모든 Nested 유형 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. 이 호스트에 대해 Discover databases and tablespaces라는 이름의 LLD 규칙을 생성합니다.

  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}라는 이름의 아이템을 생성합니다 (Type: Agent, Key: db.connections[{#DB}]).

  4. 이 템플릿에 대해 Discover tablespaces라는 이름의 LLD 규칙을 생성합니다 (Type: Nested).

  5. 이 규칙의 Preprocessing 탭으로 전환하여 JSONPath=$.tablespaces 단계를 추가합니다.

  6. 이 규칙의 LLD Macros 탭으로 전환하여 매크로 {#TSNAME}=$.name을 추가합니다.

  7. 이 규칙에 대해 Size of tablespace {#TSNAME} for {#DB}라는 이름의 아이템 프로토타입을 생성합니다 (Type: Agent, Key: db.ts.size[{#DB}, {#TSNAME}]).

  8. 다시 루트 호스트에서, 이 호스트에 대해 Discover databases and tablespaces라는 이름의 LLD 규칙을 생성합니다.

  9. 이 규칙의 LLD Macros 탭으로 전환하여 매크로 {#DB}=$.database를 추가합니다.

  10. 이 규칙에 대해 Host for database {#DB}라는 이름의 호스트 프로토타입을 추가합니다.

  11. 이 호스트 프로토타입의 Macros 탭으로 전환하여 매크로 {$DB}={#DB}를 추가합니다 (3단계의 아이템 이름과 키를 위한 것입니다).

  12. 2단계의 템플릿을 이 호스트 프로토타입에 연결합니다.

  13. 발견된 호스트는 각 데이터베이스 및 그 테이블스페이스와 관련된 발견된 아이템을 포함합니다:

Host Items
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