Zabbix on a multi-site enterprise lab

I pointed Zabbix 7.0.32 LTS at a multi-site home-lab network and recorded what the Cisco IOS SNMP template actually collected. After I moved polling to loopbacks, a WAN link down showed as interface oper-status 2 while ICMP to the router stayed up.

Zabbix polling from an HQ proxy toward campus, data center, branch, and dual WAN providers

If you attach Zabbix to a campus-and-branch network, the first question is not whether a Cisco template exists. It is which items return a real value, and what a WAN failure looks like once you poll an address that survives the failed link.

This write-up is from Zabbix 7.0.32 LTS, built in my home lab on November 7, 2026. I used the official "Cisco IOS by SNMP" template plus ICMP ping and a few HTTP, SMTP, and NTP simple checks. It complements the existing Zabbix for Network Monitoring series instead of repeating the SNMPv3, Agent 2, and trigger walkthroughs there.

Zabbix 8.0.0 LTS shipped on November 5, 2026. I stayed on 7.0.32 so this lab matches the LTS line already used in that series.

The network I monitored

The lab is a small multi-site design: an HQ campus with a redundant core, a data center, two branches, and two WAN providers. Provider A is the preferred path. Provider B is the backup.

Zabbix polling from an HQ proxy toward campus, data center, branch, and dual WAN providers
Zabbix 7.0.32 polls from a proxy in the HQ server segment. The primary WAN toward provider A leaves the HQ edge on Et0/2. Provider B is the backup path.

I onboarded 15 Cisco IOS-XE 17.18.2 devices with SNMPv3 and 9 Linux endpoints with ICMP. Three of those endpoints also answer HTTP. One answers SMTP on a local mail sink, and one answers NTP. That is 24 monitored lab hosts. The Data collection Hosts page also listed the default "Zabbix server" host, which I disabled, for 25 rows in the full list.

The poller that talks to the devices runs inside the server segment, so SNMP and ICMP come from a lab data-plane address. I first used a data-plane address on each Layer 3 device's WAN or transit interface. After an early test showed that shutting the provider A link also dropped ICMP and SNMP to that HQ edge router, I pointed every Layer 3 host at its Loopback0 address instead. A ping from the poller to each of those 11 loopbacks succeeded before I changed the Zabbix interfaces.

I set history retention to 7 days and trend retention to 30 days.

The default "Zabbix server" host ships with "Linux by Zabbix agent" and "Zabbix server health." This isolated instance has no agent, so that host raised "Linux: Zabbix agent is not available (for 3m)." I disabled the host and closed that event. It is not an outage on the lab network.

Zabbix Data collection Hosts list showing lab device names, item counts, and templates
A portion of Data collection, Hosts after onboarding. Interface addresses and the proxy name are hidden in this crop. The Cisco rows use "Cisco IOS by SNMP." The Linux rows use ICMP Ping. This view does not show every lab host.

What collected cleanly

After poll cycles and the later fixes, the API showed:

  • ICMP icmpping = 1 on all 24 lab hosts, including a recheck after the loopback change and the link test.
  • A System description value on all 15 Cisco devices. Each one reported Cisco IOS-XE 17.18.2. The routers identified as the standard IOS-XE software image. The four access switches identified as the Layer 2 IOS-XE image.
  • Simple checks at 1 (service up) for the HQ app HTTP listener, the data-center web listener, the DMZ web listener, the local SMTP sink, and the NTP listener.
  • Discovered ifHCInOctets and operational-status items on all 15 Cisco devices after the interface-name filter was corrected. The HQ edge router toward provider A has an item named like Interface Et0/2: Bits received with a nonzero value (7728 at the discovery check). HQ core A showed nonzero inbound octets on its core and distribution links as well.

I used authPriv (SHA and AES-128) for SNMPv3 on the Layer 3 devices. The four access switches in this software image accept an SNMPv3 group at the auth level and reject priv. Those four hosts use authNoPriv. After that change, the earlier "No SNMP data collection" problems on the switches cleared.

What the Cisco template did not give me

Attaching "Cisco IOS by SNMP" does not mean every item in that template works on these devices.

Hardware model name and hardware serial number stayed unsupported on all 15 Cisco devices, with the SNMP error "No Such Object available on this agent at this OID." These are virtual lab devices. I am not treating those items as inventory.

Interface names in SNMP are short, such as Et0/2 and Lo0, not Ethernet0/2 and Loopback0. A host macro set to ^(Ethernet|Loopback) matches none of them. The official template default for {$NET.IF.IFNAME.MATCHES} is ^.*$. The access switches inherited that default and discovered interfaces first. The routers had the stricter host override, so they had no discovered interface items until I changed the host macro to ^(Et|Ethernet|Lo|Loopback).

The master item net.if.walk stores no history (history=0), so its last clock stays 0 even when discovery is working. That empty last value is not proof the walk failed. A direct ifName walk from the poller against the HQ edge loopback returned 6 names in 0.29 seconds.

