el
11-23-2021
02:57 AM
- fecha de última edición
11-23-2021
08:55 AM
por
Hilda Arteaga
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í?
¡Resuelto! Ir a solución.
el 11-23-2021 02:59 AM
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...
el
11-23-2021
02:59 AM
- fecha de última edición
11-23-2021
08:56 AM
por
Hilda Arteaga
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...
el 11-23-2021 02:59 AM
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...
el 11-23-2021 02:59 AM
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.
el 11-23-2021 02:59 AM
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"?
el 11-23-2021 02:59 AM
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.
el 11-23-2021 02:59 AM
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"
el 11-23-2021 02:59 AM
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.
Descubra y salve sus notas favoritas. Vuelva a encontrar las respuestas de los expertos, guías paso a paso, temas recientes y mucho más.
¿Es nuevo por aquí? Empiece con estos tips. Cómo usar la comunidad Guía para nuevos miembros
Navegue y encuentre contenido personalizado de la comunidad