check-health: monitor free RAM
---- ✂️ ---- 🗃️📉️ 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). ---- ✂️ ----
							
								
								
									
										22
									
								
								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 ];
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								doc/check-health.d/notification-03-free-ram-low.avif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								doc/check-health.d/notification-04-free-ram-ok.avif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.6 KiB  | 
| 
		 Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB  | 
| 
		 Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB  | 
@@ -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:
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
#### Available free RAM
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
#### Voltage
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
#### Temperature
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||

 | 
			
		||||
  
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
#### PSU state
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||

 | 
			
		||||
  
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
Requirements and installation
 | 
			
		||||
-----------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -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";
 | 
			
		||||
 
 | 
			
		||||