I also created a labeled non-default item on the HQ edge router toward provider A, demo.ifOperStatus[Et0.2], OID 1.3.6.1.2.1.2.2.1.8.3, with a 30 second interval, so I could test link state before template discovery filled in. After discovery succeeded, the template also created operational-status items for Et0/2.

The template's interface discovery rule includes a "discard unchanged with heartbeat" preprocessor of 1 hour. After I changed interface addresses and the name filter at the same time, a check-now of net.if.walk plus a 90 second wait still showed no Layer 3 interface items. A later check-now, once the loopback addresses and the new macros had been in place for several minutes, created the items on all 11 routers. The first empty result was a timing and config-sync issue, not missing SNMP.

Casebook: the HQ app HTTP listener

The HQ app host has a custom item net.tcp.service[http,<app-address>,80] with a 1 minute update interval and a trigger named "HTTP service down on hq-app (custom 1m item)." The empty-address form of that key was unsupported here. The item needed the address in the key.

I stopped the exact busybox-extras httpd process (PID 130 in this run). A client wget failed before I waited on Zabbix. I then used check-now on the HTTP item, so the times below are not a one-minute natural poll.

Zabbix stored last value 0 and raised the trigger at 6:55:21 PM Pacific Time on November 7, 2026 (check-now was issued at 6:55:20 PM, after wget had already failed at 6:55:18 PM). The local mail sink received a message at 6:55:22 PM with subject Problem: HTTP service down on hq-app (custom 1m item).

I restarted the same command the host had been running, busybox-extras httpd -p 80 -h /tmp/www. wget succeeded again. After another check-now, Zabbix recovered the problem at 6:55:46 PM. The sink received Resolved in 25s: HTTP service down on hq-app (custom 1m item) at 6:55:47 PM.

Zabbix Problems History filtered to HTTP showing two resolved hq-app problems
Monitoring, Problems, History filtered to HTTP. The documented check-now test is the 6:55:21 PM problem that recovered at 6:55:46 PM. The same view also lists an earlier resolved problem on the same trigger at 6:33:26 PM, recovered at 6:33:46 PM.
Zabbix Latest data for hq-app with HTTP TCP/80 last value 1 and ICMP loss 0 percent
Monitoring, Latest data for hq-app after recovery. The custom HTTP TCP/80 item, labeled as a 1 minute item that is not a template default, last value 1. ICMP loss is 0 percent. This crop shows those two rows, not every item on the host.

An earlier shutdown, while Zabbix still polled the HQ edge router at the address configured on the provider-facing interface, raised "Cisco IOS: Unavailable by ICMP ping" at 6:25:34 PM, about 2 minutes and 4 seconds after the 6:23:30 PM shutdown. Branch 1 stayed reachable (5 of 5 pings). That ICMP problem cleared at 6:27:34 PM, 38 seconds after the 6:26:56 PM restore. The interface operational-status item could not refresh, because SNMP to that same address had no path.

After I moved ICMP and SNMP for all 11 Layer 3 devices to Loopback0, I shut the same provider-facing interface again at 6:53:20 PM.

A client in HQ still reached the branch 1 user endpoint (3 of 3 pings, no loss). The poller still reached the HQ edge loopback (3 of 3 pings). I then waited 70 seconds with no check-now so the 1 minute ICMP item could poll on its own. icmpping stayed 1.

The labeled 30 second ifOperStatus item moved to 2 on its own cycle. Zabbix raised DEMO NONDEFAULT: hq-edge-a Ethernet0/2 oper-down (manual item, not Cisco template default) at 6:53:34 PM, 14 seconds after the shutdown. A later check-now at 6:54:36 PM read the same last value of 2 and is labeled as a forced refresh, not the first detection.

I restored the interface at 6:54:56 PM and issued check-now on the oper-status item. The value returned to 1, and the problem recovered at 6:55:02 PM.

Zabbix Problems History filtered to DEMO showing the resolved hq-edge-a oper-down problem
Monitoring, Problems, History filtered to DEMO. The labeled oper-down problem on hq-edge-a started at 6:53:34 PM and recovered at 6:55:02 PM, matching the loopback-polled link test. This screenshot is the problem record, not a traffic graph of Et0/2.

After the tests

Zabbix PL-ENTMON Overview dashboard with no current problems and 15 available SNMP hosts
The PL-ENTMON Overview dashboard after both tests had recovered. The Problems widget shows no current data. The host availability widget counts 15 available SNMP hosts, which matches the 15 Cisco devices, not the 24 lab hosts. Agent rows stay at 0 because this instance does not run a Zabbix agent. The unused widget on the right reported that a referred object was missing or that the view had no permission for it.

What this post does not cover

I did not run Nagios, Cacti, Icinga, OpenNMS, or PRTG on this network for this article, and I am not comparing them here.

Read next

Nagios Core on a multi-site lab

I pointed Nagios Core 4.5.14 and official Nagios Plugins 2.5 at the same multi-site home-lab network used for the Zabbix and Cacti write-ups and recorded host checks, HTTP DNS SMTP and NTP services, and a scheduled soft-to-hard recovery on a local mail sink.