Pull to refresh

Варианты использования Cisco EEM

Reading time3 min
Views23K
В данной статье я рассмотрю несколько примеров использования Cisco EEM (Embedded Event Manager) совместно с Cisco IP SLA и TCL-скриптами.

1. Мониторинг хоста с уведомлением на email.

Не так давно у меня возникла ситуация когда мне стало нужно мониторить резервные интернет каналы. Способов для этого существует великое множество, но я подумал, зачем мне разворачивать отдельный сервер или ставить дополнительное ПО, когда за все каналы связи отвечает маршрутизатор Cisco, она же занимается резервированием, так пусть Cisco занимается и мониторингом с уведомлением на электронную почту.

Система будет работать с помощью технологий Cisco IP SLA и EEM, о которых на хабре уже писали.

Итак, запустим echo-запросы на интернет хост, с таймаутом в 500 ms и проверкой раз в час.

ip sla 1
icmp-echo 212.158.166.234
timeout 500
frequency 3600
ip sla schedule 1 life forever start-time now

track 1 rtr 1 reachability


Для удобства объявим несколько переменных для EEM, где зададим адрес почтового сервера и адреса почтовых ящиков.

event manager environment _eserv 192.168.1.10
event manager environment _admin admin@localname.com
event manager environment _rep reports@localname.com


Создадим задания для EEM что делать в случае если пинга нет и в обратном варианте.

event manager applet host_is_down
event track 1 state down
action 1 mail server "$_eserv" to "$_admin" from "$_rep" subject "Habrahabr is not pinging"
event manager applet host_is_up
event track 1 state up
action 1 mail server "$_eserv" to "$_admin" from "$_rep" subject "Habrahabr is pinging now"


Зачему один момент. Встроенный в EEM почтовый клиент не полностью поддерживает RFC822. Письма отправляются с пустым телом. Для того чтобы устранить баг, можно руками вставить отправку комбинации CRLF при генерации письма.

action 1 mail server "$_mail_smtp" to "$_mail_rcpt" from "$_info_routername@$_mail_domain" subject "Interface state change" body "\015\012$_syslog_msg"

2. Автоматичекое резервирование конфигурации.

Существуют ситуации когда после изменения конфигурации Cisco требуется вернутся к предыдущим настройкам. Я понимаю, что правильная ситуация иметь копии конфигураций до начала внесения изменений, или тщательно проверить изменения и только потом сохранять, но ситуации бывают разные. В этом нам поможет сообщество EEM TCL скриптов.

Для примера возьмем скрипт Archive Config if Changes. Скрипт будет сравнивать отличия конфигураций, сохранять конфигурацию в случае отличия и отправлять syslog сообщение.

Для начала объявим имя файла архивации и количество копий.

Router(config)# archive
Router(config-archive)# path flash:archive_config
Router(config-archive)# maximum 5


Объявим имя файла для EEM и скопируем TCL скрипт.

Router(config)#event manager environment filename archive_config
Router#copy tftp flash
Address or name of remote host []? 192.168.1.2
Source filename []? archive.tcl
Destination filename [archive.tcl]?
Accessing tftp://192.168.1.2/archive.tcl...
Loading archive.tcl from 192.168.1.2 (via GigabitEthernet0/0): !
[OK - 1308 bytes]

1308 bytes copied in 0.156 secs (8385 bytes/sec)


Объявим разрешения на запуск и зарегистрируем скрипт.

Router(config)#event manager directory user policy flash:
Router(config)#event manager policy archive.tcl


После регистрации скрипта он начнет работу автоматически.

Листинг скрипта archive.tcl:
::cisco::eem::event_register_syslog pattern ".*%SYS-5-CONFIG.*"

if {![info exists filename]} {
set result "Policy cannot be run variable filename has not been set."
error $result $errorInfo
}

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

if [catch {cli_open} result] {
puts stderr $result
exit 1
} else {
array set cli1 $result
}

if [catch {cli_exec $cli1(fd) "en"} result] {
puts stderr $result
exit 1
}

set showarchive [cli_exec $cli1(fd) "show archive"]
if { [regexp “Archive feature not enabled” $showarchive] } {
puts stderr $showarchive
exit 1
}

set lines [split $showarchive "\n"]

foreach line $lines {
set result [regexp {<- Most Recent} $line ]
if {$result != 0} {
set result1 [regexp {^\s+\d+\s+(.+)-(\d+)\s+<-} $line -> path extension]
set output [cli_exec $cli1(fd) "show archive config differences system:/running-config flash:$filename-$extension"]
if { [regexp "!No changes were found" $output] } {
break
} elseif { [regexp "Error: Could not open file" $output] } {
cli_exec $cli1(fd) "archive config"
break
}
else {
cli_exec $cli1(fd) "archive config"
break
}
}
}


Оба варианта запускались на базе Cisco IOS Software, 3800 Software (C3825-SPSERVICESK9-M), Version 12.4(6)T.

Далее планирую разобраться с альтернативным способом отправки электронной почты, с помощью TCL.

При написании статьи использовались материалы с сайтов:
Cisco IOS Embedded Event Manager (EEM)
Embedded Event Manager (EEM) Scripting Community
Tags:
Hubs:
Total votes 7: ↑5 and ↓2+3
Comments3

Articles