SNMP 스크립트에서 지원되는 데이터 유형 이해
Junos 디바이스의 사용자 지정 OID에 대한 정보를 반환하는 SNMP 스크립트에서 지원하는 데이터 유형을 이해합니다.
데이터 유형 개요
SNMP 스크립트는 SNMP 관리자가 SNMP 스크립트에 매핑된 개체 식별자(OID)에 대해 SNMP 에이전트로부터 정보를 요청할 때 자동으로 트리거됩니다. SLAX 및 XSLT 스크립트는 요소에서 요청된 개체에 대한 정보를 반환합니다.<snmp-script-results> Python 스크립트는 함수를 실행하여 정보를 반환합니다.jcs.emit_snmp_attributes()
SNMP 스크립트는 요청된 개체를 반환할 때 OID, 유형 및 값을 제공합니다. SNMP 스크립트는 표준 SNMP 데이터 유형을 지원합니다. 표 1 은 지원되는 데이터 유형을 간략하게 보여줍니다.
| 데이터 유형 | 설명 | 예시 |
|---|---|---|
| 카운터32 |
32비트 부호 없는 정수. 범위: 0에서 4,294,967,295까지 |
4294967295 |
| 카운터64 |
64비트 부호 없는 정수. 범위: 0에서 18,446,744,073,709,551,615 |
18446744073709551615 |
| 정수 |
32비트 부호 있는 정수. 범위: -2,147,483,647 - 2,147,483,647 |
-1000 |
| 옥텟 문자열 |
텍스트 또는 이진 데이터를 나타낼 수 있는 바이트 시퀀스입니다. 출력 문자열에서 각 ASCII 문자의 16진수 표현을 지정합니다. 공백을 사용하여 각 16진수 값을 구분합니다. |
64 65 76 69 63 65 20 72 65 62 6f 6f 74 65 64 |
| 서명되지 않음32 |
32비트 부호 없는 정수. 범위: 0에서 4,294,967,295까지 |
896 |
예: SNMP 스크립트에서 다른 데이터 유형을 가진 객체 내보내기
이 예는 데이터 유형이 다른 객체에 대한 정보를 내보내는 SNMP 스크립트를 보여줍니다.
요구 사항
-
Junos OS를 실행하는 디바이스 또는 Junos OS Evolved를 실행하는 디바이스입니다.
-
SNMP는 디바이스에 구성됩니다.
개요 및 SNMP 스크립트
이 예에서는 여러 OID를 일치시키고 처리하는 SNMP 스크립트를 제공합니다. 스크립트는 OID, 데이터 유형 및 값을 포함하여 요청된 개체에 대한 정보를 반환합니다. 스크립트는 다른 데이터 유형을 사용하는 개체에 대한 OID를 처리합니다.
이 예에서는 SLAX 및 Python으로 SNMP 스크립트를 제공합니다. SLAX SNMP 스크립트는 요소를 사용하여 요청된 개체에 대한 정보를 반환합니다. <snmp-script-results> Python SNMP 스크립트는 함수를 실행하여 요청된 객체에 대한 정보를 반환합니다 jcs.emit_snmp_attributes() .
SLAX 구문
version 1.2;
ns junos = "http://xml.juniper.net/junos/*/junos";
ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
ns dyn = "http://exslt.org/dynamic";
ns snmp extension = "http://exslt.org/functions";
match / {
var $snmp-action = snmp-script-input/snmp-action;
var $snmp-oid = snmp-script-input/snmp-oid;
expr jcs:syslog(8, "snmp-action = ", $snmp-action, " snmp-oid = ", $snmp-oid);
if ($snmp-action == 'get') {
if($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.1.8') {
<snmp-script-results> {
<snmp-oid> $snmp-oid;
<snmp-type> "Counter32";
<snmp-value> "4294967295";
}
}
else if($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.1.9') {
<snmp-script-results> {
<snmp-oid> $snmp-oid;
<snmp-type> "Counter64";
<snmp-value> "18446744073709551615";
}
}
else if ($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.2.2') {
<snmp-script-results> {
<snmp-oid> $snmp-oid;
<snmp-type> "INTEGER";
<snmp-value> "-1000";
}
}
else if ($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.2.3') {
<snmp-script-results> {
<snmp-oid> $snmp-oid;
<snmp-type> "Integer32";
<snmp-value> "3000";
}
}
else if ($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.3.5') {
<snmp-script-results> {
<snmp-oid> $snmp-oid;
<snmp-type> "Unsigned32";
<snmp-value> "999";
}
}
else if ($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.8.8') {
<snmp-script-results> {
<snmp-oid> $snmp-oid;
<snmp-type> "OCTET STRING";
<snmp-value> "64 65 76 69 63 65 20 72 65 62 6f 6f 74 65 64";
}
}
}
else if ($snmp-action == 'get-next') {
if($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.1.8') {
<snmp-script-results> {
<snmp-oid> ".1.3.6.1.4.1.2636.13.61.1.1.1.8.1";
<snmp-type> "Counter32";
<snmp-value> "4294967260";
}
}
else if($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.1.9') {
<snmp-script-results> {
<snmp-oid> ".1.3.6.1.4.1.2636.13.61.1.1.1.9.1";
<snmp-type> "Counter64";
<snmp-value> "18446744073709551613";
}
}
else if ($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.2.2') {
<snmp-script-results> {
<snmp-oid> ".1.3.6.1.4.1.2636.13.61.1.1.2.2.1";
<snmp-type> "Integer";
<snmp-value> "-2000";
}
}
else if ($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.2.3') {
<snmp-script-results> {
<snmp-oid> ".1.3.6.1.4.1.2636.13.61.1.1.2.3.1";
<snmp-type> "Integer32";
<snmp-value> "4000";
}
}
else if ($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.3.5') {
<snmp-script-results> {
<snmp-oid> ".1.3.6.1.4.1.2636.13.61.1.1.3.5.1";
<snmp-type> "Unsigned32";
<snmp-value> "2040";
}
}
else if ($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.1.8.8') {
<snmp-script-results> {
<snmp-oid> ".1.3.6.1.4.1.2636.13.61.1.1.8.8.1";
<snmp-type> "OCTET STRING";
<snmp-value> "64 65 76 69 63 65 20 72 65 62 6f 6f 74 65 64";
}
}
}
}
Python 구문
import jcs
def main():
snmp_action = jcs.get_snmp_action()
snmp_oid = jcs.get_snmp_oid()
jcs.syslog("8", "snmp_action = ", snmp_action, " snmp_oid = ", snmp_oid)
if snmp_action == 'get':
if snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.1.8':
jcs.emit_snmp_attributes(snmp_oid, "Counter32", "4294967295")
elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.1.9':
jcs.emit_snmp_attributes(snmp_oid, "Counter64", "18446744073709551615")
elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.2.2':
jcs.emit_snmp_attributes(snmp_oid, "INTEGER", "-1000")
elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.2.3':
jcs.emit_snmp_attributes(snmp_oid, "Integer32", "3000")
elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.3.5':
jcs.emit_snmp_attributes(snmp_oid, "Unsigned32", "999")
elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.8.8':
jcs.emit_snmp_attributes(snmp_oid, "OCTET STRING", "64 65 76 69 63 65 20 72 65 62 6f 6f 74 65 64")
elif snmp_action == 'get-next':
if snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.1.8':
jcs.emit_snmp_attributes(".1.3.6.1.4.1.2636.13.61.1.1.1.8.1", "Counter32", "4294967260")
elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.1.9':
jcs.emit_snmp_attributes(".1.3.6.1.4.1.2636.13.61.1.1.1.9.1", "Counter64", "18446744073709551613")
elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.2.2':
jcs.emit_snmp_attributes(".1.3.6.1.4.1.2636.13.61.1.1.2.2.1", "INTEGER", "-2000")
elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.2.3':
jcs.emit_snmp_attributes(".1.3.6.1.4.1.2636.13.61.1.1.2.3.1", "Integer32", "4000")
elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.3.5':
jcs.emit_snmp_attributes(".1.3.6.1.4.1.2636.13.61.1.1.3.5.1", "Unsigned32", "2040")
elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.1.8.8':
jcs.emit_snmp_attributes(".1.3.6.1.4.1.2636.13.61.1.1.8.8.1", "OCTET STRING", "64 65 76 69 63 65 20 72 65 62 6f 6f 74 65 64")
if __name__ == '__main__':
main()
구성
절차
스크립트를 다운로드하고 활성화하려면 다음을 수행합니다.
스크립트를 텍스트 파일에 복사하고 파일 이름을 snmp-script-data-types.slax 또는 snmp-script-data-types.py(해당)합니다.
디바이스의 /var/db/scripts/snmp 디렉터리에 스크립트를 다운로드합니다.
참고:서명되지 않은 Python 스크립트는 루트 또는 Junos OS
super-user로그인 클래스의 사용자가 소유해야 하며 파일 소유자만 파일에 대한 쓰기 권한을 가질 수 있습니다.-
스크립트가 Python으로 작성된 경우 또는
language python3문을 적절하게 구성language python합니다.[edit system scripts] user@host# set language python3
계층 수준에서
[edit system scripts snmp]스크립트 언어에 적합한 파일 이름과 확장명으로 SNMP 스크립트를 구성합니다.[edit system scripts] user@host# edit snmp file snmp-script-data-types.py
SNMP 스크립트의 계층 아래에서 스크립트가 정보를 반환하는 OID를 구성합니다.
[edit system scripts snmp file snmp-script-data-types.py] user@host# set oid .1.3.6.1.4.1.2636.13.61.1.1.1.8 user@host# set oid .1.3.6.1.4.1.2636.13.61.1.1.1.9 user@host# set oid .1.3.6.1.4.1.2636.13.61.1.1.2.2 user@host# set oid .1.3.6.1.4.1.2636.13.61.1.1.2.3 user@host# set oid .1.3.6.1.4.1.2636.13.61.1.1.3.5 user@host# set oid .1.3.6.1.4.1.2636.13.61.1.1.8.8
스크립트가 Python으로 작성된 경우 스크립트가 실행되는 액세스 권한에 따라 사용자를 구성합니다.
[edit system scripts snmp file snmp-script-data-types.py] user@host# set python-script-user username
예를 들어:
[edit system scripts snmp file snmp-script-data-types.py] user@host# set python-script-user admin
참고:이
python-script-user문을 구성하지 않으면, 기본적으로 Junos OS는 사용자 및 그룹nobody의 액세스 권한에 따라 Python SNMP 스크립트를 실행합니다.명령을 실행
commit하여 구성을 커밋합니다.[edit system scripts] user@host# commit
결과
구성 모드에서 명령을 입력하여 구성을 확인합니다. show system scripts 구성 문은 스크립트 언어에 따라 다릅니다.
[edit]
user@host# show system scripts
language python3;
snmp {
file snmp-script-data-types.py {
oid .1.3.6.1.4.1.2636.13.61.1.1.1.8;
oid .1.3.6.1.4.1.2636.13.61.1.1.1.9;
oid .1.3.6.1.4.1.2636.13.61.1.1.2.2;
oid .1.3.6.1.4.1.2636.13.61.1.1.2.3;
oid .1.3.6.1.4.1.2636.13.61.1.1.3.5;
oid .1.3.6.1.4.1.2636.13.61.1.1.8.8;
python-script-user admin;
}
}
출력에 의도한 구성이 표시되지 않으면 이 예의 구성 지침을 반복하여 수정합니다.
활성화된 파일이 디바이스에 있는지 확인하려면 운영 모드 명령을 사용하여 /var/run/scripts/snmp 디렉터리의 내용을 나열합니다 file list /var/run/scripts/snmp .
검증
스크립트 실행 확인
목적
SNMP 스크립트가 예상대로 작동하는지 확인합니다.
작업
, show snmp mib get-next또는 show snmp mib walk 명령을 실행show snmp mib get하여 SNMP 요청을 생성합니다.
user@host> show snmp mib get .1.3.6.1.4.1.2636.13.61.1.1.1.8 juniperMIB.13.61.1.1.1.8 = 4294967295 user@host> show snmp mib get .1.3.6.1.4.1.2636.13.61.1.1.1.9 juniperMIB.13.61.1.1.1.9 = 18446744073709551615 user@host> show snmp mib get .1.3.6.1.4.1.2636.13.61.1.1.2.2 juniperMIB.13.61.1.1.2.2 = -1000 user@host> show snmp mib get .1.3.6.1.4.1.2636.13.61.1.1.2.3 juniperMIB.13.61.1.1.2.3 = 3000 user@host> show snmp mib get .1.3.6.1.4.1.2636.13.61.1.1.3.5 juniperMIB.13.61.1.1.3.5 = 999 user@host> show snmp mib get .1.3.6.1.4.1.2636.13.61.1.1.8.8 juniperMIB.13.61.1.1.8.8 = device rebooted user@host> show snmp mib get-next .1.3.6.1.4.1.2636.13.61.1.1.1.8 juniperMIB.13.61.1.1.1.8.1 = 4294967260 user@host> show snmp mib get-next .1.3.6.1.4.1.2636.13.61.1.1.1.9 juniperMIB.13.61.1.1.1.9.1 = 18446744073709551613 user@host> show snmp mib get-next .1.3.6.1.4.1.2636.13.61.1.1.2.2 juniperMIB.13.61.1.1.2.2.1 = -2000 user@host> show snmp mib get-next .1.3.6.1.4.1.2636.13.61.1.1.2.3 juniperMIB.13.61.1.1.2.3.1 = 4000 user@host> show snmp mib get-next .1.3.6.1.4.1.2636.13.61.1.1.3.5 juniperMIB.13.61.1.1.3.5.1 = 2040 user@host> show snmp mib get-next .1.3.6.1.4.1.2636.13.61.1.1.8.8 juniperMIB.13.61.1.1.8.8.1 = device rebooted