В данной статье я рассмотрю несколько примеров использования Cisco EEM (Embedded Event Manager) совместно с Cisco IP SLA и TCL-скриптами.
1. Мониторинг хоста с уведомлением на email.
Не так давно у меня возникла ситуация когда мне стало нужно мониторить резервные интернет каналы. Способов для этого существует великое множество, но я подумал, зачем мне разворачивать отдельный сервер или ставить дополнительное ПО, когда за все каналы связи отвечает маршрутизатор Cisco, она же занимается резервированием, так пусть Cisco занимается и мониторингом с уведомлением на электронную почту.
Система будет работать с помощью технологий Cisco IP SLA и EEM, о которых на хабре уже писали.
Итак, запустим echo-запросы на интернет хост, с таймаутом в 500 ms и проверкой раз в час.
Для удобства объявим несколько переменных для EEM, где зададим адрес почтового сервера и адреса почтовых ящиков.
Создадим задания для EEM что делать в случае если пинга нет и в обратном варианте.
Зачему один момент. Встроенный в EEM почтовый клиент не полностью поддерживает RFC822. Письма отправляются с пустым телом. Для того чтобы устранить баг, можно руками вставить отправку комбинации CRLF при генерации письма.
2. Автоматичекое резервирование конфигурации.
Существуют ситуации когда после изменения конфигурации Cisco требуется вернутся к предыдущим настройкам. Я понимаю, что правильная ситуация иметь копии конфигураций до начала внесения изменений, или тщательно проверить изменения и только потом сохранять, но ситуации бывают разные. В этом нам поможет сообщество EEM TCL скриптов.
Для примера возьмем скрипт Archive Config if Changes. Скрипт будет сравнивать отличия конфигураций, сохранять конфигурацию в случае отличия и отправлять syslog сообщение.
Для начала объявим имя файла архивации и количество копий.
Объявим имя файла для EEM и скопируем TCL скрипт.
Объявим разрешения на запуск и зарегистрируем скрипт.
После регистрации скрипта он начнет работу автоматически.
Листинг скрипта archive.tcl:
Оба варианта запускались на базе 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
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