Все привет.
На основе этого скрипта можно сделать вывод любой информации
Для себя вывожу все в телеграмм бот.
Можно выводить в простом варианте.
Так и в более вычурном.
При наличии двух провайдеров можно отслеживать их состояние.
И ничего в этом сложного нет.
Я делал это так
1, Объявление глобальной переменной
2, Пишу в глобальную переменную данные (результат можно посмотреть в - system script environment)
3, Если данные корректные их можно вывести куда угодно хоть в консоль хоть в чат-бот хоть в смс.
Скрипт для отправки состояния здоровья микротика в телеграмм
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 5
- Зарегистрирован: 14 авг 2023, 09:01
Добрый день подскажите пожалуйста где что подправить в скрипте на ros7.10
Сейчас вывод в таком варианте:
08:59:42 Error defining variables
08:59:42 Error gateways information
08:59:42 >>>Health report:
08:59:42 ID nas
08:59:42 uptime 16:05:56
08:59:42 model RB5009UG+S+
08:59:42 ROS 7.10.2 (stable)
08:59:42 arch arm64
08:59:42 CPU ARM64
08:59:42 CPU load 32%
08:59:42 mem free 56%
08:59:42 HDD free 89%
08:59:42 bad blocks 0%
08:59:42 >>>Connect info:
08:59:42 'DomRu'
08:59:42 type pppoe-client
08:59:42 Comment Internet
08:59:42 lcl мой айпи
08:59:42 rmt шлюз
08:59:42 uptime 15:59:26
Не могу понять что за ошибки первые две строчки?
Не могу понять почему не выводит информацию по трафику?
Ну и основное не выводит информацию по температуре именно с 5009( с 750Gr3 выводит темпу но так же не выводит трафик)
Спасибо большое.
Сейчас вывод в таком варианте:
08:59:42 Error defining variables
08:59:42 Error gateways information
08:59:42 >>>Health report:
08:59:42 ID nas
08:59:42 uptime 16:05:56
08:59:42 model RB5009UG+S+
08:59:42 ROS 7.10.2 (stable)
08:59:42 arch arm64
08:59:42 CPU ARM64
08:59:42 CPU load 32%
08:59:42 mem free 56%
08:59:42 HDD free 89%
08:59:42 bad blocks 0%
08:59:42 >>>Connect info:
08:59:42 'DomRu'
08:59:42 type pppoe-client
08:59:42 Comment Internet
08:59:42 lcl мой айпи
08:59:42 rmt шлюз
08:59:42 uptime 15:59:26
Не могу понять что за ошибки первые две строчки?
Не могу понять почему не выводит информацию по трафику?
Ну и основное не выводит информацию по температуре именно с 5009( с 750Gr3 выводит темпу но так же не выводит трафик)
Спасибо большое.
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Насчет температуры - в седьмой версии РОС температуру нужно получать так:
Насчет трафика - имя интерфейса на своё меняли ?
Код: Выделить всё
[/system health get [find name=temperature] value]
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 5
- Зарегистрирован: 14 авг 2023, 09:01
да температуру вывел с помощьюSertik писал(а): ↑14 авг 2023, 19:39 Насчет температуры - в седьмой версии РОС температуру нужно получать так:
Насчет трафика - имя интерфейса на своё меняли ?Код: Выделить всё
[/system health get [find name=temperature] value]
:set tempC [/system health get [:pick [/system health get 0]] value];
Но вот с вывод трафика так и не смог ни чего сделать по инерфейсам имеем ether1 (DomRu)
Выводы в терменале:
[admin@nas] > /interface list print
Flags: *, D - DYNAMIC
Columns: NAME
# NAME
;;; contains all interfaces
0 * all
;;; contains no interfaces
1 * none
;;; contains dynamic interfaces
2 * dynamic
;;; contains static interfaces
3 * static
;;; defconf
4 WAN
;;; defconf
5 LAN
[admin@nas] > /interface ethernet export compact
# 2023-08-15 08:40:37 by RouterOS 7.10.2
# software id = UCQW-5Z73
#
# model = RB5009UG+S+
# serial number =
/interface ethernet
set [ find default-name=ether1 ] comment=WAN
set [ find default-name=sfp-sfpplus1 ] comment=SFP
Подскажите в какую сторону копать или что куда внести. Спасибо большое.
-
- Сообщения: 125
- Зарегистрирован: 18 мар 2021, 12:45
температура и текущее напряжение в 7
:set $cuHealth (([/system health get 0]->"value" . "V") . "; " . ([/system health get 1]->"value" . "\E2\84\83"))
:set $cuHealth (([/system health get 0]->"value" . "V") . "; " . ([/system health get 1]->"value" . "\E2\84\83"))
- drpioneer
- Сообщения: 149
- Зарегистрирован: 30 май 2013, 10:20
Всех приветствую!
Представляю версию скрипта, в которой учтены накопившиеся замечания:
Как всегда приветствуются замечания и конструктивная критика.
Зеркало тут.
Представляю версию скрипта, в которой учтены накопившиеся замечания:
Код: Выделить всё
# Device status view script
# Script uses ideas by Enternight, Jotne, rextended, Sertik, Brook, drPioneer
# https://github.com/drpioneer/MikrotikHealth/blob/main/health.rsc
# https://forummikrotik.ru/viewtopic.php?p=91302#p91302
# tested on ROS 6.49.10 & 7.12
# updated 2024/02/17
:do {
# external IP address return function (in case of double NAT) # https://forummikrotik.ru/viewtopic.php?p=65345#p65345
:local ExtIP do={
:local urlString "http://checkip.dyndns.org"; :local httpResp ""; :local cnt 0;
:do {
:do {:set httpResp [/tool fetch mode=http url=$urlString as-value output=user]} on-error={}
:set cnt ($cnt+1);
} while ([:len $httpResp]=0 && cnt<4);
:if ([:len $httpResp]!=0) do={
:local content ($httpResp->"data");
:if ([:len $content]!=0) do={:return [:pick $content ([:find $content "dress: " -1] +7) [:find $content "</body>" -1]]}}
:return "NotRespond";
}
# general info reading function # https://forummikrotik.ru/viewtopic.php?p=45743#p45743
:local GenInfo do={
/system identity;
:local ident ([print as-value]->"name");
/system health;
:local volt ([print as-value]->"voltage");
:local tempC ([print as-value]->"temperature");
/system routerboard;
:local currFW ([print as-value]->"current-firmware");
:local upgrFW ([print as-value]->"upgrade-firmware");
/system resource;
:local uptime ([print as-value]->"uptime");
:local arch ([print as-value]->"architecture-name");
:local cpu ([print as-value]->"cpu");
:local hddTotal ([print as-value]->"total-hdd-space");
:local hddFree ([print as-value]->"free-hdd-space");
:local badBlock ([print as-value]->"bad-blocks");
:local memTotal ([print as-value]->"total-memory");
:local memFree ([print as-value]->"free-memory");
:local cpuZ ([print as-value]->"cpu-load");
:local ros ([print as-value]->"version");
:local board ([print as-value]->"board-name");
:if ([:pick $ros 0 1]="7") do={:set tempC ([/system health print as-value]->0->"value")}
:local msg "Id $ident\r\nBrd $board\r\nRos $ros";
:if ($currFW!=$upgrFW) do={:set msg "$msg\r\n**Fw not updated"}
:set msg "$msg\r\nArch $arch\r\nCpu $cpu";
:if ($cpuZ<90) do={:set msg "$msg\r\nCpuLoad $cpuZ%"} else={:set msg "$msg\r\n**large Cpu usage $cpuZ%"}
:set memFree ($memFree/($memTotal/100));
:if ($memFree>17) do={:set msg "$msg\r\nMemFree $memFree%"} else={:set msg "$msg\r\n**low free Mem $memFree%"}
:set hddFree ($hddFree/($hddTotal/100));
:if ($hddFree>6) do={:set msg "$msg\r\nHddFree $hddFree%"} else={:set msg "$msg\r\n**low free Hdd $hddFree%"}
:if ([:len $badBlock]>0) do={
:if ($badBlock=0) do={:set msg "$msg\r\nBadBlck $badBlock%"} else={:set msg "$msg\r\n**present Bad blocks $badBlock%"}}
:if ([:len $volt]>0) do={
:local smplVolt ($volt/10); :local lowVolt (($volt-$smplVolt*10)*10); :local inVolt "$smplVolt.$[:pick $lowVolt 0 3]";
:if ($smplVolt>4 && $smplVolt<53) do={:set msg "$msg\r\nPwr $inVolt V"} else={:set msg "$msg\r\n**bad Pwr $inVolt V"}}
:if ([:len $tempC]>0) do={
:if ($tempC<70) do={:set msg "$msg\r\nTemp $tempC C"} else={:set msg "$msg\r\n**abnorm Temp $tempC C"}}
:return "$msg\r\nUpt $uptime";
}
# ppp info reading function
:local PPPInfo do={
:local msg ""; :local cnt 1;
:foreach pppInt in={"-client";"-server"} do={
:foreach pppTps in={"l2tp";"pptp";"ovpn";"ppp";"sstp";"pppoe"} do={
:local pppType ($pppTps.$pppInt);
:foreach pppConn in=[[:parse "[/interface $pppType find]"]] do={
:local vpnName [[:parse "[/interface $pppType get $pppConn name]"]];
:local vpnComm [[:parse "[/interface $pppType get $pppConn comment]"]];
:local callrID ""; :local connTo "";
:if ($pppType~"-server") do={:set callrID [[:parse "[/interface $pppType get $pppConn client-address]"]]}
:local vpnType [/interface get $vpnName type]; :local iType $vpnType;
:set vpnType [:pick $vpnType ([:find $vpnType "-"] +1) [:len $vpnType]];
:if ($pppTps!="pppoe" && $vpnType="out" && $iType!="ppp-out") do={
:set connTo "$[[:parse "[/interface $pppType get $vpnName connect-to]"]]"}
:local vpnState [[:parse "[/interface $pppType monitor $pppConn once as-value]"]];
:local vpnStatu ($vpnState->"status");
:local locAddr ($vpnState->"local-address");
:local remAddr ($vpnState->"remote-address");
:local upTime ($vpnState->"uptime");
:if ([:len [find key="terminating" in=$vpnStatu]]>0) do={:set vpnStatu "disabled"}
:if ([:typeof $vpnStatu]="nothing") do={:set vpnStatu "unplugged"}
:if ($vpnStatu!="unplugged" && $vpnStatu!="disabled") do={
:set msg "$msg\r\n>>>PPPinfo$cnt:\r\nTyp $pppType\r\nNam $vpnName";
:if ([:len $callrID]>0) do={:set msg "$msg\r\nFrm $callrID"}
:if ([:len $connTo ]>0) do={:set msg "$msg\r\nTo $connTo"}
:if ([:len $vpnComm]>0) do={:set msg "$msg\r\nCmnt $vpnComm"}
:set msg ("$msg\r\nLcl $locAddr\r\nRmt $remAddr\r\nUpt $upTime");
:set cnt (cnt+1)}}}}
:return $msg;
}
# gateways info reading function
:local GwInfo do={
# digit conversion function via SI-prefix # https://forum.mikrotik.com/viewtopic.php?t=182904#p910512
:local NumSiPrefix do={
:if ([:len $1]=0) do={:return "0b"}
:local inp [:tonum $1]; :local cnt 0;
:while ($inp>1000) do={:set $inp ($inp>>10); :set $cnt ($cnt+1)}
:return ($inp.[:pick [:toarray "b,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb"] $cnt])}
:local routeISP [/ip route find dst-address="0.0.0.0/0"]; :local msg "";
:if ([:len $routeISP]=0) do={:return "WAN not found"}
:foreach inetGate in=$routeISP do={
:local ifGate [:tostr [/ip route get $inetGate vrf-interface]];
:if ([:len $ifGate]>0) do={
/interface;
:local rxReport [$NumSiPrefix [get [find name=$ifGate] rx-byte]];
:local txReport [$NumSiPrefix [get [find name=$ifGate] tx-byte]];
:set msg "$msg\r\n>>>TraffVia:\r\n'$ifGate'\r\nrx/tx $rxReport/$txReport"}}
:return $msg;
}
# main body
:local message ">>>HealthRep:\r\n$[$GenInfo]$[$PPPInfo]$[$GwInfo]\r\n>>>ExternIp\r\n$[$ExtIP]";
:log warning $message; :put $message;
} on-error={:log warning ("Error, can't show health status"); :put ("Error, can't show health status")}
Зеркало тут.
Последний раз редактировалось drpioneer 17 фев 2024, 11:40, всего редактировалось 1 раз.
-
- Сообщения: 1
- Зарегистрирован: 15 фев 2024, 11:29
- drpioneer
- Сообщения: 149
- Зарегистрирован: 30 май 2013, 10:20
Добрый день.
В таком варианте скрипт СОСТОЯНИЯ ЗДОРОВЬЯ вываливает результат своей работы в журнал устройства, а скрипт TLGRM полученный результат из журнала устройства транслирует в Телегу.
У себя этот вопрос решаю в связке со скриптом TLGRM.
В таком варианте скрипт СОСТОЯНИЯ ЗДОРОВЬЯ вываливает результат своей работы в журнал устройства, а скрипт TLGRM полученный результат из журнала устройства транслирует в Телегу.