모든 서비스 그래프 커넥터를 지원하기 위한 표준화된 JSON 공통 데이터 세트

  • 릴리스 버전: Australia
  • 업데이트 날짜 2026년 03월 12일
  • 소요 시간: 17분
  • 통합 스키마와 재사용 가능한 ETL 논리를 사용하는 표준화된 서비스 그래프 커넥터를 지원하려면 TSOM 아키텍처를 사용합니다. 이를 통해 새 커넥터의 온보딩 시간이 단축되고 CMDB와의 통합이 단순화됩니다.

    1. 공통 JSON 스키마 정의

    모든 서비스 그래프 커넥터의 출력을 TNI 스키마를 준수하는 단일 JSON 형식에 맞게 표준화합니다.

    다음 사항을 확인하십시오.
    1. 수집기 또는 어댑터에서 변환 논리를 구현하여 데이터를 공통 스키마로 출력합니다.
    2. 확인:
      • 슬롯 상의 슬롯 또는 카드 온 카드 계층 구조는 제외됩니다.
      • 논리적 인터페이스는 virtual=true로 명확하게 표시됩니다.
      • 장비 유형은 모델-클래스 매핑에 맞춰집니다.
    주:
    스키마는 사용 가능한 경우 TNI 변경 사항에 대한 런타임 적응성을 지원해야 합니다.

    다음은 모든 TSOM 서비스 그래프 커넥터를 지원하는 JSON 스키마 공통 데이터 세트입니다.

    {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "title": "Telco Generic Schema",
      "version": "2.0.1",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "logical_composites": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/logical_composite"
              }
            }
          },
          "required": [
            "logical_composites"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "devices": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/device"
              }
            }
          },
          "required": [
            "devices"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "logical_connections": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/logical_connection"
              }
            }
          },
          "required": [
            "logical_connections"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "port_relations": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/port_relation"
              }
            }
          },
          "required": [
            "port_relations"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "logical_connection_relations": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/logical_connection_relation"
              }
            }
          },
          "required": [
            "logical_connection_relations"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "numbers": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/number"
              }
            }
          },
          "required": [
            "numbers"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "topologies": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/network_topology"
              }
            }
          },
          "required": [
            "topologies"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "topology_relations": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/network_topology_relation"
              }
            }
          },
          "required": [
            "topology_relations"
          ],
          "additionalProperties": false
        }
      ],
      "$defs": {
        "keyRef": {
          "type": "object",
          "properties": { "key": { "type": "string" }
          },
          "required": [ "key" ],
          "additionalProperties": false
        },
        "optionalKeyRef": { "type": [ "object", "null" ],
          "properties": {
            "key": { "type": "string" }
          },
          "additionalProperties": false
        },
        "value": {
          "type": "object",
          "properties": {
            "from": { "type": [ "integer" ], "default": 0, "minimum": 0 },
            "to": { "type": [ "integer" ], "default": 0, "minimum": 0 }
          },
          "required": [ "from", "to" ],
          "additionalProperties": false
        },
        "logical_composite": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "logical_composite" ] },
            "key": { "type": "string" },
            "name": { "type": [ "string", "null" ] },
            "description": { "type": [ "string", "null" ] },
            "devices": { "type": "array", "items": { "$ref": "#/$defs/keyRef" } },
            "power_units": { "type": "array", "items": { "$ref": "#/$defs/pdu" } },
            "fan_shelves": { "type": "array", "items": { "$ref": "#/$defs/fan_shelf" } } },
          "required": [ "key", "name" ]
        },
        "pdu": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "pdu" ] },
            "key": { "type": "string" },
            "name": { "type": [ "string", "null" ] },
            "description": { "type": [ "string", "null" ] },
            "model_name": { "type": [ "string", "null" ] },
            "model_number": { "type": [ "string", "null" ] },
            "unit_position": { "type": [ "integer", "null" ], "minimum": 1 },
            "slots": { "type": "array", "items": { "$ref": "#/$defs/slot" } }
          },
          "required": [ "key", "name" ]
        },
        "fan_shelf": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "fan_shelf" ] },
            "key": { "type": "string" },
            "name": { "type": [ "string", "null" ] },
            "description": { "type": [ "string", "null" ] },
            "slots": { "type": "array", "items": { "$ref": "#/$defs/slot" } }
          },
          "required": [ "key", "name" ]
        },
        "device": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "device" ] },
            "key": { "type": "string" },
            "name": { "type": [ "string", "null" ] },
            "description": { "type": [ "string", "null" ] },
            "ip_address": { "type": [ "string", "null" ] },
            "mac_address": { "type": [ "string", "null" ] },
            "serial_number": { "type": [ "string", "null" ] },
            "model_name": { "type": [ "string", "null" ] },
            "model_number": { "type": [ "string", "null" ] },
            "manufacturer": { "type": [ "string", "null" ] },
            "firmware_version": { "type": [ "string", "null" ] },
            "slots": { "type": "array", "items": { "$ref": "#/$defs/slot" } },
            "ports": { "type": "array", "items": { "$ref": "#/$defs/port" } } },
          "required": [ "key", "name", "serial_number" ]
        },
        "slot": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "slot" ] },
            "key": { "type": "string" },
            "name": { "type": [ "string", "null" ] },
            "description": { "type": [ "string", "null" ] },
            "model_name": { "type": [ "string", "null" ] },
            "model_number": { "type": [ "string", "null" ] },
            "manufacturer": { "type": [ "string", "null" ] },
            "unit_position": { "type": [ "integer", "null" ], "minimum": 1 },
            "cards": { "type": "array", "items": { "$ref": "#/$defs/card" } }
          },
          "required": [ "key", "name" ]
        },
        "card": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "card" ] },
            "key": { "type": "string" },
            "name": { "type": [ "string", "null" ] },
            "description": { "type": [ "string", "null" ] },
            "mac_address": { "type": [ "string", "null" ] },
            "serial_number": { "type": [ "string", "null" ] },
            "firmware_version": { "type": [ "string", "null" ] },
            "model_name": { "type": [ "string", "null" ] },
            "model_number": { "type": [ "string", "null" ] },
            "manufacturer": { "type": [ "string", "null" ] },
            "unit_position": { "type": [ "integer", "null" ], "minimum": 1 },
            "slots": { "type": "array", "items": { "$ref": "#/$defs/slot" } },
            "ports": { "type": "array", "items": { "$ref": "#/$defs/port" } }
          },
          "required": [ "key", "name" ]
        },
        "port": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "port" ] },
            "key": { "type": "string" },
            "name": { "type": [ "string", "null" ] },
            "description": { "type": [ "string", "null" ] },
            "model_name": { "type": [ "string", "null" ] },
            "ip_address": { "type": [ "string", "null" ] },
            "virtual": { "type": "boolean", "default": false },
            "unit_position": { "type": [ "integer", "null" ], "minimum": 1 },
            "bandwidth_name": { "type": [ "string", "null" ] },
            "bandwidth_group": { "type": [ "string", "null" ] },
            "bandwidth": { "type": [ "integer", "null" ], "minimum": 0 },
            "mtu_size": { "type": [ "integer", "null" ], "minimum": 0 }
          },
          "required": [ "key", "name" ]
        },
        "number": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "number" ] },
            "key": { "type": "string" },
            "name": { "type": [ "string", "null" ] },
            "related_ci_type": { "type": "string", "enum": [ "Network Interface", "Physical Connection", "Logical Connection", "Equipment", "Topology" ] },
            "related_ci": { "$ref": "#/$defs/keyRef" },
            "type": { "type": "string", "enum": [ "vlan_range", "vlan_subrange", "vlan", "lag_range", "lag" ] },
            "vlan_type": { "type": "string", "enum": [ "inner", "outer" ] },
            "value": { "$ref": "#/$defs/value" }
          },
          "required": [ "key", "name", "type", "related_ci_type", "related_ci", "value" ] },
        "logical_connection": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "logical_connection" ] },
            "key": { "type": "string" },
            "name": { "type": [ "string", "null" ] },
            "description": { "type": [ "string", "null" ] },
            "model_name": { "type": [ "string", "null" ] },
            "bandwidth_group": { "type": [ "string", "null" ] },
            "bandwidth_name_a_to_z": { "type": [ "string", "null" ] },
            "bandwidth_name_z_to_a": { "type": [ "string", "null" ] },
            "bandwidth_a_to_z": { "type": [ "integer", "null" ], "minimum": 0 },
            "bandwidth_z_to_a": { "type": [ "integer", "null" ], "minimum": 0 },
            "equipment_a": { "$ref": "#/$defs/optionalKeyRef" },
            "equipment_z": { "$ref": "#/$defs/optionalKeyRef" },
            "port_a": { "$ref": "#/$defs/keyRef" },
            "port_z": { "$ref": "#/$defs/keyRef" }
          },
          "required": [ "key", "name", "equipment_a", "equipment_z", "port_a", "port_z" ]
        },
        "port_relation": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "port_relation" ] },
            "parent": { "$ref": "#/$defs/keyRef" },
            "child": { "$ref": "#/$defs/keyRef" }
          },
          "required": [ "parent", "child" ]
        },
        "logical_connection_relation": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "logical_connection_relation" ] },
            "sequence": { "type": [ "integer", "null" ], "minimum": 1 },
            "route": { "type": [ "integer", "null" ], "minimum": 1 },
            "parent": { "$ref": "#/$defs/keyRef" },
            "child": { "$ref": "#/$defs/keyRef" }
          },
          "required": [ "parent", "child" ]
        },
        "network_topology": {
          "type": "object",
          "properties": {
            "class": { "type": "string", "enum": [ "network_topology" ] },
            "key": { "type": "string" },
            "name": { "type": "string" },
            "model_name": { "type": [ "string", "null" ] },
            "devices": { "type": "array", "items": { "key": "#/$defs/optionalKeyRef" } },
            "logical_connections": { "type": "array", "items": { "key": "#/$defs/optionalKeyRef" } }
          },
          "required": [ "key", "name", "devices", "logical_connections" ]
        }
      }
    }

    2. ETL에서 연결 분리

    장치 상호작용 논리를 변환 논리(ETL 수집)와 분리하여 유연성을 보장합니다. 사용자는 ETL 논리와 독립적으로 자체 수집기를 개발할 수 있습니다.

    다음 사항을 확인하십시오.
    1. 통합 스키마로의 연결 및 데이터 변환에만 집중하도록 수집기를 설계합니다.
    2. EMS/NMS 어댑터(Atrinet과 같은 타사 어댑터 포함)를 사용하거나 재사용합니다.
    3. 표준화된 데이터를 ServiceNow 임포트 세트로 푸시합니다.

    3. CMDB 업데이트에 대한 일반 ETL 구성

    재사용 가능한 단일 ETL을 사용하여 표준화된 모든 임포트 세트를 처리하고 CMDB를 정확하게 업데이트합니다.

    다음 사항을 확인하십시오.

    1. 임포트 세트에 표준화된 JSON 형식의 데이터가 포함되어 있는지 확인합니다.
    2. TSOM 일반 ETL을 사용하여 다음을 수행할 수 있습니다.
      • 엔터티 유형(예: 슬롯, 카드, 논리적 인터페이스)을 탐지합니다.
      • 모델 매핑 논리에 따라 각 엔터티를 올바른 CI 클래스에 매핑합니다.
      • 해당하는 경우 인벤토리 범주를 포함한 필드를 채웁니다.

    특별 처리:

    • 논리적 인터페이스 → 포트 테이블(virtual=true)
    • 논리적 연결 → 논리적 연결 테이블
    • PDU 테이블 → PDU 카드
    • 장비 → 모델 기반 CI 클래스(여러 개가 있는 경우 최신 매핑)

    4. 멀티 섀시 및 복합 장치에 대한 지원 구성

    올바른 CMDB 관계를 가진 멀티 섀시 라우터와 같은 복잡한 장치를 모델링합니다.

    다음 사항을 확인하십시오.
    1. 논리 복합 구성을 사용하여 라우터 + PDU와 같은 그룹화된 엔터티를 나타냅니다.
    2. 해당 계층 구조에서 개별 구성요소(팬, 관리, 슬롯)를 정의합니다.
    3. TNI 모델링 지침에 따라 각 엔터티를 매핑합니다.
    예: 7750-2s 멀티 섀시 디바이스의 경우:
    • 논리 복합 →에는 라우터와 PDU가 포함되어 있습니다.
    • PDU →에는 슬롯→ 카드 → 하위 슬롯이 포함되어 있습니다.

    5. 설치에 따라 TNI 엔터티 생성 활성화

    불필요한 기록 생성 없이 TNI 표준과의 일관성을 보장합니다.

    다음 사항을 확인하십시오.
    • TNI가 설치된 경우:
      • 검색된 각 CI에 대해 TNI 엔터티를 자동으로 생성합니다.
      • 인벤토리 범주를 적절하게 설정합니다(예: "논리적 연결", "인터페이스").
    • TNI가 설치되지 않은 경우: TNI 엔터티 생성을 건너뛰어 고아 기록 또는 잘못된 기록을 방지합니다.