Вот что я сделал, используя стартовый код jspool (спасибо, я тебе пиво должен). Надеюсь, это кому-то поможет. Это оповещение о высоком трафике с последующим вторичным оповещением, когда трафик возвращается к норме… (предполагается, что у вас настроен Tools > Email и созданы собственные элементы Traffic Monitor для входящего/исходящего трафика, высокого/нормального уровня).
################ Планировщик BW Alert (ввести в консоли) ################
/system scheduler add interval=5m name=High-BW-Alert-Int on-event=":global lastHbwStatus;\r\
\n:set \$lastHbwStatus Normal;" policy=read,write,policy,test start-time=startup
################ Скрипт High для ether1 (on event, Traffic Monitor) ################
# Проверяем, существует ли глобальная переменная, если нет – создаём с дефолтным значением
:if (($lastHbwStatus != "Normal") && ($lastHbwStatus != "Alerting")) do={
:global lastHbwStatus
:set $lastHbwStatus Normal
}
# Проверяем, не было ли уже оповещения в этом цикле, если было – игнорируем повтор
:if ($lastHbwStatus = "Normal") do={
# скрипт оповещения
/interface monitor-traffic [/interface find name=ether1] once do={
:local tx (tx-bits-per-second / 1024 / 1024);
:local rx (rx-bits-per-second / 1024 / 1024);
:local txp (tx-packets-per-second);
:local rxp (rx-packets-per-second);
:log error "Входящий трафик слишком высокий на ether1 $rx Мбит/с";
/tool e-mail send body="Входящий трафик слишком высокий на ether1 в $[/system clock get time] \r\n \r\n Входящий BW: $rx Мбит/с \r\n Входящий PPS: $rxp \r\n Исходящий BW: $tx Мбит/с \r\n Исходящий PPS: $txp" subject="Входящий трафик слишком высокий на ether1" to="email@yourcompany.com";
}
:set $lastHbwStatus Alerting
:set $lastNbwStatus Ready
} else={
:log info "Система уже прислала оповещение — пропускаю повтор"
}
################ Скрипт Normalized для ether1 (on event, Traffic Monitor) ################
# Проверяем, существует ли глобальная переменная, если нет – создаём с дефолтным значением
:if (($lastNbwStatus != "Paused") && ($lastNbwStatus != "Ready")) do={
:global lastNbwStatus
:set $lastNbwStatus Paused
}
# Проверяем, было ли вызвано оповещение высокого уровня, если нет – игнорируем
:if ($lastNbwStatus = "Ready") do={
# скрипт оповещения
/interface monitor-traffic [/interface find name=ether1] once do={
:local tx (tx-bits-per-second / 1024 / 1024);
:local rx (rx-bits-per-second / 1024 / 1024);
:local txp (tx-packets-per-second);
:local rxp (rx-packets-per-second);
:log error "Входящий трафик нормализовался на ether1 $rx Мбит/с";
/tool e-mail send body="Входящий трафик нормализовался на ether1 в $[/system clock get time] \r\n \r\n Входящий BW: $rx Мбит/с \r\n Входящий PPS: $rxp \r\n Исходящий BW: $tx Мбит/с \r\n Исходящий PPS: $txp" subject="Входящий трафик нормализовался на ether1" to="email@yourcompany.com";
}
:set $lastNbwStatus Paused
} else={
:log info "Оповещение высокого уровня не сработало — игнорируем"
}
################ Скрипт High для исходящего трафика ether1 (on event, Traffic Monitor) ################
# Проверяем, существует ли глобальная переменная, если нет – создаём с дефолтным значением
:if (($lastHbwStatus != "Normal") && ($lastHbwStatus != "Alerting")) do={
:global lastHbwStatus
:set $lastHbwStatus Normal
}
# Проверяем, было ли уже оповещение в этом цикле, если было – игнорируем повтор
:if ($lastHbwStatus = "Normal") do={
# скрипт оповещения
/interface monitor-traffic [/interface find name=ether1] once do={
:local tx (tx-bits-per-second / 1024 / 1024);
:local rx (rx-bits-per-second / 1024 / 1024);
:local txp (tx-packets-per-second);
:local rxp (rx-packets-per-second);
:log error "Исходящий трафик слишком высокий на ether1 $tx Мбит/с";
/tool e-mail send body="Исходящий трафик слишком высокий на ether1 в $[/system clock get time] \r\n \r\n Входящий BW: $rx Мбит/с \r\n Входящий PPS: $rxp \r\n Исходящий BW: $tx Мбит/с \r\n Исходящий PPS: $txp" subject="Исходящий трафик слишком высокий на ether1" to="email@yourcompany.com";
}
:set $lastHbwStatus Alerting
:set $lastNbwStatus Ready
} else={
:log info "Система уже прислала оповещение — пропускаю повтор"
}
################ Скрипт Normalized для исходящего трафика ether1 (on event, Traffic Monitor) ################
# Проверяем, существует ли глобальная переменная, если нет – создаём с дефолтным значением
:if (($lastNbwStatus != "Paused") && ($lastNbwStatus != "Ready")) do={
:global lastNbwStatus
:set $lastNbwStatus Paused
}
# Проверяем, было ли вызвано оповещение высокого уровня, если нет – игнорируем
:if ($lastNbwStatus = "Ready") do={
# скрипт оповещения
/interface monitor-traffic [/interface find name=ether1] once do={
:local tx (tx-bits-per-second / 1024 / 1024);
:local rx (rx-bits-per-second / 1024 / 1024);
:local txp (tx-packets-per-second);
:local rxp (rx-packets-per-second);
:log error "Исходящий трафик нормализовался на ether1 $tx Мбит/с";
/tool e-mail send body="Исходящий трафик нормализовался на ether1 в $[/system clock get time] \r\n \r\n Входящий BW: $rx Мбит/с \r\n Входящий PPS: $rxp \r\n Исходящий BW: $tx Мбит/с \r\n Исходящий PPS: $txp" subject="Исходящий трафик нормализовался на ether1" to="email@yourcompany.com";
}
:set $lastNbwStatus Paused
} else={
:log info "Оповещение высокого уровня не сработало — игнорируем"
}