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

    В данной статье я рассмотрю несколько примеров использования 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
    • +3
    • 14,9k
    • 3
    Поделиться публикацией

    Похожие публикации

    Комментарии 3
      0
      Отличная статья. Спасибо. Вопрос только в smtp аутентификации, рутер это умеет делать?
      0
      надо только иметь ввиду, что при использовании библиотек CLI потребуется ассоциировать EEM с каким-либо пользователем — event manager session cli username

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое