отмена
Отображаются результаты для 
Вместо этого искать 
Вы имели в виду: 
Объявления
Добро пожаловать в Сообщество Технической поддержки Cisco. Мы рады получить обратную связь .
Cisco Employee

Спросить эксперта: "Автоматизация задач с помощью EEM"

с Сергеем Никитиным

 

Read the bio

Во время сессии "Спросить Эксперта" инженер Cisco TAC Сергей Никитин ответит на вопросы об архитектуре EEM, особенностях работы, связанных с этим функционалом. Также вы сможете задать вопросы, относящиеся к написанию EEM Апплетов, TCL и IOS shell скриптов.

 

Сергей - является инженером Cisco и работает в региональной TAC команде, которая занимается поддержкой русскоговорящих клиентов. Свою карьеру начал в техподдержке Linksys в 2007 году, затем работал для национального телеком-оператора и в международном интеграторе, вернулся в Cisco в 2014 году. В настоящее время фокусируется на проблемах маршрутизации и коммутации, изучает решения для датацентров. Сергей обладает сертификатом CCIE R&S #52578.

 

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

 

Хотите узнать больше информации об этом событии?

 

  Contest-green-button-russian.jpg   

1 УТВЕРЖДЕННОЕ РЕШЕНИЕ

Утвержденные решения
New Member

У меня есть "event manager

У меня есть "event manager applet" для поиска причин повышенной загрузки CPU (очень похожий на первый пример в данной презентации). Моя версия также срабатывает по "event snmp", собирает выводы нескольких команд диагностики и ещё запускает "monitor capture CAPTURE start | append flash:...". Используется Cisco IOS XE 03.16.02.S.
Вопросы:
1) Настройка "monitor capture CAPTURE" "живёт" до первой перезагрузки устройства. Мне нужно сделать ещё один аплет, который должен после перезагрузки заново настроить "monitor capture CAPTURE" (это делается из EXEC-mode). По какому событию лучше всего запустить этот аплет? Вопрос связан с тем, что я не знаю как можно определить тот момент, после перезагрузки устройства, когда уже можно будет проводить настройку.
2) Я знаю, что после запуска сбора трафика "monitor capture CAPTURE start" трафик будет собираться в течении 60 секунд. Можно ли каким-либо образом "заставить" аплет подождать 65 секунд и после уже что-то делать (не важно что именно, но, например, отправить собранный трафик по TFTP)? Ключевой момент здесь - "подождать".

10 ОТВЕТ.
New Member

У меня есть "event manager

У меня есть "event manager applet" для поиска причин повышенной загрузки CPU (очень похожий на первый пример в данной презентации). Моя версия также срабатывает по "event snmp", собирает выводы нескольких команд диагностики и ещё запускает "monitor capture CAPTURE start | append flash:...". Используется Cisco IOS XE 03.16.02.S.
Вопросы:
1) Настройка "monitor capture CAPTURE" "живёт" до первой перезагрузки устройства. Мне нужно сделать ещё один аплет, который должен после перезагрузки заново настроить "monitor capture CAPTURE" (это делается из EXEC-mode). По какому событию лучше всего запустить этот аплет? Вопрос связан с тем, что я не знаю как можно определить тот момент, после перезагрузки устройства, когда уже можно будет проводить настройку.
2) Я знаю, что после запуска сбора трафика "monitor capture CAPTURE start" трафик будет собираться в течении 60 секунд. Можно ли каким-либо образом "заставить" аплет подождать 65 секунд и после уже что-то делать (не важно что именно, но, например, отправить собранный трафик по TFTP)? Ключевой момент здесь - "подождать".

Cisco Employee

Спасибо за вопросы.1. Я думаю

Спасибо за вопросы.

1. Я думаю что нужно разобраться с причиной почему настройка исчезает после перезагрузки. Возможно это будет несложно починить. Но отвечая на вопрос, то конечно да, полиси можно запустить после перезагрузки. Для этого есть ED - event timer countdown.

