Всем привет, я написал простой скрипт для мониторинга температуры CCR (я выбрал system<50°C и CPU<60°C) и состояния блока питания. Если что-то пойдет не так, роутер отправит предупреждающее письмо с дополнительной информацией об устройстве. Чтобы не засорять вашу почту, разрешено отправлять только одно письмо в день. Конечно, можно мониторить устройства с помощью Dude или SNMP, но мне больше нравится этот способ. Также не забудьте настроить параметры почтового клиента. [/tools email] Буду рад любым исправлениям, предложениям и улучшениям!
Формат письма
Тема: Warning from CCR-name IP:X.X.X.X
Текст:
Warning Indicators Measurements
Sys.Temp: 31C
CPU Temp: 52C
PSU1 state: ok
PSU2 state: false
Device Details
Identity: CCR-name
Model: CCR1009-7G-1C-1S+
Serial Number: XXXXXXXXXXXXX
ROS Version: 6.37.1 (stable)
Firmware: 3.33
Free Memory: 1737MiB
System Uptime: 7w4d10:31:01
# Скрипт мониторинга состояния роутера (только для CCR)
# Версия скрипта 1.0
# Адрес получателя предупреждающих писем
:local toEmail "RECIPIENT@ADDRESS.COM";
# Целочисленное значение температуры
:local systemTemp [:tonum [/system health get temperature]];
:local cpuTemp [:tonum [/system health get cpu-temperature]];
# Состояние блоков питания (ok / false)
:local PSU1state [/system health get psu1-state];
:local PSU2state [/system health get psu2-state];
#DEBUG
#:set PSU2state "false";
# ЗАДАЕМ МАКСИМАЛЬНЫЕ ЗНАЧЕНИЯ ТЕМПЕРАТУРЫ
if ($systemTemp>=50 || $cpuTemp>=60 || $PSU1state!="ok" || $PSU2state!="ok") do={
# Получаем имя устройства, модель, серийник, версию ROS и прошивку
:local deviceName [/system identity get name];
:local model [/system routerboard get model];
:local serialNum [/system routerboard get serial-number];
:local rosVersion [/system resource get version];
:local deviceFirmware [/system routerboard get current-firmware];
# Свободная ОЗУ (МБ)
:local freeRam (([:tonum [/system resource get free-memory]]/1024)/1024)
# Время работы системы
:local sysUptime [/system resource get uptime];
# Публичный IP-адрес
:local currentIP [:resolve myip.opendns.com server=208.67.222.222];
#DEBUG
#:log info $systemTemp;
#:log info $cpuTemp;
# Тема письма
:local mailSubject ("Warning from ".$deviceName." IP:".$currentIP);
# Текст письма
:local mailBody ("Warning Indicators Measurements
Sys.Temp: ".$systemTemp."C
CPU Temp: ".$cpuTemp."C
PSU1 state: ".$PSU1state."
PSU2 state: ".$PSU2state."\n\n
Device Details
Identity: ".$deviceName."
Model: ".$model."
Serial Number: ".$serialNum."
ROS Version: ".$rosVersion."
Firmware: ".$deviceFirmware."
Free Memory: ".$freeRam."MiB
System Uptime: ".$sysUptime);
#DEBUG
#:log info $mailSubject;
#:log info $mailBody;
:global mailDate;
:local currentDate [/system clock get date;];
if ($mailDate != $currentDate) do={
# Отправляем письмо с предупреждением
/tool e-mail send body=$mailBody start-tls=yes subject=$mailSubject to=$toEmail
:set mailDate $currentDate;
}
}
Планировщик — каждый час, скрипт, настройка почтового клиента
# jan/22/2018 12:28:17 by RouterOS 6.33.3
# software id = XXXX-XXXX
/system scheduler
add interval=1h name=HealthMonitor on-event=CCR-HealthMonitor policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-time=startup
/system script
add name=CCR-HealthMonitor owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive source="# Router Health Monitor Script (for CCR ONLY)\r\n# Script V1.0\r\n# WARNING EMAIL RECIPIENT ADDRESS\r\n:local toEmail \"RECIPIENT@ADDRESS.com\";\r\n\r\n# integer temperature\r\n:local systemTemp [:tonum [/system health get temperature]];\r\n:local cpuTemp [:tonum [/system health get cpu-temperature]];\r\n\r\n# ok / false\r\n:local PSU1state [/system health get psu1-state];\r\n:local PSU2state [/system health get psu2-state];\r\n\r\n#DEBUG\r\n#:set PSU2state \"false\";\r\n\r\n# SET MAXIMUM TEMPERATURE VALUES\r\nif (\$systemTemp>=50 || \$cpuTemp>=60 || \$PSU1state!=\"ok\" || \$PSU2state!=\"ok\") do={\r\n\r\n# Get system name,model,serial,ros version,firmware\r\n:local deviceName [/system identity get name];\r\n:local model [/system routerboard get model];\r\n:local serialNum [/system routerboard get serial-number];\r\n:local rosVersion [/system resource get version];\r\n:local deviceFirmware [/system routerboard get current-firmware];\r\n\r\n# Free Ram (MB)\r\n:local freeRam (([:tonum [/system resource get free-memory]]/1024)/1024)\r\n\r\n# System Uptime \r\n:local sysUptime [/system resource get uptime];\r\n\r\n#Public IP address\r\n:local currentIP [:resolve myip.opendns.com server=208.67.222.222];\r\n\r\n#DEBUG\r\n#:log info \$systemTemp;\r\n#:log info \$cpuTemp;\r\n\r\n#Email Subject\r\n:local mailSubject (\"Warning from \".\$deviceName.\" IP:\".\$currentIP);\r\n#Email Body\r\n:local mailBody (\"Warning Indicators Measurements\r\nSys.Temp: \".\$systemTemp. \"C\r\nCPU Temp: \" . \$cpuTemp.\"C\r\nPSU1 state: \".\$PSU1state.\"\r\nPSU2 state: \".\$PSU2state.\"\\n\\n\r\nDevice Details\r\nIdentity: \".\$deviceName. \"\r\nModel: \".\$model. \"\r\nSerial Number: \".\$serialNum. \"\r\nROS Version: \".\$rosVersion.\"\r\nFirmware: \".\$deviceFirmware. \"\r\nFree Memory: \".\$freeRam. \"MiB\r\nSystem Uptime: \".\$sysUptime);\r\n\r\n#DEBUG\r\n#:log info \$mailSubject;\r\n#:log info \$mailBody;\r\n\r\n:global mailDate;\r\n:local currentDate [/system clock get date;];\r\n\r\n if (\$mailDate!=\$currentDate) do={\r\n #Send warning email\r\n /tool e-mail send body=\$mailBody start-tls=yes subject=\$mailSubject to=\$toEmail\r\n :set mailDate \$currentDate;\r\n }\r\n}\r\n"
/tool e-mail
set address=smtp.office365.com from=your@email.com password="yourpassword" port=587 start-tls=yes user=yourUsername
Формат письма
Тема: Warning from CCR-name IP:X.X.X.X
Текст:
Warning Indicators Measurements
Sys.Temp: 31C
CPU Temp: 52C
PSU1 state: ok
PSU2 state: false
Device Details
Identity: CCR-name
Model: CCR1009-7G-1C-1S+
Serial Number: XXXXXXXXXXXXX
ROS Version: 6.37.1 (stable)
Firmware: 3.33
Free Memory: 1737MiB
System Uptime: 7w4d10:31:01
# Скрипт мониторинга состояния роутера (только для CCR)
# Версия скрипта 1.0
# Адрес получателя предупреждающих писем
:local toEmail "RECIPIENT@ADDRESS.COM";
# Целочисленное значение температуры
:local systemTemp [:tonum [/system health get temperature]];
:local cpuTemp [:tonum [/system health get cpu-temperature]];
# Состояние блоков питания (ok / false)
:local PSU1state [/system health get psu1-state];
:local PSU2state [/system health get psu2-state];
#DEBUG
#:set PSU2state "false";
# ЗАДАЕМ МАКСИМАЛЬНЫЕ ЗНАЧЕНИЯ ТЕМПЕРАТУРЫ
if ($systemTemp>=50 || $cpuTemp>=60 || $PSU1state!="ok" || $PSU2state!="ok") do={
# Получаем имя устройства, модель, серийник, версию ROS и прошивку
:local deviceName [/system identity get name];
:local model [/system routerboard get model];
:local serialNum [/system routerboard get serial-number];
:local rosVersion [/system resource get version];
:local deviceFirmware [/system routerboard get current-firmware];
# Свободная ОЗУ (МБ)
:local freeRam (([:tonum [/system resource get free-memory]]/1024)/1024)
# Время работы системы
:local sysUptime [/system resource get uptime];
# Публичный IP-адрес
:local currentIP [:resolve myip.opendns.com server=208.67.222.222];
#DEBUG
#:log info $systemTemp;
#:log info $cpuTemp;
# Тема письма
:local mailSubject ("Warning from ".$deviceName." IP:".$currentIP);
# Текст письма
:local mailBody ("Warning Indicators Measurements
Sys.Temp: ".$systemTemp."C
CPU Temp: ".$cpuTemp."C
PSU1 state: ".$PSU1state."
PSU2 state: ".$PSU2state."\n\n
Device Details
Identity: ".$deviceName."
Model: ".$model."
Serial Number: ".$serialNum."
ROS Version: ".$rosVersion."
Firmware: ".$deviceFirmware."
Free Memory: ".$freeRam."MiB
System Uptime: ".$sysUptime);
#DEBUG
#:log info $mailSubject;
#:log info $mailBody;
:global mailDate;
:local currentDate [/system clock get date;];
if ($mailDate != $currentDate) do={
# Отправляем письмо с предупреждением
/tool e-mail send body=$mailBody start-tls=yes subject=$mailSubject to=$toEmail
:set mailDate $currentDate;
}
}
Планировщик — каждый час, скрипт, настройка почтового клиента
# jan/22/2018 12:28:17 by RouterOS 6.33.3
# software id = XXXX-XXXX
/system scheduler
add interval=1h name=HealthMonitor on-event=CCR-HealthMonitor policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-time=startup
/system script
add name=CCR-HealthMonitor owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive source="# Router Health Monitor Script (for CCR ONLY)\r\n# Script V1.0\r\n# WARNING EMAIL RECIPIENT ADDRESS\r\n:local toEmail \"RECIPIENT@ADDRESS.com\";\r\n\r\n# integer temperature\r\n:local systemTemp [:tonum [/system health get temperature]];\r\n:local cpuTemp [:tonum [/system health get cpu-temperature]];\r\n\r\n# ok / false\r\n:local PSU1state [/system health get psu1-state];\r\n:local PSU2state [/system health get psu2-state];\r\n\r\n#DEBUG\r\n#:set PSU2state \"false\";\r\n\r\n# SET MAXIMUM TEMPERATURE VALUES\r\nif (\$systemTemp>=50 || \$cpuTemp>=60 || \$PSU1state!=\"ok\" || \$PSU2state!=\"ok\") do={\r\n\r\n# Get system name,model,serial,ros version,firmware\r\n:local deviceName [/system identity get name];\r\n:local model [/system routerboard get model];\r\n:local serialNum [/system routerboard get serial-number];\r\n:local rosVersion [/system resource get version];\r\n:local deviceFirmware [/system routerboard get current-firmware];\r\n\r\n# Free Ram (MB)\r\n:local freeRam (([:tonum [/system resource get free-memory]]/1024)/1024)\r\n\r\n# System Uptime \r\n:local sysUptime [/system resource get uptime];\r\n\r\n#Public IP address\r\n:local currentIP [:resolve myip.opendns.com server=208.67.222.222];\r\n\r\n#DEBUG\r\n#:log info \$systemTemp;\r\n#:log info \$cpuTemp;\r\n\r\n#Email Subject\r\n:local mailSubject (\"Warning from \".\$deviceName.\" IP:\".\$currentIP);\r\n#Email Body\r\n:local mailBody (\"Warning Indicators Measurements\r\nSys.Temp: \".\$systemTemp. \"C\r\nCPU Temp: \" . \$cpuTemp.\"C\r\nPSU1 state: \".\$PSU1state.\"\r\nPSU2 state: \".\$PSU2state.\"\\n\\n\r\nDevice Details\r\nIdentity: \".\$deviceName. \"\r\nModel: \".\$model. \"\r\nSerial Number: \".\$serialNum. \"\r\nROS Version: \".\$rosVersion.\"\r\nFirmware: \".\$deviceFirmware. \"\r\nFree Memory: \".\$freeRam. \"MiB\r\nSystem Uptime: \".\$sysUptime);\r\n\r\n#DEBUG\r\n#:log info \$mailSubject;\r\n#:log info \$mailBody;\r\n\r\n:global mailDate;\r\n:local currentDate [/system clock get date;];\r\n\r\n if (\$mailDate!=\$currentDate) do={\r\n #Send warning email\r\n /tool e-mail send body=\$mailBody start-tls=yes subject=\$mailSubject to=\$toEmail\r\n :set mailDate \$currentDate;\r\n }\r\n}\r\n"
/tool e-mail
set address=smtp.office365.com from=your@email.com password="yourpassword" port=587 start-tls=yes user=yourUsername
