Skip to content
MikroTik RouterOS Docs

System Health Monitoring in RouterOS: A Complete Guide

System Health Monitoring in RouterOS: A Complete Guide

Section titled “System Health Monitoring in RouterOS: A Complete Guide”

RouterOS Version: 7.x+ Difficulty: Beginner Estimated Time: 20 minutes

System health monitoring provides real-time hardware status information including temperature, voltage, current, fan speed, and power consumption. Monitoring these values helps you:

  • Detect overheating before hardware damage occurs
  • Verify power supplies are functioning correctly
  • Monitor fan operation to prevent thermal throttling
  • Track power consumption for capacity planning
  • Integrate with external monitoring via SNMP

Health data is available via CLI, WinBox, API, and SNMP, making it easy to integrate with monitoring systems like MRTG, Cacti, Zabbix, or The Dude.

Key limitation: Health monitoring requires hardware support. CHR (Cloud Hosted Router) and some low-end devices have no sensors and will show an empty health menu.

MenuPurpose
/system/healthView sensor readings
/system/health/settingsConfigure fan control (v7.9+)
SensorTypeDescription
cpu-temperatureCCPU die temperature
board-temperatureCBoard/ambient temperature
temperatureCGeneral temperature sensor
voltageVInput voltage
currentAInput current draw
power-consumptionWTotal power draw
fan1-speedRPMFan rotation speed
psu1-stateok/failPower supply status
SensorNormal RangeWarning
CPU Temperature40-70°CAbove 80°C
Board Temperature20-50°CAbove 60°C
Voltage10-28V (varies)Check device specs
Fan Speed2000-6000 RPM0 RPM when should be running

Note: CPU temperatures of 70-80°C are normal under load. The “operating temperature” in device specs (-20°C to +70°C) refers to room/ambient temperature, not CPU temperature.

/system/health/print

Example output on a CCR device:

# NAME VALUE TYPE
0 power-consumption 50.8 W
1 cpu-temperature 43 C
2 fan1-speed 5654 RPM
3 board-temperature1 29 C
4 voltage 24.5 V

View only temperatures:

/system/health/print where type="C"

View only fan speeds:

/system/health/print where type="RPM"

Find a specific sensor:

/system/health/print where name="cpu-temperature"

Control when fans start and reach full speed:

# View current settings
/system/health/settings/print
# Set temperature where fans start spinning
/system/health/settings/set fan-target-temp=55
# Set temperature where fans reach maximum speed
/system/health/settings/set fan-full-speed-temp=65
# Prevent fans from completely stopping (reduces cycling)
/system/health/settings/set fan-min-speed-percent=15

Fan control is available on: CRS3xx, CRS5xx, CCR2xxx (v7.9+), CCR1036/CCR1016 (v7.14+)

For ARM/ARM64 devices, enable automatic protection if CPU overheats:

# Enable overtemperature monitoring
/system/health/settings/set cpu-overtemp-check=yes
# Set threshold (default 105°C)
/system/health/settings/set cpu-overtemp-threshold=100
# Delay after boot before monitoring (prevents false triggers)
/system/health/settings/set cpu-overtemp-startup-delay=2m

Send email when temperature exceeds threshold:

# First configure email (required)
/tool/e-mail/set server=smtp.example.com from=router@example.com
# Create alert script
/system/script/add name=temp-alert policy=read,write,test source={
:local cpuTemp [/system/health/get [find name="cpu-temperature"] value]
:local threshold 75
:if ($cpuTemp > $threshold) do={
:log warning "CPU temperature high: $cpuTemp C"
/tool/e-mail/send to="admin@example.com" \
subject="[ALERT] Router temperature high" \
body="CPU temperature: $cpuTemp C (threshold: $threshold C)"
}
}
# Schedule to run every 5 minutes
/system/scheduler/add name=temp-check interval=5m on-event=temp-alert

Prevent email spam by limiting alerts:

/system/script/add name=temp-alert-limited policy=read,write,test source={
:global lastTempAlert
:local cpuTemp [/system/health/get [find name="cpu-temperature"] value]
:local threshold 75
:local cooldown 3600
:if ($cpuTemp > $threshold) do={
:local now [/system/clock/get time]
:local currentSecs ([:pick $now 0 2] * 3600 + [:pick $now 3 5] * 60)
:if (($lastTempAlert = nil) or (($currentSecs - $lastTempAlert) > $cooldown)) do={
:log warning "CPU temperature high: $cpuTemp C"
/tool/e-mail/send to="admin@example.com" \
subject="[ALERT] Router temperature high" \
body="CPU temperature: $cpuTemp C"
:set lastTempAlert $currentSecs
}
}
}

Get SNMP OIDs for external monitoring tools:

/system/health/print oid

Output shows OID for each sensor:

# NAME VALUE TYPE OID
0 cpu-temperature 43 C .1.3.6.1.4.1.14988.1.1.3.11
1 voltage 24.5 V .1.3.6.1.4.1.14988.1.1.3.8

Poll from external system (Linux example):

