Важно!
На данный момент функционал NQA поддерживается на следующих сериях коммутаторов SNR: S2989G, S2995G, S3850G, S300G, S4650X, S7550.
В данной статье принцип работы функционала будет рассмотрен на модели SNR-S2995G-24FX, на остальных моделях и сериях все работает идентично.
Что такое IP SLA или NQA
Про функционал IP SLA есть большое кол-во статей в сети Интернет (например, можно почитать о нем здесь или здесь). Но для общего понимания дадим краткое пояснение.
Изначально Cisco IP SLA (Internet Protocol Service Level Agreement) являлась функцией программного обеспечения Cisco IOS, которая предоставляла пользователям возможность анализировать уровень обслуживания IP для приложений и сервисов путем постоянной генерации трафика каким-либо надежным способом.
Но это не просто мониторинг сети, на основе данного анализа устройство с IP SLA способно напрямую влиять на процесс маршрутизации путем отслеживания характеристик, и в зависимости от результатов могут быть внесены изменения в конфигурацию: например, переключение на резервный линк при наличии потерь на основном, отправка сообщений на syslog-сервер / SNMP-трапов при каких-то критических событиях и т.д.
Затем данный функционал появился и у других производителей. Где-то он даже называется по-другому, например, на многих вендорах этот функционал существует под именем NQA (Network Quality Analysis), в том числе и на коммутаторах SNR.
Конфигурация NQA на коммутаторах SNR
В качестве примера мы рассмотрим работу функционала на модели SNR-S2995G-24FX. Существуют самые разные сценарии тестирования, мы разберем на примере самого простого - icmp-echo. Но, в любом случае, рассмотрим все команды, которые относятся к функционалу NQA.
SNR-S2995G-24FX(config)#nqa ? agent Network Quality Analyzer client alarm Alarm funciton entry entry server service traps Traps funciton
Устройство (коммутатор в нашем случае) может функционировать как NQA client или NQA server, или может даже иметь обе роли одновременно. Поэтому существуют настройки для NQA client и для NQA server соответственно.
Рассмотрим сначала настройки для сервера.
NQA server
NQA server - это дополнительный функционал для работы UDP/TCP (для тестов с помощью данных протоколов). Обычно для работы tcp probe или udp probe, или других способов тестирования, не требуется включать роль сервера на целевом устройстве, потому что оно и так должно по умолчанию слушать запросы и отвечать на них. Однако в определенных сценариях все-таки может потребоваться включить сервер, который будет слушать наши запросы и отправлять ответы (пример рассмотрим чуть ниже). Именно для таких случаев необходимо включать NQA server:
SNR-S2995G-24FX(config)#nqa server ? tcp-port NQA TCP server port udp-port NQA UDP server port <cr> SNR-S2995G-24FX(config)#nqa server SNR-S2995G-24FX(config)#
По умолчанию NQA server отключен. Для каждого типа (TCP/UDP) может быть назначен только один порт (т.е. один для TCP и один для UDP), если настроим, к примеру, еще один порт для UDP, то существующее значение будет просто перезаписано.
Чтобы настроить транспортный порт для NQA-сервера, обязательно вначале включить сам сервер, в противном случае коммутатор выдаст ошибку:
SNR-S2989G-48TX(config)#nqa server ? tcp-port NQA TCP server port udp-port NQA UDP server port <cr> SNR-S2989G-48TX(config)#nqa server tcp-port ? <1-65535> port num <1-65535> SNR-S2989G-48TX(config)#nqa server tcp-port 4000 Error: the nqa server is disable, please enable first!
Можно настроить NQA server даже для определенного VRF:
SNR-S2995G-24FX(config)#nqa server tcp-port 4000 ? vrf nqa vrf name <cr>
Рассмотрим пример, когда данный функционал может быть полезен. Допустим, у нас есть один коммутатор-клиент (о настройках клиента поговорим чуть позже), мы выполняем NQA тест с помощью инструментов TCP или UDP, то есть отправляем пакеты tcp-probe или udp-probe на определенный адрес и порт назначения. Если мы используем какой-то стандартный (общеизвестный) транспортный порт, который целевое устройство и так прослушивает, то мы получим ответ на свой запрос (например, TCP порты 22,23,80, которые коммутатор и так слушает).
Но если мы укажем какой-то нестандартный порт (как в примере выше - порт 4000, или даже стандартный порт 23, но типа UDP, а не TCP), то при настройках по умолчанию (то есть с отключенным сервером) мы не получим на него ответ, если не включим NQA server на другом устройстве и не укажем порт, который необходимо прослушивать. Так мы не получим ответ на свои запросы, и тест будет провален.
В остальных случаях функционал сервера использовать необязательно.
На этом настройки для сервера заканчиваются, все остальные настройки далее актуальны для NQA клиента.
NQA client
По умолчанию функционал NQA client так же отключен, и, чтобы все работало, нужно сперва глобально включить NQA agent (клиент) на коммутаторе:
SNR-S2995G-24FX(config)#nqa agent ? <cr> SNR-S2995G-24FX(config)#nqa agent SNR-S2995G-24FX(config)#
Далее необходимо создать NQA запись:
SNR-S2995G-24FX(config)#nqa entry ? <1-64> id SNR-S2995G-24FX(config)#nqa entry 1 ? alarm Alarm funciton clear Reset functions datasize datasize of packet description nqa description<1-64> fail-percent fail-percent in one cycle frequency cycle of probes probe-count probe times in one cycle probe-threshold threshold of probe probe-timeout timeout of probe records-result nqa records num start enable or start function tos tos of packet traps Traps funciton ttl ttl of packet type type of nqa example tcp,udp
Для начала выберем тип NQA записи:
SNR-S2995G-24FX(config)#nqa entry 1 type ? dhcp dhcp probe icmp-echo icmp-echo probe icmp-jitter icmp-jitter probe tcp tcp probe udp-echo udp probe udp-jitter udp-jitter probe
Для одной записи может быть выбран только один тип NQA проверки. То есть, например, для nqa entry 1 только icmp-echo, для nqa entry 2 только icmp-jitter, для nqa entry 3 тоже только icmp-jitter, для nqa entry 4 только udp-echo и т.д.
Как уже сказали, в рамках данного теста нас интересует icmp-echo, хотя вообще на коммутаторе доступны и другие варианты, мы для теста выберем самый простой:
SNR-S2995G-24FX(config)#nqa entry 1 type icmp-echo ? dest-ip destination ip address
Далее, собственно, нужно указать IP-адрес назначения, на который будут отправляться пакеты для проверки:
SNR-S2995G-24FX(config)#nqa entry 1 type icmp-echo dest-ip ? A.B.C.D IP Address SNR-S2995G-24FX(config)#nqa entry 1 type icmp-echo dest-ip 192.168.1.2
В принципе этого уже достаточно, просто нужно иметь в виду, что можно еще указать различные опции, например, nexthop-адрес или даже выполнять проверку в определенном VRF:
SNR-S2995G-24FX(config)#nqa entry 1 type icmp-echo dest-ip 192.168.1.2 ? nexthop-ip nexthop src-ip source ip address vrf nqa vrf name <cr>
NQA entry X
Вернемся к созданию NQA записи. Рассмотрим какие еще есть возможности для настройки.
SNR-S2995G-24FX(config)#nqa entry 1 ? alarm Alarm funciton clear Reset functions datasize datasize of packet description nqa description<1-64> fail-percent fail-percent in one cycle frequency cycle of probes probe-count probe times in one cycle probe-threshold threshold of probe probe-timeout timeout of probe records-result nqa records num start enable or start function tos tos of packet traps Traps funciton ttl ttl of packet type type of nqa example tcp,udp
Пойдем не по-порядку, начнем либо с самого простого, либо с самого необходимого.
nqa entry X datasize
Данная команда позволяет менять размер пакета, который коммутатор отправляет для теста. Значение по умолчанию - 56 байт. Если сконфигурированное значение datasize будет меньше, чем значение MTU на коммутаторе, то будет использовано значение MTU с добавлением ведущих нулей (padding). Если сконфигурированное значение будет больше, чем значение MTU на коммутаторе, то пакет будет фрагментирован.
SNR-S2995G-24FX(config)#nqa entry 1 datasize ? <1-8100> INTEGER<1-8100> specific datasize (bytes) in an NQA test packet. The default is 56. If the configured datasize is less than the default datasize, the dafault datasize is used SNR-S2995G-24FX(config)#nqa entry 1 datasize 56 ? <cr>
nqa entry X description
Данной командой мы можем добавить описание для конкретной NQA записи:
SNR-S2995G-24FX(config)#nqa entry 1 description ? LINE specific description SNR-S2995G-24FX(config)#nqa entry 1 description nqatest
nqa entry X frequency / nqa entry X probe-count / nqa entry X probe-timeout / nqa entry X records-result
Во время работы NQA функционала периодически отправляются специальные пакеты (как говорили выше, тип этих пакетов/тестов мы можем выбирать сами). Можно сделать, чтобы эти пакеты отправлялись на постоянной основе. Одна отправка такого пакета (или пакетов) называется probe (с англ. "проба" или "исследовать"). Предположим, что тест у нас происходит непрерывно, значит probe пакеты отправляются через какой-то интервал времени.
Можно настроить кол-во отправляемых пакетов в одной итерации (один probe), для этого используется команда nqa entry X probe-count. Значение по умолчанию - 1 (один пакет за итерацию). Изменим это значение на 2:
SNR-S2995G-24FX(config)#nqa entry 1 probe-count ? <1-5> INTEGER<1-5> specific times value. The normal default is 1, The jitter default is 20.
Также можно настроить интервал (частоту) между каждой итерацией (каждым циклом) с помощью команды nqa entry X frequency. Значение по умолчанию - 3 секунды. Изменим на 5 секунд:
SNR-S2995G-24FX(config)#nqa entry 1 frequency ? <3-60> INTEGER<3-60> specific seconds value. The normal default is 3, The jitter default is 40.
Должно соблюдаться следующее условие:
frequency > count * timeout, где count - ранее упомянутый probe-count, а timeout - nqa entry X probe-timeout или время, по истечении которого, если не пришел ответ, тест считается провальным, и начинается следующий тест.
Если условие выше не будет соблюдаться, то коммутатор выдаст следующую ошибку:
SNR-S2995G-24FX(config)#nqa entry 1 probe-timeout 3 please set freq > count * timeout SNR-S2995G-24FX(config)#nqa entry 1 probe-timeout 2
nqa entry X start и просмотр статистики
После настройки обычно стоит вопрос: как посмотреть теперь какую-то информацию или статистику по работе функционала? Есть команды:
SNR-S2995G-24FX#show nqa ? entry entry results nqa results record
entry - посмотреть по какой-то конкретной записи, а results - по всем сразу.
Учитывая, что у нас пока только одна запись, нам все равно, как именно смотреть, поэтому посмотрим статистику конкретно по этой записи:
SNR-S2995G-24FX#show nqa entry ? <1-64> id SNR-S2995G-24FX#show nqa entry 1 ? results nqa results record SNR-S2995G-24FX#show nqa entry 1 results ? | Output modifiers <cr> SNR-S2995G-24FX#show nqa entry 1 results --------------------------------------------------------------
Вывод пустой.
Дело в том, что после того, как мы настроили все, необходимо запустить проверку для данной записи.
Внимание!
После того как проверка будет запущена, изменить параметры записи нельзя.
Коммутатор выдаст следующее сообщение об ошибке:
"The nqa 1 test is in progress, parameters can't be changed."
В данном случае поможет только либо удаление nqa записи, либо остановка теста: 'no nqa entry 1 start'.
Итак, для отправки пакетов нужно сперва активировать NQA запись:
SNR-S2995G-24FX(config)#nqa entry 1 start ? forever Start test forever time-range time-range <cr>
Допустим, мы не выбираем никакие опции и просто запускаем тест.
Получим такой результат:
SNR-S2995G-24FX#sh nqa entry 1 results -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 1, Test 1 result The test is finished. Send operation times: 2 Receive response times: 2 Min/Max/Avg/Sum RTT: 19/47/33/66 RTT Square Sum: 2570 Start probe Time: 2024-07-23 00:04:29 Lost packet ratio: 0% --------------------------------------------------------------
Здесь мы можем увидеть для нашей записи какой тип теста выполнялся (test probe-type, icmp-echo), сколько раз выполнялся тест, сколько раз был получен ответ, время отклика (RTT), время начала теста и его успешность (процент потерь пакетов).
И также видим, что тест завершен (The test is finished).
Дело в том, что если мы не будем выбирать никакие опции при запуске теста для нашей NQA записи, то тест будет выполнен всего один раз.
Если требуется проводить тестирование на постоянной основе, то необходимо выбрать параметр "forever".
Если требуется выполнять тестирование только в какие-то конкретные моменты времени, то можно использовать time-range. Здесь нужно будет указать заранее сконфигурированный на коммутаторе time-range:
SNR-S2995G-24FX(config)#nqa entry 1 start time-range ? WORD time-range name, name length<1-64>
Time-range - независимый функционал, который не привязан к какой-то конкретной технологии, может также, например, использоваться для PoE функционала и т.д.
Сейчас нас сейчас интересует постоянная отправка пакетов, поэтому мы выберем опцию forever, но сперва очистим уже собранную статистику. Сделать это можно командой 'nqa entry X clear' для конкретной записи:
SNR-S2995G-24FX(config)#nqa entry 1 clear ? records NQA probe records SNR-S2995G-24FX(config)#nqa entry 1 clear records ? <cr> SNR-S2995G-24FX(config)#nqa entry 1 clear records SNR-S2995G-24FX(config)#
nqa entry X records-result
Запустим снова тест, но перед этим изменим параметр record-result:
SNR-S2995G-24FX(config)#nqa entry 1 records-result ? <1-10> INTEGER<1-10> Set maximum result records. the default is 5 SNR-S2995G-24FX(config)#nqa entry 1 records-result 3 ? <cr>
Как уже говорилось ранее, когда коммутатор выполняет тест, то это событие называется probe. В одном тесте может быть несколько probe, это параметр probe-count за один цикл теста. Выше мы настроили кол-во таких probe 2 за один цикл. А сейчас мы настроили кол-во отображаемых тестов (циклов) в нашем терминале - 3 (до этого по умолчанию было 5). Посмотрим, что конкретно имеется в виду:
SNR-S2995G-24FX#sh nqa entry 1 results -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 1, Test 1 result The test is finished. Send operation times: 2 Receive response times: 2 Min/Max/Avg/Sum RTT: 19/32/25/51 RTT Square Sum: 1385 Start probe Time: 2024-07-23 00:33:21 Lost packet ratio: 0% -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 2, Test 2 result The test is finished. Send operation times: 2 Receive response times: 2 Min/Max/Avg/Sum RTT: 4/15/9/19 RTT Square Sum: 241 Start probe Time: 2024-07-23 00:33:27 Lost packet ratio: 0% -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 3, Test 3 result The test is finished. Send operation times: 2 Receive response times: 2 Min/Max/Avg/Sum RTT: 4/25/14/29 RTT Square Sum: 641 Start probe Time: 2024-07-23 00:33:32
На экране терминала отображается три последних теста. Однако тест у нас все еще выполняется, потому что мы выбрали выполнение тестирования на постоянной основе. Поэтому если мы обновим результаты, то здесь будет опять три последние записи, но как мы видим, это уже 22, 23 и 24 попытки соответственно:
SNR-S2995G-24FX#sh nqa entry 1 results -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 1, Test 22 result The test is finished. Send operation times: 2 Receive response times: 2 Min/Max/Avg/Sum RTT: 3/25/14/28 RTT Square Sum: 634 Start probe Time: 2024-07-23 00:35:13 Lost packet ratio: 0% -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 2, Test 23 result The test is finished. Send operation times: 2 Receive response times: 2 Min/Max/Avg/Sum RTT: 4/25/14/29 RTT Square Sum: 641 Start probe Time: 2024-07-23 00:35:19 Lost packet ratio: 0% -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 3, Test 24 result The test is finished. Send operation times: 2 Receive response times: 2 Min/Max/Avg/Sum RTT: 3/25/14/28 RTT Square Sum: 634 Start probe Time: 2024-07-23 00:35:24 Lost packet ratio: 0% --------------------------------------------------------------
И за один цикл отправляется два пакета (две пробы), как мы и настраивали (Send operation times: 2).
Для теста снова остановим отправку пакетов, очистим результат и сделаем вывод только двух последних тестов в терминал, кол-во отправляемых probe сделаем 5, а интервал между ними - 20.
То есть будут такие настройки:
nqa entry 1 frequency 20
nqa entry 1 probe-count 5
nqa entry 1 probe-timeout 3
nqa entry 1 records-result 2
Посмотрим результат:
SNR-S2995G-24FX#sh nqa entry 1 results -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 1, Test 1 result The test is finished. Send operation times: 5 Receive response times: 5 Min/Max/Avg/Sum RTT: 19/44/24/120 RTT Square Sum: 3380 Start probe Time: 2024-07-23 00:44:29 Lost packet ratio: 0% -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 2, Test 2 result The test is finished. Send operation times: 5 Receive response times: 5 Min/Max/Avg/Sum RTT: 3/29/17/86 RTT Square Sum: 1828 Start probe Time: 2024-07-23 00:44:49 Lost packet ratio: 0% --------------------------------------------------------------
Как видим, теперь отображается два последних теста, попыток (probe) в каждой итерации сделано 5, интервал между итерациями был 20 секунд.
Таким образом, можно очень гибко настроить сам процесс тестирования и вывод результатов.
Внимание!
Для типа NQA "dhcp-probe" не поддерживается изменение record-result.
Рассмотрим оставшиеся команды касаемо NQA в режиме глобальной конфигурации.
SNR-S2995G-24FX(config)#nqa entry 1 ? alarm Alarm funciton clear Reset functions datasize datasize of packet description nqa description<1-64> fail-percent fail-percent in one cycle frequency cycle of probes probe-count probe times in one cycle probe-threshold threshold of probe probe-timeout timeout of probe records-result nqa records num start enable or start function tos tos of packet traps Traps funciton ttl ttl of packet type type of nqa example tcp,udp
nqa entry X tos
Данная команда позволяет настроить определенный tos (type of service) для отправляемых probe-пакетов. Значение по умолчанию 0:
SNR-S2995G-24FX(config)#nqa entry 1 tos ? <0-255> INTEGER<1-255> specific tos value. The default is 0
nqa entry X ttl
Данная команда позволяет настроить определенный ttl (time to live) для отправляемых probe-пакетов. Значение по умолчанию 30:
SNR-S2995G-24FX(config)#nqa entry 1 ttl ? <1-255> INTEGER<1-255> specific ttl value. The default is 30
nqa entry X fail-percent
Команда используется для определения порога потерь при тестировании. Иными словами, указывается максимальный допустимый процент потерь, и если процент потерь при тестировании будет равен этому значению или превысит его, тест считается неудачным. Значение по умолчанию - 100%:
SNR-S2995G-24FX(config)#nqa entry 1 fail-percent ? <1-100> INTEGER<1-100> Failure packet percent maximum number. the default is 100 SNR-S2995G-24FX(config)#nqa entry 1 fail-percent 95 ? <cr>
nqa entry X probe-threshold
Данная команда используется для указания максимального порога задержки при тестировании, то есть максимальное время ожидания ответа на probe запрос.
SNR-S2995G-24FX(config)#nqa entry 1 probe-threshold ? <50-5000> specific milliseconds of threshold
Причем необходимо обратить внимание, что нельзя указать значение больше, чем значение probe-timeout:
SNR-S2995G-24FX(config)#nqa entry 1 probe-threshold 3100 Error: threshold can't cfg greater than timeout SNR-S2995G-24FX(config)#nqa entry 1 probe-threshold 3000 SNR-S2995G-24FX(config)#nqa entry 1 probe-threshold 50
При превышении значения трешхолда, если включено логирование NQA, в логах увидим запись следующего вида:
Nqa entry 1 icmp-echo probe completion time (59)ms is overthreshold !
И если у нас включена отправка логов и SNMP-трапов, то на сервер будет отправлен соответствующий лог и трап.
nqa entry X alarm / nqa entry X traps
По умолчанию отправка логов о каких-либо событиях в работе NQA отключена. Аналогично и с отправкой SNMP-трапов.
Можно включить отправку как глобально для NQA функционала, так и для какой-то конкретной записи:
SNR-S2995G-24FX(config)#nqa alarm ? enable enable or start function SNR-S2995G-24FX(config)#nqa alarm enable ? <cr> SNR-S2995G-24FX(config)#nqa traps ? enable enable or start function SNR-S2995G-24FX(config)#nqa traps enable ? <cr> SNR-S2995G-24FX(config)#nqa entry 1 alarm enable ? <cr> SNR-S2995G-24FX(config)#nqa entry 1 traps enable ? <cr>
После активации nqa alarm на коммутаторе начнут появляться логи касаемо работы NQA, например, такие:
По умолчанию без включенного nqa alarm, в логе подобных сообщений мы не увидим.
И если на коммутаторе есть настройки для syslog и SNMP-сервера, то будут отправлены соответствующие записи на сервер.
Например, syslog:
Или SNMP-сервер:
Подчеркнем еще раз, что несмотря на то, что мы рассмотрели только один тип теста (icmp-echo) и создавали только одну запись NQA, можно использовать сразу несколько записей, и они могут быть как одного типа, так и разных. Все результаты можно увидеть в выводе команды 'show nqa results'.
NQA track
Команда track позволяет матчить определенные (существующие) NQA записи. Обычно одному track соответствует одна NQA запись (нумерация не обязана быть одинаковой, но для удобства вполне можно делать номера для NQA записи и track одинаковыми):
SNR-S2995G-24FX(config)#track 1 ? list List nqa NQA SNR-S2995G-24FX(config)#track 1 nqa ? <1-64> Nqa entry id SNR-S2995G-24FX(config)#track 1 nqa 1 ? <cr>
Однако возможен и такой вариант, чтобы одному track соответствовало несколько разных NQA записей. Реализовано это может быть через выполнение логических (побитовых) операций AND/OR (И/ИЛИ):
SNR-S2995G-24FX(config)#track 1 ? list List nqa NQA SNR-S2995G-24FX(config)#track 1 list ? boolean Bool configuration SNR-S2995G-24FX(config)#track 1 list boolean ? and And or Or SNR-S2995G-24FX(config)#track 1 list boolean and
После выполнения данной команды мы можем матчить с данным track больше одной NQA записи. В противном случае при попытке привязать к track больше одной NQA записи каждая текущая запись менялась бы на новую.
Как именно реализован режим list (маппинг с одним track больше одной NQA записи), мы рассмотрим чуть позже, когда изучим, что такое applet.
В режиме list с одним track нельзя матчить более трех NQA записей. Также в track нельзя использовать типы записей "jitter" (например, icmp-jitter или udp-jitter), поскольку они просто указывают значение джиттера, но не конкретный результат: success или fail.
Event manager applet
Мы рассмотрели процесс привязки NQA записей к определенному track, но зачем вообще это необходимо, и для чего нужен этот track?
Это, конечно, хорошо, что мы теперь можем мониторить наши каналы связи, получать информационные сообщения при превышении того или иного порога и т.д. Но в таком случае мы могли обойтись простой системой мониторинга.
Функционал NQA - очень гибкий функционал, который на основе мониторинга может выполнять определенные сценарии работы. И для этого нам и требуется event manager applet (даже если переводить дословно с английского: "приложение для менеджера событий", можно примерно догадаться, для чего требуется этот функционал). И именно для event manager applet нам нужен функционал track. Опять же с английского: "track" - отслеживать, таким образом, track матчит определенные NQA записи, и затем этот track ассоциируется с applet.
Допустим, у нас уже есть некий track, которому соответствует некий NQA probe. Рассмотрим принцип конфигурации.
Applet создается довольно просто, необходимо указать ему имя:
SNR-S2995G-24FX(config)#event manager applet ? WORD applet name <1-31> characters SNR-S2995G-24FX(config)#event manager applet test SNR-S2995G-24FX(config-applet-test)#
Затем нужно его ассоциировать с определенным track (пусть это будет наш track 1):
SNR-S2995G-24FX(config-applet-test)#event ? track bind track entry SNR-S2995G-24FX(config-applet-test)#event track ? <1-32> Track entry id SNR-S2995G-24FX(config-applet-test)#event track 1 ? state Track state SNR-S2995G-24FX(config-applet-test)#event track 1 state ? down Down up Up
Что означают состояния down и up в applet, рассмотрим чуть ниже.
Для примера выберем сценарий, когда track переходит в состояние down:
SNR-S2995G-24FX(config-applet-test)#event track 1 state ? down Down up Up SNR-S2995G-24FX(config-applet-test)#event track 1 state down ? <cr> SNR-S2995G-24FX(config-applet-test)#event track 1 state down SNR-S2995G-24FX(config-applet-test)#
Теперь необходимо настроить выполнение какого-либо действия (action).
SNR-S2995G-24FX(config-applet-test)#? commands: show Show running system information action Action end End current mode and change to EXEC mode event Event exit End current mode and down to previous mode help Description of the interactive help system no Negate a command or set its defaults SNR-S2995G-24FX(config-applet-test)#action ? WORD WORD action num, include <0-9>,'.' SNR-S2995G-24FX(config-applet-test)#action 0 ? cli Cli SNR-S2995G-24FX(config-applet-test)#action 0 cli ? command Command SNR-S2995G-24FX(config-applet-test)#action 0 cli command ? WORD Command string SNR-S2995G-24FX(config-applet-test)#action 0 cli command "int e1/0/1" SNR-S2995G-24FX(config-applet-test)#action 1 cli command "shutdown" SNR-S2995G-24FX(config-applet-test)#action 2 cli command "exit" SNR-S2995G-24FX(config-applet-test)#action 3 cli command "int e1/0/2" SNR-S2995G-24FX(config-applet-test)#action 4 cli command "no shut" SNR-S2995G-24FX(config-applet-test)#action 5 cli command "exit" SNR-S2995G-24FX(config-applet-test)#exit
Объясним конфигурацию выше. При сработке какого-либо track (переход из одного состояния в другое), можно настроить выполнение какого-либо действия. Мы можем настроить определенную последовательность команд, которые должен будет выполнить коммутатор поочерди (нумерацию действия можно указывать даже через точку, например, action 1.1, 1.2 и т.д.).
Здесь, как самый простой пример, мы указали, чтобы в случае сработки коммутатор отключил первый порт, и включил второй.
Но необходимо помнить, что мы указываем именно четкую последовательность команд, то есть точно так же, как бы мы делали все самостоятельно в режиме конфигурации коммутатора, то есть мы не просто говорим коммутатору, что в случае чего, необходимо отключить один порт и включить другой. Мы говорим, чтобы сначала коммутатор зашел в конфигурацию одного порта, отключил его, вышел из режима конфигурации порта, затем зашел в режим конфигурации другого порта и т.д.
Таких действий (команд) может быть максимально до 32 на один applet. Команды должны быть указаны в двойных кавычках. С одним applet может быть ассоциирован только один track. Но в то же время, на коммутаторе возможно наличие нескольких applet.
Внимание!
Во избежание непредвиденных ситуаций, таких как захват режима конфигурации коммутатором, рекомендуется дополнительно включать 'multi config access', чтобы не потерять доступ к конфигурации коммутатора.
Теперь вернемся к принципу работы track с несколькими NQA записями, который мы обещали объяснить после разбора applet.
Сначала рассмотрим принцип работы логического ИЛИ (list boolean OR).
Допустим, у нас есть такая конфигурация:
track 1 list boolean or track 1 nqa 1 track 1 nqa 2 ! event manager applet up event track 1 state up action 1.1 cli command "vlan 100" ! event manager applet down event track 1 state down action 1.1 cli command "vlan 200"
В данном случае команда "vlan 100" в applet под названием "up" будет выполнена на коммутаторе только тогда, когда track1 перейдет в состояние up. Команда "vlan 200" в applet под названием "down" будет выполнена только тогда, когда track1 перейдет в состояние down. OR boolean означает, что track1 перейдет в состояние UP только тогда, когда NQA1 ИЛИ/И NQA2 записи будут иметь статус success (то есть хотя бы один успех); track 1 перейдет в состояние DOWN, только тогда, когда обе NQA записи будут иметь статус fail. Под статусом имеется в виду status в выводе данной команды:
SNR-S2995G-24FX#sh track all status Track ID: 1 Notification delay: Positive 0, Negative 0 (in milliseconds) Logical mode: OR Remote-ip: * probe-status: negative protocal: NQA 1 status: success protocal: NQA 2 status: fail
В данном случае, у нас будет создан VLAN 100. Если и NQA1 перейдет в статус fail, тогда track1 перейдет в статус down, и будет создан VLAN 200.
Теперь рассмотрим принцип работы логического И (list boolean AND).
Конфигурация остается идентичной за исключением самой операции:
track 1 list boolean and track 1 nqa 1 track 1 nqa 2
Как и в предыдущем случае, команда "vlan 100" в applet под названием "up" будет выполнена на коммутаторе только тогда, когда track1 перейдет в состояние up. Команда "vlan 200" в applet под названием "down" будет выполнена только тогда, когда track1 перейдет в состояние down. AND boolean означает, что track1 перейдет в состояние UP только тогда, когда NQA1 И NQA2 записи будет иметь статус success (то есть обе одновременно должны иметь успех); track1 перейдет в состояние DOWN, только тогда, когда хотя бы одна NQA запись будет иметь статус fail.
SNR-S2995G-24FX#sh track all status Track ID: 1 Notification delay: Positive 0, Negative 0 (in milliseconds) Logical mode: AND Remote-ip: * probe-status: positive protocal: NQA 1 status: success protocal: NQA 2 status: success
Например, в данном случае, у нас будет создан VLAN 100, потому что обе NQA-записи имеют статус success, значит track будет в состоянии up и выполнится соответствующий applet. И если хотя бы одна NQA-запись перейдет в состояние fail, то track1 сразу же перейдет в состояние down, и будет создан VLAN 200.
Эта логика эквивалента логике побитовых операций логическое И (AND) и логическое ИЛИ (OR).
Пример настройки и работы
В качестве заключения, чтобы закрепить весь материал, изученный выше, выполним определенные настройки и проведем ряд тестов.
Для этого сперва соберем такую схему:
Возьмем самые простые настройки:
vlan 1 ! Interface Ethernet1/0/1 description 1st_uplink ! Interface Ethernet1/0/2 description 2nd_uplink shutdown ! interface Vlan1 ip address 192.168.1.1 255.255.255.0 !
Настроим NQA:
nqa agent nqa alarm enable nqa entry 1 type icmp-echo dest-ip 192.168.1.2 nqa entry 1 frequency 5 nqa entry 1 probe-count 3 nqa entry 1 probe-threshold 150 nqa entry 1 probe-timeout 1 nqa entry 1 records-result 2 ! track 1 nqa 1 ! event manager applet test event track 1 state down action 0 cli command "int e1/0/1" action 1 cli command "shut" action 2 cli command "exit" action 3 cli command "int e1/0/2" action 4 cli command "no shut" action 5 cli command "exit" !
Пока тест идет успешно:
SNR-S2995G-24FX#sh nqa results -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 1, Test 238 result The test is finished. Send operation times: 3 Receive response times: 3 Min/Max/Avg/Sum RTT: 4/20/13/39 RTT Square Sum: 641 Start probe Time: 2024-07-24 01:28:18 Lost packet ratio: 0% -------------------------------------------------------------- NQA entry(1)(test probe-type, icmp-echo) 2, Test 239 result The test is finished. Send operation times: 3 Receive response times: 3 Min/Max/Avg/Sum RTT: 4/19/12/38 RTT Square Sum: 602 Start probe Time: 2024-07-24 01:28:23 Lost packet ratio: 0% --------------------------------------------------------------
Сымитируем падение линка sw1-sw2.
Проверяем, что конфигурация изменилась:
Interface Ethernet1/0/1 description 1st_uplink shutdown ! Interface Ethernet1/0/2 description 2nd_uplink !
Это лишь самый простой пример работы NQA. Функционал этот достаточно гибкий и может быть использован в самых разных сценариях, например, можно применять и другие настройки при срабатывании applet: добавление маршрута, изменение VLAN'ов на порту, включение/отключение какого-то другого функционала на коммутаторе и т.д. Также можно использовать и другие виды тестов помимо icmp-echo, что тоже является неоспоримым плюсом.
Если у вас остались какие-либо вопросы, вы всегда можете обратиться к нам на nag.support.