2. Я знаю 2 способа:
2.1 Воспользоваться возможностью действия Wait(65). Как раз ничего не делаем, просто ждем.
2.2 Можно попробовать настроить trigger delay 65, тогда запуск полиси отложится на 65 сек.

New Member

Сергей, добрый день,

Сергей, добрый день,

Есть следующий апплет:

event manager applet adj-status
event snmp-notification oid 1.3.6.1.4.1.9.9.658.1. oid-val "-" op ne direction outgoing
action 1 syslog msg "ADJ: $_snmp_notif_oid_val"

Результат следующий (весь трап):

Aug 4 15:59:21: %HA_EM-6-LOG: adj-status: ADJ: Thu Aug 04 15:59:21 KRGZ 2016
Aug 4 15:59:21: %HA_EM-6-LOG: adj-status: ADJ: 1
Aug 4 15:59:21: %HA_EM-6-LOG: adj-status: ADJ: TEST_CN
Aug 4 15:59:21: %HA_EM-6-LOG: adj-status: ADJ:
Aug 4 15:59:21: %HA_EM-6-LOG: adj-status: ADJ: This alarm is generated when an adjacency is attached to or detached from the sbe.

Как мне получить в переменную значение только определенной переменной трапа? В детализации к детектору snmp-notification описано, что возвращаются вот такие переменные $_x_x_x_x_x_x (varbinds), если я правильно понял это как раз динамически формируемые variable-bindings из SNMP PDU. Как правильно к ним обращаться? Пытался через OID, пишет что не может найти такую переменную.

Заранее спасибо!

Cisco Employee

Так и не смог найти ответ на

Так и не смог найти ответ на Ваш вопрос. Возможно Сергей ответит... Судя по описанию возвращаемых переменных "_x_x_x_x_x_x_x(varbinds)" это должен быть массив, где переменные получают свое значение динамически. Попробуйте обратиться к ним через _0, _1, _2 или _$0, _$1, _$2

Если же нет, то в описании указано, что возвращаемый тип массива это - string.

For EEM_EVENT_SNMP_Notification ==> "event_id %u event_type %u event_type_string {%s} %u event_pub_sec %u event_pub_msec %u event_severity {%s}" "oid {%s} oid_val {%s} src_ip_addr {%s} dest_ip_addr {%s} x_x_x_x_x (varbinds) {%s} trunc_vb_buf {%s} trap_oid {%s} enterprise_oid {%s} generic_trap %u specific_trap %u"

В Вашем примере видно, что все элементы мамсива разделены делиметром "\n". В таком случае попробуйте использовать regexp. Пример использования action regexp можно найти здесь: https://supportforums.cisco.com/document/139001/eem-script-periodically-clearing-interface-counters-using-regular-expression или на CCO: http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/eem/command/eem-cr-book/eem-cr-a1.html

Cisco Employee

ВОПРОС С ВЕБКАСТА:

ВОПРОС С ВЕБКАСТА:

слайд "Матрица версий", возможность отслеживания температуры получается для IOS недоступна?

Cisco Employee

Ну для ослеживания

Ну для ослеживания температуры, если SNMP poll для этих целей не подошел по каким-то причинам, можно использовать EEM, но он все равно будет полностью полагаться на SNMP Event Detector:

SNMP Event DetectorThe SNMP event detector allows a standard SNMP MIB object to be monitored and an event to be generated when the object matches specified values or crosses specified thresholds.

Если речь идет о самом MIB и возможных OID, пригодных для использования, предлагаю посмотреть CISCO-ENVMON-MIB (в частности ciscoEnvMonTemperatureStatusEntry). Пример использования SNMP Event Detector см. ниже. Хотел бы также отметить, что далеко не у всех Low-End роутеров есть температурные датчики (например C881W-A-K9, который использует пассивное охлаждение), поэтому убедитесь с помощью Net-SNMP, что необходимый Вам OID действительно содержит ожидаемое значение переменной, прежде чем использовать этот OID в апплетах...