Terminal window
# Get CPU temperature (returns decidegrees - divide by 10)
snmpget -v2c -c public 192.168.1.1 .1.3.6.1.4.1.14988.1.1.3.11.0

Send SNMP trap when temperature exceeds threshold:

# Enable SNMP
/snmp set enabled=yes
# Configure trap destination
/snmp set trap-target=192.168.1.100 trap-community=public trap-version=2
# Enable temperature exception traps
/snmp set trap-generators=temp-exception

Trap triggers at 100°C or the cpu-overtemp-threshold value.

Example 9: Check Power Supply Status (Dual-PSU Devices)

Section titled “Example 9: Check Power Supply Status (Dual-PSU Devices)”
# View PSU status
/system/health/print where name~"psu"

Expected output:

# NAME VALUE TYPE
0 psu1-state ok
1 psu2-state ok
2 psu1-voltage 24.2 V
3 psu2-voltage 24.3 V

If a PSU fails, psu1-state or psu2-state will show fail.

ReadingOIDNotes
voltage.1.3.6.1.4.1.14988.1.1.3.8.0Decivolts (á10)
temperature.1.3.6.1.4.1.14988.1.1.3.10.0Decidegrees (á10)
cpu-temperature.1.3.6.1.4.1.14988.1.1.3.11.0Decidegrees (á10)
power-consumption.1.3.6.1.4.1.14988.1.1.3.12.0Deciwatts (á10)
fan-speed.1.3.6.1.4.1.14988.1.1.3.17.0RPM
psu1-state.1.3.6.1.4.1.14988.1.1.3.15.00=fail, 1=ok
psu2-state.1.3.6.1.4.1.14988.1.1.3.16.00=fail, 1=ok

Important: SNMP returns values multiplied by 10. CLI shows 24.5V; SNMP returns 245.

Zabbix/Cacti/MRTG: Use the OIDs above with a multiplier of 0.1 for voltage/temperature/power.

The Dude: Supports MikroTik health OIDs natively; no configuration needed.

Cause: Device has no hardware monitoring support.

Solution: Check device specifications at mikrotik.com. CHR and some low-end RouterBOARDs have no sensors.

Cause: RouterOS v7 changed health menu structure.

v6 syntax (broken):

:local temp [/system health get temperature]

v7 syntax (correct):

:local temp [/system/health/get [find name="cpu-temperature"] value]

Cause: SNMP returns decivolts/decidegrees (multiplied by 10).

Solution: Divide SNMP values by 10 in your monitoring tool.

Possible causes:

  1. Temperature below fan-target-temp (fans not needed)
  2. Device doesn’t support fan control
  3. Fan hardware failure

Check:

/system/health/settings/print
# If fan-target-temp is higher than current temp, fans won't spin

Cause: MikroTik doesn’t allow direct RPM control.

Solution: Use temperature thresholds to influence behavior:

/system/health/settings/set fan-target-temp=50 fan-full-speed-temp=60

Cause: Script runs repeatedly while temperature is high.

Solution: Add rate limiting (see Example 6) or track recovery:

# Only alert once until temperature recovers
:global tempAlertSent
:if ($cpuTemp > 75) do={
:if ($tempAlertSent != true) do={
# Send alert
:set tempAlertSent true
}
} else={
:set tempAlertSent false
}

Cause: PoE-powered devices have protection circuitry causing voltage drop in readings.

Solution: This is expected behavior. Actual input voltage is higher than displayed.

SettingDefaultDescription
fan-target-temp58°CTemperature where fans start
fan-full-speed-temp65°CTemperature where fans reach max
fan-min-speed-percent12%Minimum fan speed (prevents cycling)
fan-control-interval30sSeconds between temp readings

Supported devices (v7.9+): CRS3xx, CRS5xx, CCR2xxx

Additional support (v7.14+): CCR1036, CCR1016

# Check if health monitoring is available
/system/health/print
# Empty = no hardware support
# View all temperature sensors
/system/health/print where type="C"
# Check fan status
/system/health/print where type="RPM"
# View fan control settings
/system/health/settings/print
# Get SNMP OIDs
/system/health/print oid
# Check PSU status (dual-PSU devices)
/system/health/print where name~"psu.*state"
  • SNMP (/snmp) - Export health data to monitoring systems
  • Scheduler (/system/scheduler) - Run health checks periodically
  • Email (/tool/e-mail) - Send alert notifications
  • Scripts (/system/script) - Custom health monitoring logic
  • Netwatch (/tool/netwatch) - Complement with connectivity monitoring
  • The Dude - MikroTik’s monitoring tool with native health support

Health monitoring in RouterOS provides essential hardware status information:

  1. View readings with /system/health/print
  2. Configure fans with /system/health/settings (v7.9+)
  3. Create alerts using scripts and scheduler
  4. Integrate externally via SNMP

Key points:

  • Available sensors vary by device model
  • SNMP values are multiplied by 10 (divide for actual values)
  • Fan control is indirect via temperature thresholds
  • v7 changed health menu structure (update scripts accordingly)
  • Alert scripts need rate limiting to prevent spam
  • Logging - log health-related events