Скрипт выполняет замер уровня загруженности процессора устройства MikroTik, через определенный промежуток времени. Вычисляет среднюю загрузку процессора. Отправляет уведомление на электронную почту или Telegram сообщение при превышении порога загрузки CPU, а так же динамику загрузки CPU.
Так же, скрипт можно использовать для мониторинга загрузки CPU и записи результатов в журнал устройства MikroTik. Так же можно добавить возможность сохранения результатов в файл.
Содержание
Статья на других языках:
?? — MikroTik Script: Device processor overload notification
?? — MikroTik Script: Notificación de sobrecarga del procesador del dispositivo
?? — MikroTik Script: Notification de surcharge du processeur de périphérique
?? — MikroTik Script: Benachrichtigung über Überlastung des Gerätes Prozessors
?? — MikroTik-script: Melding over overbelasting van apparaat processor
Описание работы скрипта
Укажите порог превышения (проценты загрузки CPU) — DeviceAverageLoadThreshold и количество измерений — NumberOfMeasurements. Интервал проведения измерений 2 секунды. В случае превышения порогового значения, в сообщении будут указаны результаты замеров, для оценки динамики нагрузки.
Не устанавливаете DeviceAverageLoadThreshold слишком высоким — это среднее значение, начните с 40% и если уведомления будут приходить часто, но при этом загрузка устройства не будет вызывать проблем, понемногу увеличивайте порог срабатывания скрипта.
Если при запуске скрипта «проверка загрузки процессора MikroTik» будет обнаружен уже запущенный экземпляр скрипта, скрипт не будет запущен дважды, а в журнал устройства выведется предупреждение.
При каждом запуске скрипта, даже если пороговое значение AverageCPULoad не превышено, в журнал устройства записывается строка вида:
Average CPU load = 6%
Это полезно при тестировании, но вы можете закомментировать или удалить эту строку:
#:log info "Average CPU load = $AverageCPULoad%";
Скрипт отправляет уведомление на электронную почту и Telegram сообщение, используя функции:
Сообщение содержит:
- Средняя загрузка процессора (проведенные измерения);
- Модель CPU устройства;
- Порог срабатывания скрипта (нагрузка процессора);
- Количество проведённых измерений;
- Нагрузка CPU по каждому измерению.
Если вам не требуется какой-то из видов уведомлений — удалите секцию вызова из текста скрипта.
Создать скрипт
Для запуска скрипта необходимы разрешения: read, write, test, policy.
[System] -> [Scripts] -> [+] -> [Name: CPUOverloadCheck] -> [Policy: read, write, test, policy]
Код скрипта:
:local DeviceAverageLoadThreshold 25;
:local NumberOfMeasurements 5;
:local DeviceName [/system identity get name];
:local Time [/system clock get time];
:local Date [/system clock get date];
:local CPUModel [/system resource get cpu];
:local Load 0;
:local Message "";
:for Measurement from=1 to=$NumberOfMeasurements do={
:local CPULoad [/system resource get cpu-load];
:set Load ($Load + $CPULoad);
:set Message ($Message . [:tostr $CPULoad] . "% ");
:delay 5s;
}
:local AverageCPULoad ($Load / $NumberOfMeasurements);
:log info "Average CPU load = $AverageCPULoad%";
if ($AverageCPULoad > $DeviceAverageLoadThreshold) do={
:set Message "CPU $CPUModel utilization exceeded $DeviceAverageLoadThreshold% threshold. Result of $NumberOfMeasurements CPU load measurements: $Message";
# START SEND EMAIL
:local SendTo "notify@mhelp.pro";
:local Subject "\F0\9F\A5\B5 CPU Average Overload $AverageCPULoad%: $DeviceName [$Date $Time]";
:local MessageText "$Message";
:local FileName "";
:local SendEmail [:parse [/system script get SendEmailFunction source]];
$SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END SEND EMAIL
# START SEND TELEGRAM
:local MessageText "\F0\9F\A5\B5 <b>$DeviceName: CPU Average Overload $AverageCPULoad%.</b> $Message";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
# END SEND TELEGRAM
}
Добавить скрипт в планировщик
Для запуска скрипта необходимы разрешения: read, write, test, policy.
В скрипте задания, в переменной ScriptName укажите название скрипта, в примере CPUOverloadCheck. Это необходимо для проверки уже запущенного скрипта.
Для обычных случаев интервал проверки — 5 минут, вполне достаточен, но вы можете уменьшить интервал проверки для лучшей диагностики устройства.
Создайте задание:
[System] -> [Schedule] -> [+] -> [Name: CPUOverloadCheck] —> [Interval: 00:05:00] -> [Policy: read, write, policy, test]
Код скрипта:
:local ScriptName "CPUOverloadCheck";
:local ScriptRunning [system script job find where script=$ScriptName];
:if ($ScriptRunning) do={
:log info "The script $ScriptName cannot be run, the script is already running (Change the NumberOfMeasurements to reduce the script)";
} else={
/system script run $ScriptName;
}
? Совет: если используется множество скриптов, для снижения одномоментной нагрузки, добавьте смещение в параметр Start Time (смотрите скриншот).
? Как создать скрипт — проверка загрузки процессора устройства MikroTik и отправка уведомления на электронную почту или сообщение Telegram, обсуждалось в этой статье. Теперь вы сможете увеличить контроль над устройствами MikroTik и перегрузка CPU устройства не возникнет неожиданно. Однако, если вы столкнетесь с каким-то проблемами при настройке скрипта, не стесняйтесь написать в комментариях. Я постараюсь помочь.
Скрипт проверен: hAP ac lite [RouterBOARD 952Ui-5ac2nD], RouterOS 6.47.8 (stable).
на 7.5 не работает? что-то с переменными, в чат тест отправляет если переменную $MessageText превратить в значение через «»
Спасибо, дружище! Взял себе на вооружение, чутка под себя переделал и в «бой». В любом случае, ты мой кумир.
Николай, большое спасибо за приятный отзыв!