전화 접속 텔레메트리 연결 설정
이 절차를 사용하여 전화 접속 텔레메트리 연결을 설정할 수 있습니다. Junos 디바이스에서 수집하려는 센서 정보를 기반으로 gRPC 서비스, 스트리밍 서버 프로필, 센서 프로필, 내보내기 프로필 및 데이터 수집기를 구성합니다.
전화 접속 모드에서 주니퍼 디바이스는 외부 텔레메트리 수집기에 대한 연결을 시작하고 텔레메트리 데이터를 스트리밍합니다. 이 방법은 수집기가 연결을 시작할 필요 없이 디바이스가 데이터를 수집기로 푸시하므로 텔레메트리 데이터의 중앙 집중식 관리가 필요할 때 선호됩니다.
-
주니퍼 디바이스가 Junos Telemetry를 지원하는 호환 Junos OS 버전을 실행하는지 확인합니다.
-
선택한 전송 프로토콜(UDP 또는 TCP)과 호환되는 텔레메트리 수집기(예: 주니퍼 텔레메트리 수집기, Prometheus 또는 InfluxDB)를 설정합니다.
-
주니퍼 디바이스와 수집기 간의 네트워크 연결(예: gRPC의 경우 TCP 포트 50051 또는 UDP의 경우 사용자 지정 포트)을 확인합니다.
-
gRPC와 함께 TLS를 사용하는 경우 디바이스 및 수집기에 대한 인증서를 준비합니다.
참고: 릴리스 Junos OS 25.4R1 이전에는 계층 구조에서edit system services extension-service request-response grpc sslTLS 옵션이 구성되었습니다. Junos OS 릴리스 25.4R1부터는 PKI(Public Key Infrastructure) 명령을 사용하여 로컬 인증서 및 인증 기관(CA) 프로필을 로드합니다( 스트리밍 서버 프로필 구성을 참조하십시오). -
지원되는 센서는 Junos YANG 데이터 모델 탐색기 (Junos OS 릴리스 23.2R2-S2에서 소개) 또는 Junos Telemetry Sensor Explorer (릴리스 20.2R1에서 23.1R1까지)를 참조하십시오.
-
TCP 연결을 통한 전화 접속의 경우 IP 주소 및 라우팅 인스턴스를 구성하려면 TCP 연결을 통한 전화 접속을 위한 gRPC 서비스 구성을 참조하십시오.
-
전화 접속 텔레메트리 유형:
Junos Telemetry는 세 가지 유형의 전화 접속 연결을 지원합니다. 각 연결 유형은 서로 다른 메시지 형식을 사용하며 특정 디코딩 요구 사항을 갖습니다. 을 구성
dialout-type하려면 내보내기 프로필 구성을 참조하십시오.표 1: 전화 접속 텔레메트리 유형 다이얼 아웃 유형 CLI 옵션을 사용하여 구성 메시지 형식 데이터 모델 디코딩 요구 사항 전송 프로토콜 구독 유형 UDP를 통한 전화 접속(Protobuf Compact Format, 주니퍼 독점) native-udp-compactprotobuf(.gpb) 형식의 센서 데이터. Protobuf 메시지는 압축된 형식입니다. Junos 네이티브 및 OpenConfig 모델. 디코딩을 위해 Junos 전용 유틸리티, 텔레메트리_top.proto 및 센서 프로토 파일을 사용합니다. UDP 스트림 UDP를 통한 전화 접속(Protobuf Structured Format) native-udp-gpbProtobuf 메시지는 구조화된 자체 설명 키-값 쌍으로 구성됩니다. 모든 데이터 모델 메시지에는 전체 키 이름 및 값 쌍 정보가 포함되어 있으므로 수집기가 텔레메트리 데이터를 처리하거나 소비하기 위한 데이터 모델이 필요하지 않습니다. 메시지 구조는 jnx_gnmi_over_udp.proto 파일에 정의되어 있습니다. UDP SAMPLE 모드로 스트림 TCP를 통한 전화 접속(Protobuf 구조화된 형식) native-grpc-gpbProtobuf 메시지는 구조화된 범용 키/값 형식입니다. 모든 데이터 모델 디코딩을 위해 gnmi.proto 및 GnmiJuniperTelemetryHeader.proto를 사용합니다. TCP 스트림 참고: 릴리스 25.4부터 계층 아래의[edit services analytics export-profile name]및transportformat옵션이 더 이상 사용되지 않습니다.-
Protobuf 컴팩트 형식:
이 형식은 자세한 키-값 표현을 포함하지 않으므로 '압축'으로 간주됩니다. 그러나 텔레메트리 데이터를 디코딩하려면 최신 버전의 protobuf 파일을 다운로드해야 합니다.
-
Protobuf 구조화 형식:
이 형식은 Protobuf 메시지 내에서 자체 설명 키-값 쌍을 사용합니다. 각 메시지에는 완전한 센서 데이터 이름과 값이 포함되어 있으며 캔 수집기는 데이터 모델 파일 없이도 센서 데이터를 처리합니다.
-
특정 시스템 리소스를 모니터링하도록 센서를 구성합니다. 각 센서 구성에는 세 가지 주요 구성 요소가 필요합니다.
-
스트리밍 서버 프로필 - 대상 IP 주소 및 포트 번호를 포함하여 데이터 및 관련 매개 변수를 수집하기 위한 서버를 지정합니다. 시작하기 전에 주니퍼 네트웍스 디바이스에서 인밴드 관리 인터페이스를 사용하는 서버로의 연결을 구성합니다.
-
센서 프로필 - 시스템 리소스를 모니터링할 수 있으며 데이터를 수신하는 데 사용되는 대상 서버와 같은 관련 매개 변수를 설정할 수 있습니다.
-
내보내기 프로파일 - 수집된 데이터를 내보내기 위한 속성을 지정합니다.
센서 프로필을 구성하기 전에 하나 이상의 내보내기 프로필과 하나 이상의 스트리밍 서버를 구성하는 것이 좋습니다. 그런 다음 내보내기 프로필 및 스트리밍 서버를 센서 프로필 구성과 연결할 수 있습니다.
통계 내보내기를 활성화하려면 [edit services analytics] 계층 수준에서 and sensor 문을 포함 export-profile 합니다. 센서 구성에는 수집기 이름, 내보내기 프로필 이름 및 리소스 경로가 포함되어야 합니다.
리소스 경로 예: /interfaces/interface[name='fxp0'].
UDP를 통한 전화 접속을 위한 내보내기 프로필을 구성할 때 {'dscp', 'forwarding-class', 'payload-size'}와 같은 내보내기 프로필 매개 변수는 적용되지 않습니다. 이러한 옵션을 구성하면 오류가 발생합니다.
아래 나열된 절차에 따라 전화 접속 텔레메트리 연결을 설정합니다.
스트리밍 서버 프로필 구성
서버 프로필은 내보낸 텔레메트리 데이터를 수집하는 서버의 매개 변수를 정의합니다. 둘 이상의 서버 프로필을 정의할 수 있습니다. 동일한 서버 프로필을 둘 이상의 센서 프로필과 연결할 수도 있습니다. 둘 이상의 서버를 특정 센서와 연결할 수 있습니다.
UDP를 통한 텔레메트리 데이터 스트리밍 지침:
- UDP를 통해 소스 애플리케이션에서 수집기로 직접 텔레메트리 데이터 스트림. 구성은 수집기에 대한 연결 유형에 따라 다릅니다. 수집기는 관리 인터페이스 또는 WAN 인터페이스를 통해 연결할 수 있어야 합니다.
- 라인 카드 센서의 경우, 원격 주소가 WAN 인터페이스를 통해 도달할 수 있는 경우 라인 카드는 데이터를 수집기로 직접 내보낼 수 있습니다. 라인 카드 센서의 관리 인터페이스를 통해 텔레메트리 데이터를 내보내야 하는 경우 데이터를 라우팅 엔진으로 라우팅한 다음 수집기로 보냅니다.
내보낸 텔레메트리 데이터를 수집하기 위해 스트리밍 서버의 프로필을 정의하려면 다음을 수행합니다.
센서 프로필 구성
센서 프로필은 데이터를 모니터링하고 스트리밍할 시스템 리소스의 매개 변수를 정의합니다. 각 센서 프로파일에 대해 모니터링할 시스템 자원을 하나만 활성화할 수 있습니다. 모니터링하려는 각 시스템 리소스에 대해 다른 센서 프로필을 구성합니다. 그러나 동일한 시스템 리소스를 모니터링하기 위해 둘 이상의 센서를 구성할 수 있습니다. 예를 들어, 동일한 시스템 리소스에서 데이터를 내보내기 위해 다른 매개 변수를 구성하는 것을 고려하십시오.
센서 프로필을 구성하려면:
내보내기 프로필 구성
내보내기 프로필은 Junos Telemetry 메커니즘을 통해 생성된 데이터의 내보내기 프로세스 매개 변수를 정의합니다. 하나 이상의 내보내기 프로필을 구성해야 하며 여러 개의 내보내기 프로필을 구성할 수도 있습니다. 각 내보내기 프로필은 여러 센서 프로필과 연결할 수 있습니다. 그러나 하나의 내보내기 프로파일만 특정 센서 프로파일과 연결할 수 있습니다.
플랫폼별 내보내기 프로필 동작
기능 탐색기를 사용하여 특정 기능에 대한 플랫폼 및 릴리스 지원을 확인하십시오.
다음 표를 사용하여 플랫폼의 플랫폼별 동작을 검토하십시오.
| 플랫폼 |
차이 |
|---|---|
| MX 시리즈 |
MX 시리즈 라우터에서는 내보내기 프로필에 대한 패킷 손실 우선순위를 지정할 수 있습니다. 따라서 각 센서에 적절한 패킷 손실 우선순위를 적용할 수 있습니다. 손실 우선순위 설정은 혼잡 기간 동안 네트워크에서 어떤 패킷이 삭제되는지 결정하는 데 도움이 됩니다. 이전에는 내보내기 프로필에서 포워딩 클래스와 DSCP 값만 지정할 수 있었습니다. 지원되는 패킷 손실 우선 순위 설정은 |
내보내기 프로필을 구성하려면:
데이터 수집기 구성
Junos 텔레메트리 인터페이스 센서 구성 확인
센서 경로 선택
센서 탐색기 및 센서 경로 선택 지침
주니퍼 네트웍스 Junos YANG 데이터 모델 탐색기를 사용하여 지원되는 모든 리소스 경로, 해당 리프 및 이를 지원하는 디바이스 플랫폼을 확인할 수 있습니다.
다른 텔레메트리 센서와 일부 레거시 센서에 대한 특정 정보를 검색하고 보려면 레거시 센서 경로를 참조하십시오.
센서 경로 구성에 대한 지침 및 모범 사례에 대한 자세한 내용은 센서 경로 탐색을 참조하십시오.
UNIX 공공 서비스 설비를 사용한 Junos 텔레메트리 인터페이스 데이터 디코딩
UNIX 유틸리티를 사용하여 주니퍼 네트웍스 디바이스에서 데이터를 스트리밍하는 서버 또는 수집기에서 Junos Telemetry Interface 데이터를 디코딩할 수 있습니다. 이 섹션의 예제에서는 스트리밍된 데이터의 단일 패킷을 디코딩하는 방법을 보여줍니다.
데이터 디코딩을 위한 수집기 준비
이 예에는 다음이 필요합니다.
-
Netcat(nc) 유틸리티가 있는 UNIX OS.
-
프로토콜 버퍼 컴파일러.
-
Junos Telemetry Interface 프로토콜 버퍼 파일.
이 절차에서는 Ubuntu OS를 사용하여 데이터를 디코딩하도록 수집기를 준비하는 방법을 보여줍니다.
-
Netcat 유틸리티를 설치합니다.
sudo apt-get install netcat
-
프로토콜 버퍼 컴파일러를 설치합니다.
sudo apt-get install protobuf-compiler
-
프로토콜 버퍼 개발자 라이브러리를 설치합니다.
sudo apt-get install libprotobuf-dev
-
라이브러리 파일이 설치되었는지 확인합니다.
텔레메트리 데이터 디코딩 오류를 방지하려면 protobuf(proto) 파일과 DUT 소프트웨어 이미지가 동일한 릴리스 버전에서 제공되었는지 확인합니다.ls /usr/include/google/protobuf/descriptor.proto /usr/include/google/protobuf/descriptor.proto
-
최신 버전의 Junos Telemetry 인터페이스 프로토콜 버퍼 파일을 다운로드하여 설치합니다. OpenConfig 및 YANG 모델 파일을 다운로드하려면 웹 브라우저를 열고 https://www.hpe.com/us/en/networking/hpe-juniper-networking.html 로 이동한 다음 지원을 클릭하여 https://support.juniper.net/support/ 에서 주니퍼 지원 포털을 엽니다. 다운로드 탭을 선택하고 제품 이름 입력 필드에 제품 이름을 입력한 다음 제품 찾기를 클릭하고 필요한 제품을 검색하여 선택한 다음 드롭다운 목록에서 적절한 Junos OS및 소프트웨어 버전을 선택합니다. 같은 페이지에서 아래로 스크롤하여 + 도구 섹션을 확장한 다음 필요한 파일(OpenConfig 모델용 JUNOS Telemetry Interface 데이터 모델 파일 및 YANG 파일용 YANG 모듈 )을 다운로드합니다.
참고: 텔레메트리 데이터 디코딩 오류를 방지하려면 protobuf(proto) 파일과 소프트웨어 이미지가 동일한 릴리스 버전에서 제공되었는지 확인합니다.참고: 주니퍼 네트웍스는 주니퍼 GitHub 리포지토리에서 다운로드할 수 있는 Junos 디바이스용 YANG 모듈을 게시합니다. 릴리스 23.4부터는 구성 및 텔레메트리 YANG 모델이 병합되어 주니퍼 GitHub 리포지토리에 게시됩니다. 여기에는 구성, RPC 및 텔레메트리 모델에 대한 YANG 정의가 포함됩니다.참고:추출된 파일의 위치를 기록해 두십시오.
수집기의 데이터 디코딩
이 절차에서는 데이터를 캡처하고, 원시 데이터를 디코딩하고, 프로토콜 버퍼 파일을 사용하여 데이터를 디코딩하는 방법을 보여줍니다.
데이터를 디코딩하려면:
-
데이터를 캡처합니다.
UDP 리스너 모드에서 대상 스트리밍 텔레메트리 서버 또는 수집기에서 netcat을 실행하여 들어오는 모든 데이터그램을 파일에 저장합니다. 주니퍼 네트웍스 디바이스의 스트리밍 서버 프로필에 구성된 대상 포트 번호를 사용합니다.
nc -ul 0.0.0.0 20000 > data.gpb
참고:이 명령은 데이터그램을 라는
data.gpb파일에 저장합니다. 이 프로그램을 실행하여 데이터를 캡처합니다. 데이터 수신을 중지하고 싶을 때는 단절 신호(Control + C)를 보내 프로그램을 중지합니다 -
원시 데이터를 디코딩합니다.
참고:이 단계는 선택 사항입니다. 데이터의 인코딩된 메시지 유형을 알고 있는 경우에는 필요하지 않습니다.
디코딩 요구 사항은 구성된
dial-out유형에 따라 다릅니다.-
UDP를 통한 전화 접속(Protobuf Compact Format, 주니퍼 독점): 디코딩을 위해 Junos 전용 유틸리티, 텔레메트리_top.proto 및 센서 프로토 파일을 사용합니다.
-
UDP를 통한 전화 접속(Protobuf 구조화된 형식): 메시지에는 전체 키 이름 및 값 쌍 정보가 포함되어 있으므로 수집기는 텔레메트리 데이터를 처리하거나 사용하기 위한 데이터 모델이 필요하지 않습니다. 메시지 구조는 jnx_gnmi_over_udp.proto 파일에 정의되어 있습니다.
-
TCP를 통한 전화 접속(Protobuf 구조화된 형식): 디코딩을 위해 gnmi.proto 및 GnmiJuniperTelemetryHeader.proto 파일을 사용합니다.
다음 예제는 UDP(Protobuf Compact Format, 주니퍼 독점) 연결을 통한 전화 접속을 위해 파일에서
data.gpb메시지를 디코딩하는 방법을 보여줍니다.protoc --decode_raw < ../data.gpb 1: "hillrock:160.1.1.25" 2: 0 4: "S1:/junos/system/linecard/interface/logical/usage/:/junos/system/linecard/interface/logical/usage/:PFE" 5: 65265 6: 1477686534474 7: 1 8: 1 101 { 2636 { 7 { 1 { 1: "et-0/0/4:2.32767" 2: 1477642750 3: 813 4 { 12: 0x37363732332e3165 } . . .아래
2636의 다음 중첩 구조는 센서 유형을 식별합니다. 숫자 값은2636파일에 정의된 메시지를 식별JuniperNetworksSensor합니다.telemetry_top.proto이 예에서 숫자 식별자는7파일에 정의된 메시지에LogicalPort해당합니다.logical_port.proto다음 단계에서 이 정보를 사용하여 더 자세한 출력을 생성합니다. -
-
필드 이름을 포함하도록 메시지를 디코딩합니다.
프로토콜 버퍼 컴파일러를 디코딩 옵션으로 실행합니다. 또한 최상위 메시지 유형(
TelemetryStream)과 메시지 정의logical_port.proto가 있는 파일을 지정합니다. 또한 gpb(Goggle 프로토콜 버퍼) 라이브러리도 포함해야 합니다.protoc --decode TelemetryStream logical_port.proto -I /usr/include -I . < data.gpb system_id: "hillrock:160.1.1.25" component_id: 0 sensor_name: "S1:/junos/system/linecard/interface/logical/usage/:/junos/system/linecard/interface/logical/usage/:PFE" sequence_number: 65268 timestamp: 1477686536484 version_major: 1 version_minor: 1 enterprise { [juniperNetworks] { [jnprLogicalInterfaceExt] { interface_info { if_name: "et-0/0/4:2.32767" init_time: 1477642750 snmp_if_index: 813 parent_ae_name: "ae1.32767" ingress_stats { if_packets: 0 if_octets: 0 } egress_stats { if_packets: 0 if_octets: 0 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/7:3.0" init_time: 1477642750 snmp_if_index: 520 parent_ae_name: "ae0.0" ingress_stats { if_packets: 61203309 if_octets: 6487548454 } egress_stats { if_packets: 87416547 if_octets: 9266153982 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.0" init_time: 1477642750 snmp_if_index: 2512 ingress_stats { if_packets: 26266247 if_octets: 2784214806 } egress_stats { if_packets: 26247215 if_octets: 2781829290 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.1" init_time: 1477642750 snmp_if_index: 2522 ingress_stats { if_packets: 26266249 if_octets: 2784214972 } egress_stats { if_packets: 26249115 if_octets: 2781935590 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.2" init_time: 1477642750 snmp_if_index: 2523 ingress_stats { if_packets: 26266248 if_octets: 2784214912 } egress_stats { if_packets: 26249106 if_octets: 2781935086 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.3" init_time: 1477642750 snmp_if_index: 2524 ingress_stats { if_packets: 26266248 if_octets: 2784214820 } egress_stats { if_packets: 26248520 if_octets: 2781902320 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.4" init_time: 1477642750 snmp_if_index: 2525 ingress_stats { if_packets: 26266247 if_octets: 2784214760 } egress_stats { if_packets: 26247302 if_octets: 2781834112 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.5" init_time: 1477642750 snmp_if_index: 2526 ingress_stats { if_packets: 26266247 if_octets: 2784214760 } egress_stats { if_packets: 26247209 if_octets: 2781828904 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.6" init_time: 1477642750 snmp_if_index: 2527 ingress_stats { if_packets: 26266248 if_octets: 2784214820 } egress_stats { if_packets: 26247196 if_octets: 2781828226 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.7" init_time: 1477642750 snmp_if_index: 2528 ingress_stats { if_packets: 26266247 if_octets: 2784214760 } egress_stats { if_packets: 26247203 if_octets: 2781828618 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.8" init_time: 1477642750 snmp_if_index: 2529 ingress_stats { if_packets: 26266247 if_octets: 2784214760 } egress_stats { if_packets: 26247225 if_octets: 2781829850 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.9" init_time: 1477642750 snmp_if_index: 2530 ingress_stats { if_packets: 26266247 if_octets: 2784214760 } egress_stats { if_packets: 26247209 if_octets: 2781828954 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.32767" init_time: 1477642750 snmp_if_index: 648 ingress_stats { if_packets: 4 if_octets: 240 } egress_stats { if_packets: 0 if_octets: 0 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/4:2.32767" init_time: 1477642750 snmp_if_index: 813 parent_ae_name: "ae1.32767" ingress_stats { if_packets: 0 if_octets: 0 } egress_stats { if_packets: 0 if_octets: 0 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/7:3.0" init_time: 1477642750 snmp_if_index: 520 parent_ae_name: "ae0.0" ingress_stats { if_packets: 61206122 if_octets: 6487846632 } egress_stats { if_packets: 87420567 if_octets: 9266580102 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.0" init_time: 1477642750 snmp_if_index: 2512 ingress_stats { if_packets: 26267458 if_octets: 2784343172 } egress_stats { if_packets: 26248420 if_octets: 2781957020 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.1" init_time: 1477642750 snmp_if_index: 2522 ingress_stats { if_packets: 26267460 if_octets: 2784343338 } egress_stats { if_packets: 26250320 if_octets: 2782063320 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.2" init_time: 1477642750 snmp_if_index: 2523 ingress_stats { if_packets: 26267459 if_octets: 2784343278 } egress_stats { if_packets: 26250311 if_octets: 2782062816 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.3" init_time: 1477642750 snmp_if_index: 2524 ingress_stats { if_packets: 26267460 if_octets: 2784343292 } egress_stats { if_packets: 26249725 if_octets: 2782030050 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.4" init_time: 1477642750 snmp_if_index: 2525 ingress_stats { if_packets: 26267459 if_octets: 2784343232 } egress_stats { if_packets: 26248507 if_octets: 2781961842 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.5" init_time: 1477642750 snmp_if_index: 2526 ingress_stats { if_packets: 26267459 if_octets: 2784343232 } egress_stats { if_packets: 26248414 if_octets: 2781956634 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.6" init_time: 1477642750 snmp_if_index: 2527 ingress_stats { if_packets: 26267460 if_octets: 2784343292 } egress_stats { if_packets: 26248401 if_octets: 2781955956 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.7" init_time: 1477642750 snmp_if_index: 2528 ingress_stats { if_packets: 26267459 if_octets: 2784343232 } egress_stats { if_packets: 26248408 if_octets: 2781956348 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.8" init_time: 1477642750 snmp_if_index: 2529 ingress_stats { if_packets: 26267459 if_octets: 2784343232 } egress_stats { if_packets: 26248430 if_octets: 2781957580 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.9" init_time: 1477642750 snmp_if_index: 2530 ingress_stats { if_packets: 26267459 if_octets: 2784343232 } egress_stats { if_packets: 26248414 if_octets: 2781956684 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.32767" init_time: 1477642750 snmp_if_index: 648 ingress_stats { if_packets: 4 if_octets: 240 } egress_stats { if_packets: 0 if_octets: 0 } op_state { operational_status: "up" } } } } }
수집기에서 Junos Telemetry Interface UDP 데이터 디코딩
수집기는 수신 데이터를 읽기 위해 원격 주소 또는 포트 조합에서 리스너를 시작해야 합니다. UDP(Protobuf Compact Format, 주니퍼 독점) 연결을 통한 전화 접속의 경우, 텔레메트리_top.proto 및 센서 프로토 파일을 사용하여 수신 데이터를 디코딩할 수 있습니다. UDP(Protobuf Structured Format) 연결을 통한 전화 접속의 경우, 메시지에는 전체 키 이름 및 값 쌍 정보가 포함되므로 수집기는 텔레메트리 데이터를 처리하거나 소비하기 위한 데이터 모델이 필요하지 않습니다. 메시지 구조는 jnx_gnmi_over_udp.proto 파일에 정의되어 있습니다.
디코딩 절차를 단순화하기 위해 수집기는 텔레메트리 소프트웨어 패키지의 일부로 제공되는 모든 프로토 파일을 로드하여 수신 데이터를 디코딩할 수 있습니다.
OpenConfig 및 YANG 모델 파일을 다운로드하려면 웹 브라우저를 열고 https://www.hpe.com/us/en/networking/hpe-juniper-networking.html 로 이동한 다음 지원을 클릭하여 https://support.juniper.net/support/ 에서 주니퍼 지원 포털을 엽니다. 다운로드 탭을 선택하고 제품 이름 입력 필드에 제품 이름을 입력한 다음 제품 찾기를 클릭하고 필요한 제품을 검색하여 선택한 다음 드롭다운 목록에서 적절한 Junos OS및 소프트웨어 버전을 선택합니다. 같은 페이지에서 아래로 스크롤하여 + 도구 섹션을 확장한 다음 필요한 파일(OpenConfig 모델용 JUNOS Telemetry Interface 데이터 모델 파일 및 YANG 파일용 YANG 모듈 )을 다운로드합니다.
- 관리 및 WAN 인터페이스 모두에서 스트리밍 데이터를 확인합니다. 스트리밍 서버 프로필에서 적절한 주소를 지정합니다.
- 열거형 및 float는 UDP 스트리밍을 위한 문자열로 스트리밍됩니다. 열거형은 gNMI가 동일한 형식을 사용하므로 문자열로 유지됩니다.
- float 데이터 유형의 처리는 향후 릴리스에 대한 범위가 지정됩니다.
텔레메트리 데이터가 UDP를 통해 스트리밍되는 경우 데이터가 올바르게 디코딩되고 알 수 없는 필드가 수집기에서 디코딩되지 않는지 확인합니다.
UDP를 통해 텔레메트리 데이터를 스트리밍하는 동안 관찰되는 몇 가지 문제는 다음과 같습니다.
- 잘못된 디코딩: 잘못된 디코딩은 텔레메트리 데이터가 UDP를 통해 올바르게 스트리밍되지 않음을 의미합니다. 다음 예에서 굵게 강조 표시된 데이터는 데이터가 올바르게 디코딩되지 않았음을 나타냅니다. 이 동작은 잘못된 인코딩 또는 잘못된 프로토 파일 패키징으로 인해 발생합니다.
system_id: "r02.dtw01.icn" component_id: 65535 sensor_name: "mpls:/network-instances/network-instance/mpls:/network-instances/network-instance/mpls:rpd" sequence_number: 2421 timestamp: 1715024560793 version_major: 1 version_minor: 0 enterprise: { [juniperNetworks]: { [jnpr_network_instances_rsvp_ext]: { network_instance: { name: "master" mpls: { 153 { 151 { 152{ 151{ 51: "r02.dtw01.icn-r01.bos02.icn-01" 152{ 151{ 51: "AUTO" 52: 0 53: 12873154 } 152{ 151{ 51:1 52:200000 53: 0 54: 300 55: 1 61: 1549061 } 152 {올바르게 디코딩된 데이터의 예는 다음과 같습니다.
system_id: "r0-RE0" component_id: 65535 sub_component_id: 0 sensor_name: "test_chassisd:/network-instances/:/network-instances/:rpd" sequence_number: 0 timestamp: 1719126223900 version_major: 1 version_minor: 0 enterprise { [juniperNetworks] { [jnpr_network_instances_ni_226_ext] { network_instance { name: "DEFAULT" protocols { protocol { identifier: "STATIC" name: "DEFAULT" static_routes { static { prefix: "10.0.0.0/8" state { prefix: "10.0.0.0/8" set_tag: "0" } next_hops { next_hop { index: "1" state { index: "1" next_hop: "10.220.127.254" metric: 0 recurse: false } interface_ref { state { interface: "re0:mgmt-0" subinterface: 0 } } } } } - 불완전한 데이터 스트리밍: 불완전한 데이터의 스트리밍은 출력 파일의 데이터 유효성 검사를 통해 확인해야 합니다.
변경 내역 표
기능 지원은 사용 중인 플랫폼과 릴리스에 따라 결정됩니다. 기능 탐색기를 사용하여 플랫폼에서 기능이 지원되는지 확인합니다.
export-profile CLI 옵션이
dialout-type 도입되었습니다.
format and
transport 옵션은 더 이상 사용되지 않습니다.