event manager scheduler applet thread class default number 1
event manager applet High_CPU
event snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.3.1 get-type exact entry-op gt entry-val 80 exit-op lt exit-val 50 exit-time 5 poll-interval 1
action 0.0 syslog msg "High CPU DETECTED. Please wait - logging Information to flash:high_cpu.txt"
action 0.1 cli command "enable"
action 0.2 cli command "term exec prompt timestamp"
action 1.3 cli command "show process cpu sorted | append flash:high_cpu.txt"
action 1.4 cli command "show process cpu sorted | append flash:high_cpu.txt"
action 1.5 cli command "show process cpu sorted | append flash:high_cpu.txt"
action 5.1 syslog msg "Finished logging information to flash:high_cpu.txt..."
action 5.1 syslog msg "Self-removing applet from configuration..."
action 5.2 cli command "term no exec prompt timestamp"
action 9.1 cli command "configure terminal"
action 9.2 cli command "no event manager applet High_CPU"
action 9.3 cli command "end"
Cisco Employee

ВОПРОС С ВЕБКАСТА:

ВОПРОС С ВЕБКАСТА:

А что такого в TTL = 1 ?

Cisco Employee

ВОПРОС С ВЕБКАСТА:

ВОПРОС С ВЕБКАСТА:

­Подгружать все библиотеки сразу тоже не есть хорошо. А имеется информация, как по ресурсам ограничивается выполнение скрипта? И возможно ли задать свои ограничения на выделенные ресурсы?­      

Cisco Employee

Вы знаете, я боюсь, что лучше

Вы знаете, я боюсь, что лучше ответить на этот вопрос, чем это сделано здесь, я не смогу. Поэтому отправляю Вас к разделам Tcl Libraries, Tcl Packages, а также Scalability.

Cisco Employee

Позволю себе добавить пару

Позволю себе добавить пару комментариев:

  • EPC что в IOS, что в IOS-XE (как Вы и написали) запускается из EXEC-mode, поэтому после перезагрузки сохранятся эта "конфигурация" не может, что наверное правильно, иначе случайно запущенный "debug all" жил бы с нами вечно. После того, как IOS/IOSd передает управление EXEC, последний начинает парсить конфиг из DRAM line-by-line, в том числе конфиг для EEM. Поэтому я не думаю, что имеет смысл отдельно контролировать процесс запуска апплета, если только такая задача не ставится специально. ED будет зарегистрирован EEM только после того, как Вы выйдете из режима конфигурации (через "end", "exit" или CTRL-Z) - тот же процесс сохраняется, когда конфигурация применяется в момент загрузки роутера. Сам конфиг апплета находится в самом конце конфиг файла (даже после ntp секции), поэтому Вам не стоит особо переживать о том, что Вы можете раньше времени запустить апплет для конфигурации EPC. В качестве Event Detector я наверное бы предложил использовать либо Syslog Event Detector (лучше) ну или Timer Event Detector (хуже).

  • ну скажем длительность работы EPC Вы можете контролировать самостоятельно, например:
ASR1001X-631#monitor capture TEST limit ?
duration Limit total duration of capture in seconds
every Limit capture to one in every nth packet
packet-len Limit the packet length to capture
packets Limit number of packets to capture
pps Limit number of packets per second to capture

