Junos Genstate YANG 데이터 모델
주니퍼 네트웍스 genstate YANG 스키마는 Junos 디바이스의 작동 상태에 대한 YANG 데이터 모델을 정의합니다. gRPC 네트워크 관리 인터페이스(gNMI) 클라이언트는 모델에 정의된 리소스 경로를 구독하여 상태 데이터를 요청할 수 있습니다.
Genstate YANG 데이터 모델 개요
주니퍼 네트웍스는 Junos OS Evolved 릴리스 24.2R1부터 genstate YANG 데이터 모델을 게시합니다. 모델은 genstate Junos 디바이스의 작동 상태 데이터에 대한 구독 가능한 YANG 모델입니다. 이는 운영 명령 출력의 YANG 표현입니다. genstate 이 모델은 게시 및 사용 가능할 때 서로 다른 운영 상태 영역 각각에 대한 모듈로 보강된 최상위 모듈로 구성됩니다.
Junos 디바이스에는 풍부한 네이티브 상태 데이터 세트가 있습니다. 디바이스에서 운영 명령 또는 Junos XML RPC를 실행하여 Junos 디바이스에서 운영 상태 정보를 검색할 수 있습니다. 그러나 특정 데이터를 추출하려면 여전히 명령 출력을 구문 분석해야 합니다. 또한 주니퍼는 텔레메트리 수집가가 사용할 수 있는 선별된 junos-state YANG 데이터 모델을 제공하지만 이러한 모델에는 운영 영역 및 상태의 하위 집합만 포함됩니다.
genstate YANG 모델은 gNMI 구독 RPC를 통해 운영 show 명령에서 사용할 수 있는 상태 데이터를 노출합니다. 모듈은 대상 네트워크 디바이스의 특정 상태 데이터에 해당하는 리소스 경로를 설명합니다. gNMI 텔레메트리 수집기는 게시된 YANG 모델의 리소스 경로를 구독하여 해당 인스턴스에 대한 상태 데이터를 쿼리할 수 있습니다.
gRPC 전화 접속 환경의 gNMI 클라이언트는 게시된 genstate 경로를 구독할 수 있습니다. 클라이언트는 SAMPLE 모드에서 STREAM 구독을 사용하여 데이터를 요청할 수 있습니다. ON_CHANGE 모드는 지원되지 않습니다. gNMI를 사용하여 텔레메트리 데이터를 구독하는 방법에 대한 자세한 내용은 Junos 텔레메트리 인터페이스 사용자 가이드를 참조하십시오.
genstate YANG 데이터 모델은 다른 릴리스에서 게시 및 업데이트됩니다. 다음과 같은 방법으로 지정된 릴리스에 대해 사용 가능한 모델과 지원되는 경로를 확인할 수 있습니다.
-
주니퍼/yang GitHub 리포지토리에서 모듈을 보거나 다운로드합니다.
-
주니퍼 네트웍스 웹 사이트( https://www.juniper.net/support/downloads)에서 모듈을 다운로드하십시오.
-
Junos OS를 실행하는 디바이스 또는 Junos OS Evolved를 실행하는 디바이스의 모듈을 방출합니다.
Genstate YANG 상태 모델의 이점
-
gNMI를 통해 사용할 수 있는 작동 상태의 표면적을 늘려 gNMI를 사용하여 상태를 모니터링할 때 디바이스 및 네트워크에 대해 더 많은 정보를 바탕으로 사용 결정을 내릴 수 있습니다.
-
단일 노스바운드 인터페이스로 이동할 수 있도록 하여 디바이스 상태를 모니터링하는 방법을 단순화합니다.
Genstate 모듈 개요
genstate YANG 데이터 모델은 사용 가능한 각 운영 상태 영역에 대한 모듈로 보강된 최상위 루트 모듈로 구성됩니다. 스키마는 genstate 원본 'genstate'을 사용합니다.
최상위 모듈은 다음과 같습니다.
module junos-genstate {
namespace "http://yang.juniper.net/junos/genstate/";
prefix jgs;
organization
"Juniper Networks, Inc.";
contact
"Juniper Networks, Inc.
1133 Innovation Way
Sunnyvale, CA
+1 888 314-5822
E-mail: yang-support@juniper.net";
description
"This module contains a collection of top level nodes for JUNOS genstate data.
Copyright (c) 2023 Juniper Networks, Inc.
All rights reserved.";
revision 2023-01-01 {
description "Junos: ";
}
grouping genstate-top {
description "Top-level grouping for JUNOS genstate data";
container genstate {
description "Encapsulating top-level state container for all JUNOS genstate data";
config false;
}
}
uses genstate-top;
}
최상위 genstate 모듈은 각 운영 상태 영역에 대해 게시된 모듈로 보강됩니다. Junos 디바이스에서 운영 명령 또는 RPC를 실행하면 디바이스는 최상위 요소에 포함된 XML 출력을 반환합니다. 루트 수준 태그 이름은 동봉된 데이터를 설명합니다. 예를 들어, show interfaces 명령은 태그로 둘러싸인 XML 출력을 반환합니다. <interface-information> 모듈은 genstate 모듈 이름과 파일 이름에 이 루트 태그 이름을 포함하여 모듈에 설명된 데이터를 쉽게 식별할 수 있습니다. 모듈 접두사는 루트 태그 이름을 기반으로 하므로 모듈마다 다릅니다.
예를 들어, 이 junos-genstate-interface-information 모듈은 일반적으로 Junos 명령 및 RPC 출력의 요소에 <interface-information> 포함되는 데이터를 설명합니다. 따라서 모델은 인터페이스 상태 데이터에 대한 텔레메트리 수집기가 구독할 수 있는 리소스 경로를 정의합니다.
module junos-genstate-interface-information {
namespace "http://yang.juniper.net/junos/genstate/interface-information";
prefix jgii;
import junos-genstate {
prefix jgs;
revision-date 2023-01-01;
}
import junos-common-types {
prefix jt;
revision-date 2023-01-01;
}
organization
"Juniper Networks, Inc.";
contact
"Juniper Networks, Inc.
1133 Innovation Way
Sunnyvale, CA
+1 888 314-5822
E-mail: yang-support@juniper.net";
description "Junos genstate data model for interface-information";
revision 2023-01-01 {
description "Junos: ";
}
grouping interface-information-top {
description "Top-level grouping";
container interface-information {
config false;
description "Top-level container";
list physical-interface {
leaf name {
type string;
description "Name of this item";
}
leaf oper-status {
type string;
description "Current operational state of the interface";
}
leaf local-index {
type int32;
description "Local kernel index for this interface";
}
leaf snmp-index {
type int32;
description "SNMP ifIndex for this interface";
}
container if-config-flags {
leaf iff-none {
type empty;
}
leaf iff-hardware-down {
type empty;
}
leaf iff-down {
type empty;
}
leaf iff-up {
type empty;
}
leaf iff-admin-down {
type empty;
}
leaf iff-admin-up {
type empty;
}
leaf iff-link-down {
type empty;
}
leaf iff-device-down {
type empty;
}
leaf iff-point-to-point {
type empty;
}
leaf iff-point-to-multipoint {
type empty;
}
leaf plp-to-clp {
type empty;
}
leaf iff-multiaccess {
type empty;
}
leaf iff-snmp-traps {
type empty;
}
leaf iff-looped {
type empty;
}
leaf iff-framing-conflict {
type empty;
}
leaf internal-flags {
type string;
description "Hexadecimal value of internal flag bits";
}
}
list logical-interface {
leaf name {
type string;
description "Name of this item";
}
leaf local-index {
type int32;
description "Local kernel index for this interface";
}
leaf snmp-index {
type int32;
description "SNMP ifIndex for this interface";
}
leaf generation {
type string;
description "Generation number used to distinguish between successive instances of this interface";
}
leaf description {
type string;
description "Description of this interface";
}
leaf link-address {
type string;
description "Link address on this logical interface";
}
leaf encapsulation {
type string;
description "Encapsulation on the logical interface";
}
leaf subunit {
type int32;
description "Subunit for this interface";
}
container if-config-flags {
leaf iff-none {
type empty;
}
leaf iff-hardware-down {
type empty;
}
leaf iff-down {
type empty;
}
leaf iff-up {
type empty;
}
leaf iff-admin-down {
type empty;
}
leaf iff-admin-up {
type empty;
}
leaf iff-link-down {
type empty;
}
leaf iff-device-down {
type empty;
}
leaf iff-point-to-point {
type empty;
}
leaf iff-point-to-multipoint {
type empty;
}
leaf plp-to-clp {
type empty;
}
leaf iff-multiaccess {
type empty;
}
leaf iff-snmp-traps {
type empty;
}
leaf iff-looped {
type empty;
}
leaf iff-framing-conflict {
type empty;
}
leaf internal-flags {
type string;
description "Hexadecimal value of internal flag bits";
}
}
leaf admin-status {
type string;
description "Desired state of the interface";
}
leaf oper-status {
type string;
description "Current operational state of the interface";
}
}
}
}
}
augment "/jgs:genstate" {
description "Adds interface-information to top-level genstate";
uses interface-information-top;
}
}
genstate 리소스 경로를 구성하는 방법
텔레메트리 수집기는 모델에 genstate 정의된 대로 다양한 리소스 경로를 구독하여 이 기능을 지원하는 디바이스에서 상태 데이터를 쿼리할 수 있습니다. genstate 이 모델은 다음 구문을 사용합니다.
origin:/root/operational-response-tag/optional-child-tags-to-resource
경로는 origingenstate, 라는 루genstate트 태그 및 운영 상태 영역에 대한 최상위 태그 이름을 사용합니다. 예를 들어 모든 interface-information 상태 데이터에 대한 리소스 경로를 구독 genstate 하려면 다음 경로를 사용합니다.
genstate:/genstate/interface-information
지원되는 자식 태그를 포함하여 특정 리소스에 대한 상태 데이터를 검색할 수 있습니다. 예를 들어, gNMI 클라이언트는 다음 경로를 사용하여 모든 인터페이스의 작동 상태를 검색할 수 있습니다.
genstate:/genstate/interface-information/physical-interface/oper-status
리소스 경로는 genstate 간단한 경로 식을 사용하여 데이터를 쿼리할 수 있습니다. 경로 기반 및 키 기반 필터를 사용할 수 있습니다. 표 1 은 지원되는 표현식을 간략하게 설명하고 몇 가지 샘플 리소스 경로를 제공합니다. 다른 쿼리 패턴은 지원되지 않습니다. 경로 표현식은 컨테이너, 리프 및 키 기반 필터링을 지원하며 gNMI에 대한 스키마 경로 인코딩 규칙에 설명된 대로 gNMI 규칙에 맞춰 정렬됩니다.
| 필터 유형 | 예제 경로 |
|---|---|
| 컨테이너 |
|
| 리프 |
|
| 목록 키 |
|
| 여러 목록 키 |
|
| 와일드카드 목록 키 |
|
경로 기반 필터는 컨테이너, 목록 또는 리프 노드를 선택할 수 있습니다. 키 기반 필터는 목록 요소의 하위 집합을 선택하고 정확한 값 사용, 와일드카드 지정 또는 값 생략을 지원합니다. 와일드카드를 지정하거나 목록 키 값을 생략하면 특정 목록 내의 모든 항목과 일치합니다.
항상 경로를 따옴표로 묶는 것이 좋습니다. 이 접근 방식은 대부분의 환경에서 구문 분석 오류를 방지하고 공백 또는 기타 특수 문자가 있는 경로를 처리합니다.
예를 들어 다음 명령은 전체 경로 주위에 따옴표를 사용합니다.
$ gnmic sub --mode stream --stream-mode sample --sample-interval 30s -a 198.51.100.1:32767 -u grpc-user -p secret --tls-ca certs/serverRootCA.crt --path "genstate:/genstate/license-summary-information/license-detail-usage-summary/feature-summary[name=FIB Scale]"
Genstate 모델 리소스 경로를 CLI 명령에 매핑
특정 genstate 리소스 경로에 해당하는 출력을 생성하는 CLI 명령을 확인할 수 있습니다. 명령을 검색하려면 운영 명령을 사용합니다 show system data-models genstate . 옵션을 포함 xpath-cli-command-mapping 하고 원하는 리소스에 대한 경로를 제공합니다.
user@host> show system data-models genstate xpath-cli-command-mapping resource-path
다음 예제에서는 리소스 경로에 해당하는 상태 데이터를 생성하는 명령을 검색합니다 genstate:/genstate/system-information/os-version .
user@host> show system data-models genstate xpath-cli-command-mapping genstate:/genstate/system-information/os-version Genstate xpath to CLI command mapping information (sometimes multiple commands might be mapped): > show system information
마찬가지로 다음 예제는 주어진 리소스 경로를 출력에 해당 정보를 포함하는 CLI 명령에 매핑합니다.
user@host> show system data-models genstate xpath-cli-command-mapping genstate:/genstate/interface-information/physical-interface/oper-status Genstate xpath to CLI command mapping information (sometimes multiple commands might be mapped): > show interfaces detail
genstate 경로에 목록 키 값을 포함할 수 있습니다. 명령 또는 해당 RPC를 실행하고 경로에 목록 키를 지정할 때 목록 키 값을 작은따옴표로 묶고 경로를 큰따옴표로 묶습니다. 다음 예제에서는 키를 지정하는 genstate 경로에 대한 명령을 요청합니다.
user@host> show system data-models genstate xpath-cli-command-mapping "genstate:/genstate/interface-information/physical-interface[name='et-1/0/1']/speed" Genstate xpath to CLI command mapping information (sometimes multiple commands might be mapped): > show interfaces et-1/0/1 brief
user@host> show system data-models genstate xpath-cli-command-mapping "genstate:/genstate/license-summary-information/license-detail-usage-summary/feature-summary[name='FIB Scale']" Genstate xpath to CLI command mapping information (sometimes multiple commands might be mapped): > show system license detail
마찬가지로 RPC를 <get-genstate-xpath-cli-command-mapping> 사용하여 동일한 정보를 검색할 수 있습니다.
<rpc>
<get-genstate-xpath-cli-command-mapping>
<xpath>genstate:/genstate/interface-information/physical-interface[name='et-1/0/1']/speed</xpath>
</get-genstate-xpath-cli-command-mapping>
</rpc>
디바이스가 특정 genstate 경로를 지원하지 않는 경우 명령은 다음 메시지를 반환합니다.
error: No command mapping information found for xpath xpath. The xpath does not seem to be exposed in genstate;
CLI 명령을 실행할 수 있는 권한이 없는 경우, 해당 genstate 구독 경로에 액세스할 수 없습니다. 유효한 권한이 있는 명령의 genstate 경로만 구독할 수 있습니다.
YANG 모듈 획득 genstate 방법
주니퍼 네트웍스 다운로드 사이트 또는 주 니퍼/yang GitHub 리포지토리에서 Junos 네이티브 YANG 모듈을 다운로드할 수 있습니다. 로컬 디바이스에서 모듈을 생성할 수도 있습니다. 모듈 다운로드 지침은 주니퍼 네트웍스 YANG 모듈 사용을 참조하십시오.
로컬 디바이스에서 genstate YANG 모듈 파일을 내보내려면 명령을 실행합니다. show system schema format yang module module 단일 genstate 모듈을 반환하도록 개별 모듈 이름을 지정하거나 모든 genstate 모듈을 반환하도록 지정합니다 all-genstate . 또한 파일의 출력 디렉터리도 지정해야 합니다.
user@host> show system schema format yang module module-name output-directory output-directory
예를 들어, 다음 명령은 디렉토리를 만들고, 모든 genstate 모듈을 해당 디렉토리에 쓰고, 디렉토리 목록을 봅니다.
user@host> file make-directory /var/tmp/yang user@host> show system schema format yang module all-genstate output-directory /var/tmp/yang user@host> file list /var/tmp/yang /var/tmp/yang: junos-genstate-arp-table-information@2025-01-01.yang junos-genstate-bgp-diagnostics-overview@2025-01-01.yang junos-genstate-bgp-diagnostics-warnings@2025-01-01.yang junos-genstate-bgp-fabric-advertise@2025-01-01.yang ...
원격 세션에서 YANG 모듈을 생성하려면 적절한 옵션과 함께 Junos OS RPC 또는 <get-schema> NETCONF 작업을 실행 <get-yang-schema> 합니다.
변경 내역 표
기능 지원은 사용 중인 플랫폼과 릴리스에 따라 결정됩니다. 기능 탐색기를 사용하여 플랫폼에서 기능이 지원되는지 확인합니다.
show system schema 디바이스에서 genstate YANG 데이터 모델을 볼 수 있습니다.