이 페이지의
예: SNMP 스크립트를 통해 지원되지 않는 OID 프로세스
이 샘플 SNMP 스크립트는 Junos OS를 실행하는 디바이스에서 지원되지 않는 객체 식별자(O이드)를 처리하는 방법을 보여줍니다.
요구 사항
SLAX SNMP 스크립트 사용 시 Junos OS 릴리스 15.1 이상
QFX 시리즈 스위치 또는 MX 시리즈, PTX 시리즈 또는 T 시리즈 라우터에서 Python SNMP 스크립트를 사용하는 경우 Junos OS 릴리스 16.1R3 이상
EX 시리즈 스위치에서 Python SNMP 스크립트를 사용할 때 Junos OS 릴리스 17.1R1 이상
SRX 시리즈 서비스 게이트웨이에서 Python SNMP 스크립트를 사용하는 경우 Junos OS 릴리스 17.3R1 이상
디바이스에서 SNMP가 구성됩니다.
개요 및 SNMP 스크립트
이 예에서는 지원되지 않는 여러 OED와 일치하고 처리하는 2개의 동급 SNMP 스크립트가 SLAX 및 Python에 표시됩니다. 이 스크립트는 SLAX 스크립트의 요소와 jcs.emit_snmp_attributes()
동등한 Python 스크립트의 기능을 사용하여 <snmp-script-results>
요청된 객체에 대한 값을 반환합니다. syslog()
시스템 로그 파일에 요청된 SNMP 작업 및 OID를 기록하기 위해 확장 기능이 호출됩니다. 기능에 대한 syslog()
자세한 내용은 syslog() Function(Python, SLAX 및 XSLT)을 참조하십시오.
SLAX 구문
version 1.0; 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.9.1.1.1') { <snmp-script-results> { <snmp-oid> $snmp-oid; <snmp-type> "Integer32"; <snmp-value> "211"; } } else if($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1.2') { <snmp-script-results> { <snmp-oid> $snmp-oid; <snmp-type> "Integer32"; <snmp-value> "429"; } } } else if ($snmp-action == 'get-next') { if($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1') { <snmp-script-results> { <snmp-oid> ".1.3.6.1.4.1.2636.13.61.1.9.1.1.1"; <snmp-type> "Integer32"; <snmp-value> "211"; } } else if ($snmp-oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1.1') { <snmp-script-results> { <snmp-oid> ".1.3.6.1.4.1.2636.13.61.1.9.1.1.2"; <snmp-type> "Integer32"; <snmp-value> "429"; } } } }
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.9.1.1.1': jcs.emit_snmp_attributes(snmp_oid, "Integer32", "211") elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1.2': jcs.emit_snmp_attributes(snmp_oid, "Integer32", "429") elif snmp_action == 'get-next': if snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1': jcs.emit_snmp_attributes(".1.3.6.1.4.1.2636.13.61.1.9.1.1.1", "Integer32", "211") elif snmp_oid == '.1.3.6.1.4.1.2636.13.61.1.9.1.1.1': jcs.emit_snmp_attributes(".1.3.6.1.4.1.2636.13.61.1.9.1.1.2", "Integer32", "429") if __name__ == '__main__': main()
구성
절차
단계별 절차
스크립트를 다운로드하고 활성화하려면 다음을 수행합니다.
Python, SLAX 또는 XSLT에서 SNMP 스크립트를 만들 수 있습니다. 요청 시스템 스크립트를 사용하여 명령을 변환하여 SLAX와 XSLT 간에 변환할 수 있습니다.
필요에 따라 스크립트를 텍스트 파일에 복사하여 파일 sample_snmp.slax 또는 sample_snmp.py의 이름을 지정하고 장비 의 /var/db/scripts/snmp 디렉토리에 다운로드합니다.
참고:서명되지 않은 Python 스크립트는 Junos OS
super-user
로그인 클래스의 루트 또는 사용자가 소유해야 하며 파일 소유자만이 파일에 대한 쓰기 권한을 가질 수 있습니다.SNMP 스크립트를 활성화하고 OID를 구성합니다.
구성 모드에서 계층 수준에서 스크립트 언어
[edit system scripts snmp]
에 적합한 파일 이름 및 확장으로 명령문을 구성file filename
하고 스크립트를 트리거하는 OID를 구성합니다.[edit system scripts] user@host# set snmp file sample_snmp.slax oid .1.3.6.1.4.1.2636.13.61.1.9.1.1
-
스크립트가 Python으로 작성된 경우 적절하게 또는
language python3
명령문을 구성language python
합니다.[edit system scripts] user@host# set language python3
스크립트가 Python으로 작성된 경우 스크립트가 실행되는 액세스 권한에 따라 사용자를 구성합니다.
[edit system scripts] user@host# set snmp file sample_snmp.py python-script-user username
참고:명령문을 구성
python-script-user
하지 않으면 기본적으로 Junos OS는 사용자 및 그룹의nobody
액세스 권한에 따라 Python SNMP 스크립트를 실행합니다.commit
명령을 실행하여 구성을 커밋합니다.[edit system scripts] user@host# commit
결과
구성 모드에서 명령을 입력하여 구성을 show system scripts snmp
확인합니다.
[edit] user@host# show system scripts snmp file sample_snmp.slax { oid .1.3.6.1.4.1.2636.13.61.1.9.1.1; }
출력이 의도한 구성을 표시하지 않는 경우 이 예제의 구성 지침을 반복하여 수정합니다.
활성화된 파일이 디바이스에 있는지 확인하려면 운영 모드 명령을 사용하여 /var/run/scripts/snmp 디렉토리의 컨텐츠를 file list /var/run/scripts/snmp
나열합니다.
확인
스크립트 실행 검증
목적
SNMP 스크립트가 예상대로 작동하는지 확인합니다.
작업
show snmp mib get
, show snmp mib get-next
또는 show snmp mib walk
명령을 실행하여 SNMP 요청을 생성합니다.
user@host> show snmp mib get .1.3.6.1.4.1.2636.13.61.1.9.1.1.1 juniperMIB.13.61.1.9.1.1.1 = 211
user@host> show snmp mib get .1.3.6.1.4.1.2636.13.61.1.9.1.1.2 juniperMIB.13.61.1.9.1.1.2 = 429
user@host> show snmp mib get-next .1.3.6.1.4.1.2636.13.61.1.9.1.1.1 juniperMIB.13.61.1.9.1.1.2 = 429
user@host> show snmp mib walk .1.3.6.1.4.1.2636.13.61.1.9.1.1 juniperMIB.13.61.1.9.1.1.1 = 211 juniperMIB.13.61.1.9.1.1.2 = 429
시스템 로그 파일에는 스크립트 실행 후 다음과 같은 메시지가 포함되어 있습니다.
Jul 3 10:07:48 host cscript: snmp-action = get snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1.1 Jul 3 10:07:51 host cscript: snmp-action = get snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1.2 Jul 3 10:08:05 host cscript: snmp-action = get-next snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1.1 Jul 3 10:08:24 host cscript: snmp-action = get-next snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1 Jul 3 10:08:24 host cscript: snmp-action = get-next snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1.1 Jul 3 10:08:24 host cscript: snmp-action = get-next snmp-oid = .1.3.6.1.4.1.2636.13.61.1.9.1.1.2