lunes, 18 de enero de 2010

Embedded Event Manager (EEM)

Posted by Nicolas | lunes, 18 de enero de 2010 | Category: , , |

Para entender esta poderosa herramienta que se podría decir está actualmente en desarrollo (Cisco IOS Release 12.3(4)T -> EEM 1.0, .... , 12.4(20)T -> EEM 2.4, 12.4(22)T -> EEM 3.0, 15.0(1)M -> EEM 3.1), hay que distinguir los dos tipos de políticas EEM (Embedded Event Manager Policies) que existen; estas son:

  • Applets: Definidas con comandos de configuración en CLI. Ejemplo:
event manager applet EJEMPLO
event syslog pattern "CONFIG"
action 1.0 cli command "sh ver | i IOS"
action 2.0 puts "$_cli_result"

R5(config)#^Z
R5#
*Jan 18 18:18:15.783: %SYS-5-CONFIG_I: Configured from console by console
R5#
R5#
*Jan 18 18:18:15.827: %HA_EM-6-LOG: EJEMPLO: Cisco IOS Software, 2800 Software (C2800NM-ADVENTERPRISEK9-M), Version 12.4(24)T1, RELEASE SOFTWARE (fc3)
R5>
::cisco::eem::event_register_syslog pattern "CONFIG"

namespace import ::cisco::eem::*
namespace import ::cisco::lib::*

if [catch {cli_open} result] {
error $result $errorInfo
} else {
array set cli $result
}

if [catch {cli_exec $cli(fd) "sh ver | i IOS"} result] {
error $result $errorInfo
} else {
puts $result
}

if [catch {cli_close $cli(fd) $cli(tty_id)} result] {
error $result $errorInfo
}

R5#mkdir scripts
Create directory filename [scripts]?
Created dir flash:scripts
R5#
R5#tclsh
R5(tcl)#puts [open "flash:/scripts/EJEMPLO.tcl" w+] {
+>(tcl)#....¡¡¡Acá va el Script!!!....
+>(tcl)#}

R5(tcl)#exit
R5#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R5(config)#
R5(config)#event manager directory user policy flash:/scripts
R5(config)#event manager policy EJEMPLO.tcl type user
R5(config)#^Z
R5#
*Jan 18 20:19:13.082: %SYS-5-CONFIG_I: Configured from console by console
*Jan 18 20:19:14.438: %HA_EM-6-LOG: EJEMPLO.tcl: Cisco IOS Software, 2800 Software (C2800NM-ADVENTERPRISEK9-M), Version 12.4(24)T1, RELEASE SOFTWARE (fc3)
*Jan 18 20:19:14.438: %HA_EM-6-LOG: EJEMPLO.tcl: R5>
R5#

Ambos ejemplos muestran cómo un evento (la palabra CONFIG en un mensaje de syslog) generan una acción (ejecutar "sh ver | i IOS"). ¿Entonces qué eventos pueden generar se corra una secuencia especificada?, bueno eso dependerá de la versión de IOS y la lista se puede ver en Event Detectors. Algunos de esto son:
  • CLI event detector: Escucha los comandos ejecutados que pueden ser evaluados con expresiones regulares. Dependiendo de la configuración incluso pueden impedir el comando sea finalmente ejecutado.
  • Counter event detector: Monitorea un determinado contador de acuerdo a los umbrales definidos.
  • None event detector: Espera se ejecute manualmente por línea de comandos.
  • Syslog event detector: Compara los mensajes de syslog contra una expresión regular definida.
  • Timer event detector: Ejecuta cada cierto tiempo especificado (Minuto 0-59, Hora 0-23, Fecha 1-31, Mes 1-12, Dia 0-7).
La acciones también varían y su listado se puede ver en EEM Actions Available by Cisco IOS Release. Algunas son:
  • Ejecutar un comando en CLI
  • Ejecutar manualmente una segunda política EEM.
  • Generar un trap SNMP
  • Generar un mensaje Syslog
También existen Embedded Event Manager Environment Variables, variables que básicamente pueden como no ser utilizadas.

A continuación unos sencillos ejemplos (applets).

1. None event detector -> Generación de mensaje Syslog

R5#
R5#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R5(config)#event manager applet Politica-Manual
R5(config-applet)#event none
R5(config-applet)#action 1.0 syslog msg "Se ejecuto la Politica-Manual"
R5(config-applet)#end
R5#
*Jan 18 21:55:20.174: %SYS-5-CONFIG_I: Configured from console by console
R5#
R5#event manager run Politica-Manual

R5#
*Jan 18 21:55:39.346: %HA_EM-6-LOG: Politica-Manual: Se ejecuto la Politica-Manual

2. Interactivo

R5#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R5(config)#event manager applet Interactivo
R5(config-applet)# event none
R5(config-applet)# action label1 gets Texto
R5(config-applet)# action label2 puts "Lo que escribio es $Texto"
R5(config-applet)#end
R5#
R5#
*Jan 18 22:01:03.642: %SYS-5-CONFIG_I: Configured from console by console
R5#event manager run Interactivo
Hola
Lo que escribio es Hola

R5#

3. Ciclos y suma

R5(config)#
R5(config)#event manager applet Condiciones
R5(config-applet)# event none
R5(config-applet)# action 1 set numero "1"
R5(config-applet)# action 2 while $numero lt 5
R5(config-applet)# action 3 syslog msg "El Numero es $numero"
R5(config-applet)# action 4 increment numero 1
R5(config-applet)# action 5 end
R5(config-applet)#^Z
R5#
*Jan 18 22:09:25.211: %SYS-5-CONFIG_I: Configured from console by console
R5#event manager run Condiciones

R5#
*Jan 18 22:09:42.391: %HA_EM-6-LOG: Condiciones: El Numero es 1
*Jan 18 22:09:42.391: %HA_EM-6-LOG: Condiciones: El Numero es 2
*Jan 18 22:09:42.391: %HA_EM-6-LOG: Condiciones: El Numero es 3
*Jan 18 22:09:42.391: %HA_EM-6-LOG: Condiciones: El Numero es 4
R5#

4. En TCL y SNMP en routers Cisco se vio cómo obtener con TCL /SNMP la utilización de la CPU en los últimos 5 minutos (cpmCPUTotal5minRev -> .1.3.6.1.4.1.9.9.109.1.1.1.1.8). Se verá ahora lo mismo con el ouput del comando y una expresión regular.

R5#
R5#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R5(config)#event manager applet 5min
R5(config-applet)# event none sync yes
R5(config-applet)# action 1 cli command "sh proc cpu | i CPU"
R5(config-applet)# action 2 regexp "(five minutes:) ([0-9]+)" "$_cli_result" all first second
R5(config-applet)# action 3 puts "\n\n ***El valor es: $second ***"
R5(config-applet)#^Z
R5#
5#event manager run 5min

***El valor es: 4 ***

R5#sh proc cpu | i CPU
CPU utilization for five seconds: 12%/2%; one minute: 14%; five minutes: 4%
R5#

Varios otros ejemplos más sofisticados se pueden obtener en Cisco EEM Scripting Community.

En total 0 comentarios:


Leave a Reply