cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 
cancel
908
Visitas
0
ÚTIL
7
Respuestas

variable EEM $_syslog_msg no funciona

Translator
Community Manager
Community Manager

Quiero capturar algunos mensajes del registro y hacer cosas con él con un script TCL. El problema es que no puedo obtener la entrada de registro en la secuencia de comandos TCL. Tengo la siguiente configuración:

 

event manager applet RUNATEVERYLOG
event syslog pattern "Configured programmatically" maxrun 4
action 1.0 cli command "enable"
action 2.0 puts "we will send the log $_syslog_msg"
action 3.0 cli command "tclsh flash:manipulatelog.tcl $_syslog_msg"

Pero cuando los mensajes correspondientes llegan al registro:

Nov 19 07:10:08.576: %SYS-5-CONFIG_P: Configured programmatically by process Crypto INT from console as console
Nov 19 07:10:08.586: %SYS-5-CONFIG_P: Configured programmatically by process VTEMPLATE Background Mgr from console as console

El applet corre pero me da esto: 

Nov 19 07:10:41.771: %HA_EM-6-LOG: RUNATEVERYLOG: we will send the log 

Así que la variable $_syslog_msg parece estar vacía. Probé la variable más antigua $syslog_msg pero cuando uso esto, hay un error:

Nov 18 19:59:09.855: %HA_EM-3-FMPD_UNKNOWN_ENV: fh_parse_var: could not find environment variable: syslog_msg
Nov 18 19:59:09.855: %HA_EM-3-FMPD_ERROR: Error executing applet RUNATEVERYLOG statement 2.0

Esto me dice que estoy usando la variable correcta, pero parece estar vacía. ¿Es una falla? Ejecución en IOS-XE 16.12.04 en el dispositivo ISR1000. ¿Qué me falta aquí?

1 SOLUCIÓN ACEPTADA

Soluciones aceptadas

Hello,

 

la única manera de que esto funcione es no usar el _syslog_msg en absoluto, sino más bien hacer coincidir toda la entrada de syslog y ponerlo en una variable diferente:

 

event manager applet RUNATEVERYLOG
event syslog pattern "Configured programmatically" maxrun 4
action 1.0 regexp "(.*)" "$_syslog_msg" match syslog
action 2.0 cli command "enable"
action 3.0 puts "we will send the log $syslog"
action 4.0 cli command "tclsh flash:manipulatelog.tcl $syslog"

 

No estoy seguro de si esto es lo que desea...

Ver la solución en mensaje original publicado

7 RESPUESTAS 7

Translator
Community Manager
Community Manager

Hello,

 

_syslog_msg debería, en teoría, es una variable integrada, por lo que no tendría que declararla. Podría ser un error en esta versión y/o en la plataforma/IOS-XE.

 

Lo probaré en otro IOS... 

Hello,

 

la única manera de que esto funcione es no usar el _syslog_msg en absoluto, sino más bien hacer coincidir toda la entrada de syslog y ponerlo en una variable diferente:

 

event manager applet RUNATEVERYLOG
event syslog pattern "Configured programmatically" maxrun 4
action 1.0 regexp "(.*)" "$_syslog_msg" match syslog
action 2.0 cli command "enable"
action 3.0 puts "we will send the log $syslog"
action 4.0 cli command "tclsh flash:manipulatelog.tcl $syslog"

 

No estoy seguro de si esto es lo que desea...

Muchas gracias por sus pruebas. Esta sería una solución alternativa y proporcionaría exactamente lo que necesitaría. Tristemente, no funciona en mi entorno.

 

Nov 19 15:02:16.521: %SYS-5-CONFIG_P: Configured programmatically by process Crypto INT from console as console
Nov 19 15:02:16.532: %SYS-5-CONFIG_P: Configured programmatically by process VTEMPLATE Background Mgr from console as console
Nov 19 15:02:16.657: %PARSER-5-CFGLOG_LOGGEDCMD: User:admin  logged command:!exec: enable
Nov 19 15:02:16.657: %PARSER-5-CFGLOG_LOGGEDCMD: User:admin  logged command:!exec: enable
Nov 19 15:02:16.658: %HA_EM-6-LOG: RUNATEVERYLOG: we will send the log 
Nov 19 15:02:16.521: %SYS-5-CONFIG_P: Configured programmatically by process Crypto INT from console as console
Nov 19 15:02:16.659: %HA_EM-6-LOG: RUNATEVERYLOG: we will send the log 
Nov 19 15:02:16.532: %SYS-5-CONFIG_P: Configured programmatically by process VTEMPLATE Background Mgr from console as console
roTRO11#show running-config | section RUNAT
event manager applet RUNATEVERYLOG
 event syslog pattern "Configured programmatically" maxrun 4
 action 1.0 regexp "(.*)" "$_syslog_msg" match syslog
 action 2.0 cli command "enable"
 action 3.0 puts "we will send the log $syslog"
 action 4.0 cli command "tclsh flash:manipulatelog.tcl $syslog"

En teoría, no debería funcionar si la variable $_syslog_msg está vacía. Así que el regex no tiene nada que ver. ¿En qué IOS probó esto? Tal vez tengo que probar esto en otra versión.

Hello,

 

¿qué es exactamente lo que no funciona? Se muestra toda la entrada de syslog. ¿Qué desea que aparezca exactamente después de "enviaremos el registro"? 

Tienes razón, pensé que estos son registros nuevos, pero tienen el mismo sello de fecha y hora que los originales. Por lo tanto, el único problema que puedo ver ahora es que hay una devolución (\n) antes de la entrada del registro. Tengo que ajustar el Regex para que no incluya el \n en la parte delantera. Espero el siguiente retorno:

Nov 19 15:02:16.658: %HA_EM-6-LOG: RUNATEVERYLOG: we will send the log Nov 19 15:02:16.521: %SYS-5-CONFIG_P: Configured programmatically by process Crypto INT from console as console

Informará después de la prueba.

Hello,

 

de hecho.Si coloca una letra o un número después de $syslog, puede ver que es realmente la entrada de registro que se está mostrando:

 

action 3.0 pone "enviaremos el log $syslog 12345"

Con algunos intentos y errores, encontré el regex correcto, que coloca el registro en vivo en la variable sin ninguna devolución:

 

event manager applet RUNATEVERYLOG
event syslog pattern "Configured programmatically" maxrun 4
action 1.0 regexp "\n*(.*)" "$_syslog_msg" match syslog
action 2.0 cli command "enable"
action 3.0 cli command "tclsh flash:manipulatelog.tcl $syslog"

Con esto, el script se ejecuta como se esperaba.

Vamos a comenzar

¡Conecte con otros expertos de Cisco y del mundo! Encuentre soluciones a sus problemas técnicos o comerciales, y aprenda compartiendo experiencias.

Queremos que su experiencia sea grata, le compartimos algunos links que le ayudarán a familiarizarse con la Comunidad de Cisco: