A Zabbix frontend module that grades the data quality of your monitoring with a single A–F letter and a red/amber/green matrix. It answers a question the built-in screens don't: is the monitoring itself healthy, or is it quietly rotting?
It uses only data every Zabbix install already has — no extra agents, items, or database changes.
The score starts at 100 and loses points across four checks, each capped at its own weight so the grade stays transparent and tunable:
| Check | Weight | What it flags |
|---|---|---|
| Unsupported items | 25 | Items in an error state — collection is broken. |
| Stale items | 25 | Polled items that were collecting and silently stopped. |
| Blind hosts | 30 | Monitored hosts with no enabled trigger — nothing can alert. |
| Never-alerted items | 20 | Collected items that no enabled trigger watches. |
Each penalty is proportional to how many objects are affected, so a handful of broken items barely moves the grade while a systemic failure tanks it.
Grades: A ≥ 90, B ≥ 80, C ≥ 70, D ≥ 60, F < 60.
Every check is deliberately conservative so a healthy object is never flagged:
- Stale only counts polled items with a plain numeric interval that provably collected before (a last value exists) and then stopped for more than 3× their interval. Trapper, dependent, SNMP-trap, internal and calculated items, and macro/flexible intervals are never flagged.
- The four headline numbers are computed with count queries and native API flags (no object loads), so the module stays light even on very large installs. The stale scan is chunked and is skipped entirely — and reported as skipped — above a safe item cap.
Click any non-zero card to open a capped list of the offenders. Each row links straight to the native Zabbix screen where you fix it, filtered to the exact object:
- Unsupported / Stale — items owned by the host can be disabled in bulk right from the panel (select rows → Disable selected). Disabling stops broken/stale collection from counting against the grade.
- Items that can't be changed on the host are routed to their source instead of being silently
skipped:
- template items link to the item configuration, where Zabbix surfaces the template link so you can disable them at the source (it propagates to every linked host);
- discovered items link to the discovery rule's item prototypes, where you adjust the LLD filter / lost-resources policy or disable the prototype.
- Blind hosts and Never-alerted items link to the trigger configuration — the correct fix there is to add a trigger, never to delete coverage.
After a disable, the list refreshes and a Rescan to update the grade link recomputes the score.
- Zabbix 7.0.
- Visible to users of type Admin and Super admin.
- The in-panel Disable action requires host-configuration UI access and per-host write permission; the write path is CSRF-protected.
-
Copy this directory into your Zabbix frontend modules path:
<zabbix-frontend>/modules/MonitoringHealthScorecard -
In the Zabbix UI go to Administration → General → Modules, click Scan directory, then Enable Monitoring Health Scorecard.
-
Open it from Monitoring → MHS in the main menu.
MonitoringHealthScorecard/
├── manifest.json module manifest + action routing
├── Module.php registers the Monitoring → MHS menu entry
├── actions/
│ ├── ScorecardEngine.php scoring + drill-down data
│ ├── CControllerMonitoringScorecardView.php main view controller
│ ├── CControllerMonitoringScorecardData.php AJAX drill-down (read)
│ └── CControllerMonitoringScorecardDisable.php AJAX disable (CSRF-protected write)
├── views/
│ ├── monitoring.scorecard.view.php
│ ├── layout.htmlpage.php
│ └── js/monitoring.scorecard.js.php
└── assets/css/
├── blue-theme.css
└── dark-theme.css
© MonZphere — https://monzphere.com