NESTA PÁGINA
Exemplo: processe OIDs sem suporte com um script SNMP
Este script SNMP amostral mostra como processar identificadores de objetos (OIDs) que não são suportados em dispositivos que executam o Junos OS.
Requisitos
Junos OS Versão 15.1 ou posterior ao usar scripts SLAX SNMP.
Junos OS Versão 16.1R3 ou posterior ao usar scripts Python SNMP em switches da Série QFX ou Série MX, Série PTX ou roteadores da Série T.
Junos OS Versão 17.1R1 ou posterior ao usar scripts Python SNMP em switches da Série EX.
Junos OS Versão 17.3R1 ou posterior ao usar scripts Python SNMP em gateways de serviços da Série SRX.
O SNMP está configurado no dispositivo.
Visão geral e script SNMP
Neste exemplo, dois scripts SNMP equivalentes são apresentados em SLAX e Python que combinam e processam vários OIDs não suportados. O script devolve o valor para o objeto solicitado usando o <snmp-script-results>
elemento no script SLAX e a jcs.emit_snmp_attributes()
função no script Python equivalente. A syslog()
função de extensão é chamada para registrar a ação de SNMP solicitada e o OID no arquivo de log do sistema. Para obter mais informações sobre a syslog()
função, consulte a função syslog() (Python, SLAX e XSLT).
Sintaxe 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"; } } } }
Sintaxe 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()
Configuração
Procedimento
Procedimento passo a passo
Baixar e habilitar o script:
Você pode criar scripts SNMP em Python, SLAX ou XSLT. Você pode usar os scripts do sistema de solicitação convertendo o comando para converter entre SLAX e XSLT.
Copie o script em um arquivo de texto, nomeie o arquivo sample_snmp.slax ou sample_snmp.py, conforme apropriado, e baixe-o no /var/db/scripts/snmp directory no dispositivo.
Nota:Os scripts Python não assinados devem ser de propriedade de um root ou de um usuário na classe de login do Junos OS
super-user
, e apenas o proprietário do arquivo pode ter permissão de gravação para o arquivo.Habilite o script SNMP e configure o OID.
No modo de configuração, configure a
file filename
declaração com o nome e a extensão de arquivo apropriados para sua linguagem de script no nível de[edit system scripts snmp]
hierarquia e configure o OID que acionará o script.[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
-
Se o script for escrito em Python, configure a declaração ou
language python3
alanguage python
declaração conforme apropriado.[edit system scripts] user@host# set language python3
Se o script for escrito em Python, configure o usuário sob cujo acesso privilegia o script executado.
[edit system scripts] user@host# set snmp file sample_snmp.py python-script-user username
Nota:Se você não configurar a declaração, então, por padrão, o
python-script-user
Junos OS executa scripts Python SNMP sob os privilégios de acesso do usuário e do gruponobody
.Emitimos o
commit
comando para comprometer a configuração.[edit system scripts] user@host# commit
Resultados
A partir do modo de configuração, confirme sua configuração entrando no show system scripts snmp
comando.
[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; }
Se a saída não exibir a configuração pretendida, repita as instruções de configuração neste exemplo para corrigi-la.
Para garantir que os arquivos habilitados estejam no dispositivo, liste o conteúdo do / var/run/scripts/snmp directory usando o comando do file list /var/run/scripts/snmp
modo operacional.
Verificação
Verificando a execução do script
Propósito
Verifique se o script SNMP funciona como esperado.
Ação
Emitir o show snmp mib get
, show snmp mib get-next
ou show snmp mib walk
o comando para gerar uma solicitação de 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
O arquivo de registro do sistema contém as seguintes mensagens após a execução do script:
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