Уведомление при повышении температуры устройства выше порогового значения. Отправляет уведомление на электронную почту или сообщение в Telegram.
Скрипт отправляет температуру устройства MikroTik, а так же загрузку процессора. Если температура устройства превысила пороговое значение, а загрузка процессора устройства минимальна, возможно проблема во внешней среде (например выход из строя кондиционера в серверной).
Используются функции:
MikroTik скрипт подходит для устройств оснащенных датчиком температуры. Проверено на Mikrotik RB3011UiAS-RM, RouterOS 6.46.4 (stable).
Безопасное значение температуры CPU, будет разным для каждой модели устройств MikroTik, выставляйте значение температуры срабатывания скрипта (MaxCPUTemp), в зависимости от модели вашего устройства (смотрите спецификацию).
Статья на других языках:
?? — MikroTik Scripts: Device overheating notification
?? — MikroTik Scripts: Notificación de sobrecalentamiento del dispositivo
?? — Scripts MikroTik: Notification de surchauffe de l’appareil
?? — MikroTik-Scripts: Benachrichtigung über Überhitzung des Geräts
?? — MikroTik-scripts: Melding over oververhitting van het apparaat
Создать скрипт
Параметр MaxCPUTemp — пороговое значение температуры устройства, при котором будет отправлено уведомление.
Для работы скрипта проверка температуры устройства необходимы разрешения: read, write, test, policy.
[System] -> [Scripts] -> [+] -> [Name: DeviceOverheatingScript] -> [Policy: read, write, test, policy]
Код скрипта:
# Name: DeviceOverheatingNotification v1
# Description: Notification when the device temperature rises above the threshold. Sends notification to email or Telegram message.
# Author: Yun Sergey, MHelp.pro 2020
# License: GPL-3.0 License
# Description, purpose and questions: https://mhelp.pro/mikrotik-scripts-device-overheating-notification/
# More scripts Mikrotik: https://mhelp.pro/tag/mikrotik-scripts/
# Verified: RouterBOARD 3011UiAS, RouterOS 6.47.8 (stable)
:local MaxCPUTemp 65;
:local CurrentTemp [/system health get temperature];
:local CurrentCPULoad [/system resource get cpu-load];
:local DeviceName [/system identity get name ];
:local Time [/system clock get time];
:local Date [/system clock get date];
#:log info "Script DeviceOverheatingNotification - start.";
:if ($CurrentTemp > $MaxCPUTemp) do={
#:log info "Script DeviceOverheatingNotification - Temperature threshold exceeded! Send Telegram message.";
# START Send Telegram Message
:local MessageText "\F0\9F\94\B4 <b>CRITICAL: $DeviceName Device Overheating!</b> %0D%0A Device Temperature: $CurrentTemp %C2%B0 C %0D%0A CPU Load: $CurrentCPULoad %";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
# END Send Telegram Message
#:log info "Script DeviceOverheatingNotification - Temperature threshold exceeded! Send Email.";
# START Send Email
:local SendTo "notify@mhelp.pro";
:local Subject "\F0\9F\94\B4 CRITICAL: $DeviceName [$Date $Time]";
:local MessageText "Device Temperature: $CurrentTemp °C, CPU Load: $CurrentCPULoad %";
:local FileName "";
:local SendEmail [:parse [/system script get SendEmailFunction source]];
$SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END Send Email
}
#:log info "Script DeviceOverheatingNotification - end.";
Добавить скрипт в Планировщик
Для запуска скрипта проверка температуры устройства MikroTik необходимы разрешения: read, write, test, policy.
[System] -> [Schedule] -> [+] -> [Name:CheckDeviceOverheating] —> [Interval: 00:01:00] -> [Policy: read, write, policy, test]
Или введите в терминале:
/system scheduler add name=CheckDeviceOverheating policy=read,write,policy,test on-event="/system script run DeviceOverheatingScript" interval=1m comment="Checking device overheating"
Теперь вы сможете увеличить контроль над вашим устройством, отслеживая важный параметр — температура устройства!
? Как создать скрипт проверка перегрева устройства MikroTik и отправка уведомления на электронную почту или сообщение Telegram, обсуждалось в этой статье. Я надеюсь, что теперь вы сможете получить уведомление о перегреве устройства MikroTik и загрузке CPU вовремя. Однако, если вы столкнетесь с каким-то проблемами при настройке скрипта, не стесняйтесь написать в комментариях. Я постараюсь помочь.
Насколько я понял в RouterOS 7 изменили System/Health, т.к. локальная переменная не могла получить значение.
Решение данного вопроса:
:local CurrentTemp [/system/health/get value-name=value &id];
Было проверено на RouterOS 7.9.2
у меня нее запустилось.
Заработала эта строка:
:local CurrentTemp [/system/health get value-name=value number=1];
Скрипт отправки сообщения в телеграм, работает на модели hEX, но не завёлся на модели CCR1009-7G-1C-1S+
Подскажите куда копать?
Здравствуйте. Обновил код скрипта, добавил логи. Раскомментируйте строки #:log info (уберите символ # в начале строки).
Диагностика:
Отключите запуск скрипта из планировщика, запускайте скрипт вручную.
1. Запустите скрипт, где MaxCPUTemp = 65;
2. Скрипт должен выдать в журнал устройства сообщения: Script DeviceOverheatingNotification — start. и Script DeviceOverheatingNotification — end.;
Это значит скрипт отработал корректно.
3. Измените значение MaxCPUTemp = 1;
4. Скрипт должен выдать в журнал устройства сообщения:
— «Script DeviceOverheatingNotification — start» — скрипт запущен корректно;
— «Script DeviceOverheatingNotification — Temperature threshold exceeded! Send Telegram message.» — обнаружен перегрев более 1 градуса, начата отправка сообщения в Телеграм;
— «Script DeviceOverheatingNotification — Temperature threshold exceeded! Send Email.» — сообщение в Телеграм отправлено без ошибок, начинаю отправку email;
— «Script DeviceOverheatingNotification — end.» — сообщение email отправлено корректно, скрипт завершил работу.
Напишите, на каком сообщении у вас прерывается работа скрипта?