Перейти к основному содержимому

Функционал NQA (IP SLA) на коммутаторах SNR

к сведению

На данный момент функционал 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.

Команды для функционала 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:

Пример настройки 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 (клиент) на коммутаторе:

Включаем NQA client
SNR-S2995G-24FX(config)#nqa agent ?
<cr>

SNR-S2995G-24FX(config)#nqa agent
SNR-S2995G-24FX(config)#

Далее необходимо создать NQA запись:

Всего может быть до 64 записей на коммутаторе
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 записи:

Тип 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-адрес назначения, на который будут отправляться пакеты для проверки:

Указываем 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:

Различные опции для dst.ip
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 записи. Рассмотрим какие еще есть возможности для настройки.

Опции для настройки 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 на коммутаторе, то пакет будет фрагментирован.

Настройка datasize
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 записи:

Настройка description
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:

Настройка probe-count
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 секунд:

Настройка frequency
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** или время, по истечении которого, если не пришел ответ, тест считается провальным, и начинается следующий тест.

Если условие выше не будет соблюдаться, то коммутатор выдаст следующую ошибку:

Настройка 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 и просмотр статистики

После настройки обычно стоит вопрос: как посмотреть теперь какую-то информацию или статистику по работе функционала? Есть команды:

show nqa
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 запись:

nqa entry X start
SNR-S2995G-24FX(config)#nqa entry 1 start ?
forever Start test forever
time-range time-range
<cr>

Допустим, мы не выбираем никакие опции и просто запускаем тест.

Получим такой результат:

show nqa entry X results
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:

nqa entry X start 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 для конкретной записи:

nqa entry X clear records
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:

nqa entry X records-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). Посмотрим, что конкретно имеется в виду:

show nqa entry X results (1)
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 попытки соответственно:

show nqa entry X results (2)
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

Посмотрим результат:

show nqa entry X results (3)
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 в режиме глобальной конфигурации:

Опции для настройки 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:

nqa entry X tos
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:

nqa entry X ttl
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%:

nqa entry X fail-percent
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 запрос.

nqa entry X probe-threshold
SNR-S2995G-24FX(config)#nqa entry 1 probe-threshold ?
<50-5000> specific milliseconds of threshold

Причем необходимо обратить внимание, что нельзя указать значение больше, чем значение probe-timeout: nqa entry X probe-threshold error 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, в логах увидим запись следующего вида:
```text title="threshold violation"
Nqa entry 1 icmp-echo probe completion time (59)ms is overthreshold !

И если у нас включена отправка логов и SNMP-трапов, то на сервер будет отправлен соответствующий лог и трап.

nqa entry X alarm / nqa entry X traps

По умолчанию отправка логов о каких-либо событиях в работе NQA отключена. Аналогично и с отправкой SNMP-трапов.

Можно включить отправку как глобально для NQA функционала, так и для какой-то конкретной записи:

nqa entry X alarm / nqa entry X traps
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, например, такие:

logs

По умолчанию без включенного nqa alarm, в логе подобных сообщений мы не увидим.

И если на коммутаторе есть настройки для syslog и SNMP-сервера, то будут отправлены соответствующие записи на сервер.

Например, syslog:

syslog

Или SNMP-сервер:

snmp

Подчеркнем еще раз, что несмотря на то, что мы рассмотрели только один тип теста (icmp-echo) и создавали только одну запись NQA, можно использовать сразу несколько записей, и они могут быть как одного типа, так и разных. Все результаты можно увидеть в выводе команды 'show nqa results'.

NQA track

Команда track позволяет матчить определенные (существующие) NQA записи. Обычно одному track соответствует одна NQA запись (нумерация не обязана быть одинаковой, но для удобства вполне можно делать номера для NQA записи и track одинаковыми):

track X nqa X
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 (И/ИЛИ):

track X list
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 создается довольно просто, необходимо указать ему имя:

event manager 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):

event track X
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:

event track X state
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).

Пример конфигурации applet
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).

Допустим, у нас есть такая конфигурация: Пример конфигурации applet 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 в выводе данной команды:
```text title="show track all status (1)"
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.

show track all status (2)
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).

Пример настройки и работы

В качестве заключения, чтобы закрепить весь материал, изученный выше, выполним определенные настройки и проведем ряд тестов. Для этого сперва соберем такую схему:

scheme

Возьмем самые простые настройки:

Пример тестовой конфигурации
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:
```text title="Тестовая конфигурация 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.

Проверяем, что конфигурация изменилась:

Конфигурация после выполнения applet
Interface Ethernet1/0/1
description 1st_uplink
shutdown
!
Interface Ethernet1/0/2
description 2nd_uplink
!

Это лишь самый простой пример работы NQA. Функционал этот достаточно гибкий и может быть использован в самых разных сценариях, например, можно применять и другие настройки при срабатывании applet: добавление маршрута, изменение VLAN'ов на порту, включение/отключение какого-то другого функционала на коммутаторе и т.д. Также можно использовать и другие виды тестов помимо icmp-echo, что тоже является неоспоримым плюсом.

Если у вас остались какие-либо вопросы, вы всегда можете обратиться к нам на nag.support.