From 6780e1a24ccdefd3a328abe7ca8cef3d4ed57114 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 20 Jan 2023 14:34:18 +0100 Subject: check-health: monitor free RAM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ---- ✂️ ---- 🗃️📉️ Health warning: free RAM The available free RAM on MikroTik is at 18% (47MiB)! ---- ✂️ ---- 🗃️📈️ Health recovery: free RAM The available free RAM on MikroTik increased to 65% (168MiB). ---- ✂️ ---- --- check-health | 22 ++++++++++++++++++++- .../notification-03-free-ram-low.avif | Bin 0 -> 6426 bytes doc/check-health.d/notification-03-voltage.avif | Bin 4053 -> 0 bytes .../notification-04-free-ram-ok.avif | Bin 0 -> 6716 bytes .../notification-04-temperature-high.avif | Bin 3615 -> 0 bytes .../notification-05-temperature-ok.avif | Bin 3763 -> 0 bytes doc/check-health.d/notification-05-voltage.avif | Bin 0 -> 4053 bytes doc/check-health.d/notification-06-psu-fail.avif | Bin 3544 -> 0 bytes .../notification-06-temperature-high.avif | Bin 0 -> 3615 bytes doc/check-health.d/notification-07-psu-ok.avif | Bin 3561 -> 0 bytes .../notification-07-temperature-ok.avif | Bin 0 -> 3763 bytes doc/check-health.d/notification-08-psu-fail.avif | Bin 0 -> 3544 bytes doc/check-health.d/notification-09-psu-ok.avif | Bin 0 -> 3561 bytes doc/check-health.md | 21 +++++++++++++------- global-functions | 1 + 15 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 doc/check-health.d/notification-03-free-ram-low.avif delete mode 100644 doc/check-health.d/notification-03-voltage.avif create mode 100644 doc/check-health.d/notification-04-free-ram-ok.avif delete mode 100644 doc/check-health.d/notification-04-temperature-high.avif delete mode 100644 doc/check-health.d/notification-05-temperature-ok.avif create mode 100644 doc/check-health.d/notification-05-voltage.avif delete mode 100644 doc/check-health.d/notification-06-psu-fail.avif create mode 100644 doc/check-health.d/notification-06-temperature-high.avif delete mode 100644 doc/check-health.d/notification-07-psu-ok.avif create mode 100644 doc/check-health.d/notification-07-temperature-ok.avif create mode 100644 doc/check-health.d/notification-08-psu-fail.avif create mode 100644 doc/check-health.d/notification-09-psu-ok.avif diff --git a/check-health b/check-health index 3957ad1..55ad8ab 100644 --- a/check-health +++ b/check-health @@ -12,6 +12,7 @@ :global CheckHealthCPULoad; :global CheckHealthCPULoadNotified; +:global CheckHealthFreeRAMNotified; :global CheckHealthLast; :global CheckHealthTemperature; :global CheckHealthTemperatureDeviation; @@ -45,7 +46,9 @@ $ScriptLock $0; -:set CheckHealthCPULoad (($CheckHealthCPULoad * 4 + [ /system/resource/get cpu-load ] * 10) / 5); +:local Resource [ /system/resource/get ]; + +:set CheckHealthCPULoad (($CheckHealthCPULoad * 4 + ($Resource->"cpu-load") * 10) / 5); :if ($CheckHealthCPULoad > 750 && $CheckHealthCPULoadNotified != true) do={ $SendNotification2 ({ origin=$0; \ subject=([ $SymbolForNotification "abacus,chart-increasing" ] . "Health warning: CPU load"); \ @@ -59,6 +62,23 @@ $ScriptLock $0; :set CheckHealthCPULoadNotified false; } +:local CheckHealthFreeRAM ($Resource->"free-memory" * 100 / $Resource->"total-memory"); +:if ($CheckHealthFreeRAM < 20 && $CheckHealthFreeRAMNotified != true) do={ + $SendNotification2 ({ origin=$0; \ + subject=([ $SymbolForNotification "card-file-box,chart-decreasing" ] . "Health warning: free RAM"); \ + message=("The available free RAM on " . $Identity . " is at " . $CheckHealthFreeRAM . "% (" . \ + ($Resource->"free-memory" / 1024 / 1024) . "MiB)!") }); + :set CheckHealthFreeRAMNotified true; +} +:if ($CheckHealthFreeRAM > 30 && $CheckHealthFreeRAMNotified = true) do={ + $SendNotification2 ({ origin=$0; \ + subject=([ $SymbolForNotification "card-file-box,chart-increasing" ] . "Health recovery: free RAM"); \ + message=("The available free RAM on " . $Identity . " increased to " . $CheckHealthFreeRAM . "% (" . \ + ($Resource->"free-memory" / 1024 / 1024) . "MiB).") }); + :set CheckHealthFreeRAMNotified false; +} + + :foreach Voltage in=[ /system/health/find where type="V" ] do={ :local Name [ /system/health/get $Voltage name ]; :local Value [ /system/health/get $Voltage value ]; diff --git a/doc/check-health.d/notification-03-free-ram-low.avif b/doc/check-health.d/notification-03-free-ram-low.avif new file mode 100644 index 0000000..6f45fcf Binary files /dev/null and b/doc/check-health.d/notification-03-free-ram-low.avif differ diff --git a/doc/check-health.d/notification-03-voltage.avif b/doc/check-health.d/notification-03-voltage.avif deleted file mode 100644 index f4d6005..0000000 Binary files a/doc/check-health.d/notification-03-voltage.avif and /dev/null differ diff --git a/doc/check-health.d/notification-04-free-ram-ok.avif b/doc/check-health.d/notification-04-free-ram-ok.avif new file mode 100644 index 0000000..0b76bac Binary files /dev/null and b/doc/check-health.d/notification-04-free-ram-ok.avif differ diff --git a/doc/check-health.d/notification-04-temperature-high.avif b/doc/check-health.d/notification-04-temperature-high.avif deleted file mode 100644 index 1a93610..0000000 Binary files a/doc/check-health.d/notification-04-temperature-high.avif and /dev/null differ diff --git a/doc/check-health.d/notification-05-temperature-ok.avif b/doc/check-health.d/notification-05-temperature-ok.avif deleted file mode 100644 index 3bb9c68..0000000 Binary files a/doc/check-health.d/notification-05-temperature-ok.avif and /dev/null differ diff --git a/doc/check-health.d/notification-05-voltage.avif b/doc/check-health.d/notification-05-voltage.avif new file mode 100644 index 0000000..f4d6005 Binary files /dev/null and b/doc/check-health.d/notification-05-voltage.avif differ diff --git a/doc/check-health.d/notification-06-psu-fail.avif b/doc/check-health.d/notification-06-psu-fail.avif deleted file mode 100644 index a4e52a9..0000000 Binary files a/doc/check-health.d/notification-06-psu-fail.avif and /dev/null differ diff --git a/doc/check-health.d/notification-06-temperature-high.avif b/doc/check-health.d/notification-06-temperature-high.avif new file mode 100644 index 0000000..1a93610 Binary files /dev/null and b/doc/check-health.d/notification-06-temperature-high.avif differ diff --git a/doc/check-health.d/notification-07-psu-ok.avif b/doc/check-health.d/notification-07-psu-ok.avif deleted file mode 100644 index bcc5a39..0000000 Binary files a/doc/check-health.d/notification-07-psu-ok.avif and /dev/null differ diff --git a/doc/check-health.d/notification-07-temperature-ok.avif b/doc/check-health.d/notification-07-temperature-ok.avif new file mode 100644 index 0000000..3bb9c68 Binary files /dev/null and b/doc/check-health.d/notification-07-temperature-ok.avif differ diff --git a/doc/check-health.d/notification-08-psu-fail.avif b/doc/check-health.d/notification-08-psu-fail.avif new file mode 100644 index 0000000..a4e52a9 Binary files /dev/null and b/doc/check-health.d/notification-08-psu-fail.avif differ diff --git a/doc/check-health.d/notification-09-psu-ok.avif b/doc/check-health.d/notification-09-psu-ok.avif new file mode 100644 index 0000000..bcc5a39 Binary files /dev/null and b/doc/check-health.d/notification-09-psu-ok.avif differ diff --git a/doc/check-health.md b/doc/check-health.md index b498998..3b0c4ae 100644 --- a/doc/check-health.md +++ b/doc/check-health.md @@ -13,14 +13,16 @@ This script is run from scheduler periodically, sending notification on health related events: * high CPU load +* low available free RAM * voltage jumps up or down more than configured threshold or drops below limit * power supply failed or recovered * temperature is above or below threshold Note that bad initial state will not trigger an event. -Monitoring CPU load works on all devices. Other than that only sensors -available in hardware can be checked. See what your hardware supports: +Monitoring CPU load and available free RAM works on all devices. Other +than that only sensors available in hardware can be checked. See what your +hardware supports: /system/health/print; @@ -31,19 +33,24 @@ available in hardware can be checked. See what your hardware supports: ![check-health notification cpu load high](check-health.d/notification-01-cpu-load-high.avif) ![check-health notification cpu load ok](check-health.d/notification-02-cpu-load-ok.avif) +#### Available free RAM + +![check-health notification free ram low](check-health.d/notification-03-free-ram-low.avif) +![check-health notification free ram ok](check-health.d/notification-04-free-ram-ok.avif) + #### Voltage -![check-health notification voltage](check-health.d/notification-03-voltage.avif) +![check-health notification voltage](check-health.d/notification-05-voltage.avif) #### Temperature -![check-health notification temperature high](check-health.d/notification-04-temperature-high.avif) -![check-health notification temperature ok](check-health.d/notification-05-temperature-ok.avif) +![check-health notification temperature high](check-health.d/notification-06-temperature-high.avif) +![check-health notification temperature ok](check-health.d/notification-07-temperature-ok.avif) #### PSU state -![check-health notification psu fail](check-health.d/notification-06-psu-fail.avif) -![check-health notification psu ok](check-health.d/notification-07-psu-ok.avif) +![check-health notification psu fail](check-health.d/notification-08-psu-fail.avif) +![check-health notification psu ok](check-health.d/notification-09-psu-ok.avif) Requirements and installation ----------------------------- diff --git a/global-functions b/global-functions index 0e94dea..1ed5248 100644 --- a/global-functions +++ b/global-functions @@ -1078,6 +1078,7 @@ "abacus"="\F0\9F\A7\AE"; "alarm-clock"="\E2\8F\B0"; "calendar"="\F0\9F\93\85"; + "card-file-box"="\F0\9F\97\83"; "chart-decreasing"="\F0\9F\93\89"; "chart-increasing"="\F0\9F\93\88"; "cloud"="\E2\98\81"; -- cgit v1.2.3-54-g00ecf