이 페이지의
예: 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