Upgrading¶
This page lists breaking changes by release, most recent first, plus notes for users migrating from the upstream AthennaMind exporter. Full details for every release: Changelog.
Upgrading to v2.0 from v1.x¶
- SMART collector is now opt-in — the
opnsense_smart_*metrics are no longer emitted by default. Set--exporter.enable-smart(envOPNSENSE_EXPORTER_ENABLE_SMART=true) to restore them. Querying SMART data is one of the more expensive per-scrape calls, so it now has to be requested explicitly. - ARP/NDP per-entry series are opt-in — the per-entry
opnsense_arp_table_entriesandopnsense_ndp_entriesseries (one series per host, high cardinality) are no longer emitted by default. Set--exporter.enable-arp-details/--exporter.enable-ndp-detailsto restore them. Otherwise switch dashboards and alerts to the newopnsense_arp_table_entries_total/opnsense_ndp_entries_totalaggregate gauges, which are always emitted. opnsense_firewall_interface_hits_totalrenamed and re-typed — it is nowopnsense_firewall_interface_log_entries_recentand is a gauge, not a counter. It reflects the current count of recent log entries, so it no longer makes sense to wrap inrate()/increase()— plot the gauge directly. The bundled Grafana dashboard has already been updated.- Default instance label changed — when
--exporter.instance-labelis unset, theinstancelabel now defaults to the configured OPNsense address (deterministic across restarts) rather than the hostname reported by the API. To keep the old hostname-derived behaviour, set--exporter.instance-use-hostname; to pin an explicit value, set--exporter.instance-label. If you relied on the old default, existing series will change theirinstancelabel after the upgrade. - Portable Prometheus alert rules removed —
grafana/alerts/opnsense.rules.yamlno longer ships. If you were loading that file into Prometheus, Mimir, or the Grafana Cloud ruler, migrate to the Grafana-managed alert manifests undergrafana/alerts/grafana-managed/(pushed as Grafana resources). See Integration & Dashboards. - Unknown link state no longer reported as down — interfaces whose link state the API reports as unknown (e.g. some PPPoE WANs) are now distinguished from genuinely down interfaces instead of being flattened to down. Alerts that treated "not up" as "down" may fire differently; check any rules built on interface link-state metrics.
Upgrading to v1.0 from v0.x¶
- IPsec SPI labels removed — phase-2 metrics no longer carry
spi_in/spi_outlabels (remaining:description,name,phase1_name). SPIs rotate on every rekey, so the labels caused unbounded series churn. Update any PromQL that referenced them. - OpenVPN per-session metrics are opt-in — the per-session
opnsense_openvpn_sessionsseries (username and tunnel-address labels) is only emitted with--exporter.enable-openvpn-details. The aggregateopnsense_openvpn_sessions_totalandopnsense_openvpn_sessions_by_instanceseries are always emitted. Set the flag to restore the old behaviour. - WireGuard handshake metric type —
opnsense_wireguard_peer_last_handshake_secondschanged from counter to gauge (it is a Unix timestamp). Replacerate(opnsense_wireguard_peer_last_handshake_seconds[...])with the purpose-builtopnsense_wireguard_peer_handshake_age_secondsgauge. opnsense_upsemantics —opnsense_upno longer flips to 0 for a box that is reachable but self-reports as degraded (e.g. a leftover crash report). Such a box now trips the warning-levelOPNsenseCrashReports/OPNsenseFirewallUnhealthyalerts instead of the criticalOPNsenseExporterDown. If you alerted onopnsense_up == 0for these cases, switch to those signals.
Migrating from upstream (AthennaMind/opnsense-exporter)¶
In addition to the items above:
- Image and module path — pull
ghcr.io/rknightion/opnsense-exporter; the Go module isgithub.com/rknightion/opnsense-exporter. --runtime.gomaxprocsremoved — Go now auto-detects CPUs; delete the flag from any unit files or manifests./debug/pprof/*endpoints removed — replaced by optional authenticated push profiling via--pyroscope.*flags. See Configuration.- Firmware metrics reworked — version strings consolidated into
opnsense_firmware_info(labels) plus numeric gauges (needs_reboot,upgrade_needs_reboot,last_check_timestamp_seconds,new_packages_count,upgrade_packages_count). --exporter.instance-labelnow optional — when left empty it defaults to the configured OPNsense address (see the v2.0 note above for the change from the old hostname default; set--exporter.instance-use-hostnamefor hostname-derived labels).- Many new collectors are enabled by default — review the collector switches and disable what you don't need.