Со стороны EEM Вы можете кониролировать как время задержки запуска самого апплета так и время ожидания между выполнениями комманд внутри этого апплета. Для задания времени задержки апплета я предлагаю использовать Event Detector TIMER (countdown), а для вот для задания интервала между выполненяими команд внутри апплета можно использовать либо WAIT либо nested EEM с опцией "sync" (детальнее про опции здесь: http://blog.ipspace.net/2011/01/eem-event-cli-command-options-and.html). Хочу заметить, что WAIT появился только начиная с EEM ver.4.0, что не является проблемой для большинства ISR G1/G2, которые работают на 15M&T, но для 6500 и 7600, которые до сих пор могут работать на 12.2SX отсутствие WAIT может стать неприятным сюрпризом.

Пример использования WAIT и WATCHDOG при решении CSCut56029 (по факту потом оказалось, что при большом количестве "show" команд, лучше для этих целей использовать TCL-policy, лично мое мнение):

event manager scheduler script thread class default number 1
event manager applet xdr_timeout
event syslog pattern ".*FIB.*FIBDISABLE.*" maxrun 40
action 0.1 syslog priority 5 msg "Potential IPC/XDR problem is detected... Start collecting info..."
action 0.2 cli command "enable"
action 0.3 cli command "term exec prompt timestamp"
action 0.4 cli command "debug fm fie error all"
action 0.5 cli command "debug fm fie unusual"
action 0.6 cli command "debug platform software acl all level error switch 1 module 5"
action 1.1 syslog priority 5 msg "Starting info collection..."
action 1.2 set iter 0
action 1.4 while $iter lt 3
action 1.5 syslog priority 5 msg "Probe # $iter"
action 1.55 file open logfile bootdisk:ipc_xdr.log a+
action 1.6 file puts logfile "============= BEGIN PROBE # $iter ================"
action 1.65 file close logfile
action 1.7 cli command "show ipc status | append bootdisk:ipc_xdr.log"
action 1.8 cli command "show ipc watermark | append bootdisk:ipc_xdr.log"
action 1.9 cli command "show ipc session all verbose | append bootdisk:ipc_xdr.log"
action 2.0 cli command "show ipc ports | append bootdisk:ipc_xdr.log"
action 2.1 cli command "show ipc ports open | append bootdisk:ipc_xdr.log"
action 2.2 cli command "show ipc rpc | append bootdisk:ipc_xdr.log"
action 2.3 cli command "show ipc queue | append bootdisk:ipc_xdr.log"
action 2.4 cli command "show eobc | append bootdisk:ipc_xdr.log"
action 2.5 cli command "show ibc | append bootdisk:ipc_xdr.log"
action 2.6 cli command "show logging | append bootdisk:ipc_xdr.log"
action 2.65 file open logfile bootdisk:ipc_xdr.log a+
action 2.7 file puts logfile "============= END PROBE # $iter ================"
action 2.75 file close logfile
action 2.8 wait 3
action 2.9 increment iter
action 3.0 end
action 3.2 cli command "no debug fm fie error all"
action 3.3 cli command "no debug fm fie unusual"
action 3.4 cli command "no debug platform software acl all level error switch 1 module 5"
action 3.5 cli command "term no exec prompt timestamp"
action 3.6 syslog priority 5 msg "EEM collect is finished... Will reload the peer just now."
action 3.7 cli command "write memory"
action 3.8 cli command "redundancy reload peer" pattern "confirm"
action 3.9 cli command "y"
action 4.0 exit
event manager applet eem_output authorization bypass
event timer watchdog time 3600
action 1.1 cli command "enable"
action 1.2 cli command "show clock | append bootdisk:ipc_eem.txt"
action 1.3 cli command "show heartbeat | append bootdisk:ipc_eem.txt"
action 1.4 cli command "show icc status det | append bootdisk:ipc_eem.txt"
action 1.5 cli command "show platform hardware interrupt | append bootdisk:ipc_eem.txt"
action 1.6 cli command "remote command standby-rp show icc status det | append bootdisk:ipc_eem.txt"
action 1.7 cli command "remote command standby-rp show heartbeat | append bootdisk:ipc_eem.txt"
action 1.8 cli command "remote command standby-rp show platform hardware interrupt | append bootdisk:ipc_eem.txt"
action 1.9 cli command "show switch virtual link | append bootdisk:ipc_eem.txt"
action 2.0 cli command "remote command standby-rp show switch virtual link | append bootdisk:ipc_eem.txt"
action 2.1 cli command "show proc cpu sort | append bootdisk:ipc_eem.txt"
action 2.2 cli command "remote command standby-rp show proc cpu sort | append bootdisk:ipc_eem.txt"
action 2.3 exit
223
Просмотры
0
Полезный материал
10
Ответы