Skip to content

Systems & Locations

Zabbix monitors individual devices. AV operators think in rooms. Omniglass bridges the gap with four concepts:

  • A system groups monitored devices into an operational unit (a conference room, a video wall, a broadcast chain).
  • A system type classifies a system and attaches monitoring behavior to it (templates, synthetic checks).
  • A location places things in a physical hierarchy (campus, building, floor, room).
  • A location type defines the levels of that hierarchy and what metadata each level carries.
graph TD
    LT[Location Type] -- classifies --> L[Location]
    ST[System Type] -- classifies --> S[System]
    ST -- links to --> T[Zabbix Template]
    L -- contains --> CL[Child Location]
    L -- contains --> S
    S -- contains --> Sub[Subsystem]
    S -- members --> H[Zabbix Host]

    style LT fill:#1a3a38,stroke:#21cab9,color:#fff
    style L fill:#1a3a38,stroke:#21cab9,color:#fff
    style CL fill:#1a3a38,stroke:#21cab9,color:#fff
    style ST fill:#1a3a38,stroke:#21cab9,color:#fff
    style S fill:#1a3a38,stroke:#21cab9,color:#fff
    style Sub fill:#1a3a38,stroke:#21cab9,color:#fff
    style T fill:#121a2e,stroke:#445,color:#aaa
    style H fill:#121a2e,stroke:#445,color:#aaa

Systems live in locations, but they are independent concepts. All systems are in locations (unless not yet assigned); not all locations contain systems, and locations are not systems. A few examples to illustrate how the model handles real environments:

  • Standard campus. A campus contains buildings, buildings contain floors, floors contain rooms. Each room has one system — a conference room with a codec, display, DSP, and camera. The location hierarchy gives you geographic filtering; the system gives you per-room health.
  • Divisible room. One large ballroom (a location) contains a central AV system and three partition subsystems, each with its own location within the ballroom. A failure in the central system impacts all subsystems. A failure in one partition does not affect the others. The location hierarchy and the system hierarchy are modeled independently.
  • Signage zones. A cafeteria (a location) has child locations called zones. Each zone contains a digital signage system. The signage systems share a system type, so they all get the same monitoring templates, but they report health independently per zone.
  • Mobile cart. A portable broadcast kit is a system with no fixed location. It has members (camera, encoder, switcher) and a system type, but no location assignment. It can be placed into a location when deployed and removed when packed up.

A system represents something an operator would point at and say “that is one thing.” It might be a conference room with a codec, a display, a DSP, and a camera. It might be a video wall with a controller and sixteen panels. The system is the unit of health, the unit of reporting, and the unit of accountability.

Systems explorer grouped by location, showing systems with health status, type, host count, and tags

When you create a system and assign devices to it:

  • One health status for the whole system, computed from all member devices
  • One place to look for every device in the room, its alerts, and its metrics
  • Filtering and reporting by system across every native Zabbix page (dashboards, problems, SLA reports)
  • Tag propagation — tags you set on the system automatically appear on every member device

Operators assign hosts to systems through Omniglass. A host can belong to one system (or one system and its subsystem simultaneously). Manual edits in Zabbix are treated as drift and corrected automatically.

Most systems are flat: one system, some devices. For more complex installations, a system can contain subsystems for functional decomposition:

Video Wall Controller
├── Decoder Bank
└── Display Cluster

The hierarchy is limited to two levels. Subsystems inherit their parent’s location and Zabbix host group.


A system type classifies a system and attaches monitoring behavior to it. Types answer the question: “What kind of system is this, and what should we check?”

When you assign a type to a system, Omniglass creates a system host — a virtual Zabbix host that represents the system as a whole. The type’s templates are linked to this host, giving the system its own items, triggers, and calculated metrics without touching the member devices.

A “Conference Room” type might link to templates that:

  • Run a synthetic dialing test every 15 minutes via a Node-RED workflow
  • Calculate an aggregate availability score from all member devices
  • Poll the room’s UCaaS booking status from a cloud API

Every conference room system gets these checks automatically when the type is assigned. Change the type’s templates, and every conference room updates on the next reconciliation sweep.

Each system host carries macros so that a single template works across all systems of the same type:

MacroExample value
{$OG_SYSTEM_NAME}board-room-302
{$OG_SYSTEM_TYPE}conference-room
{$OG_SYSTEM_GROUP}Systems/board-room-302

A template item with URL http://nodered:1880/workflow/check/{$OG_SYSTEM_NAME} resolves differently for each system host.


Locations model your physical environment as a hierarchy. The default levels are campus, building, floor, and room, but you can define your own location types to match your organization.

When you create a location hierarchy and assign systems to locations:

  • Geographic filtering — show me all systems in Building A, or on Floor 3, or in the EMEA campus
  • Inherited coordinates — set latitude/longitude on a building, and every room inside it inherits those coordinates into host inventory fields
  • Custom metadata — each location type defines a schema for structured data (room capacity, AV tier, building code)
  • Native Zabbix integration — locations project as host groups, so location-based filtering works in dashboards, problems, SLA reports, and maps
North America (campus)
└── Headquarters (building)
├── Floor 1
│ ├── Lobby Display (system)
│ └── Reception Desk (system)
└── Floor 3
├── Room 301 (system)
├── Room 302 (system)
└── Room 303 (system)

A child location’s type must have a strictly higher sort order than its parent. This prevents nonsensical hierarchies (a campus inside a room). Sibling names must be unique within their parent.

Location types define the levels of your hierarchy and are ordered by sort_order:

TypeSort Order
Campus10
Building20
Floor30
Room40

You can add custom types (e.g., “Wing” at sort order 25) or redefine the defaults entirely.


A system can have both a type and a location:

  • Type determines what gets monitored (which templates, which checks)
  • Location determines where it is (which building, which floor, which room)
System: "Board Room 302"
├── Type: Conference Room
│ → system host with conference room templates
├── Location: HQ / Floor 3 / Room 302
│ → member hosts appear in the Locations/hq/floor-3/room-302 host group
└── Members: codec, display, DSP, camera
→ hosts appear in the Systems/board-room-302 host group

Both the Systems/ and Locations/ host group trees are visible in native Zabbix. An operator can filter problems by system (“show me Board Room 302”) or by location (“show me everything on Floor 3”) using stock Zabbix pages.

All systems are in locations. But systems and locations are not the same thing.

SystemLocation
RepresentsA functional unit (room AV, signage cluster, broadcast chain)A physical place (campus, building, floor, room)
Has membersYes — monitored hosts are assigned to itNo — hosts belong to systems, which belong to locations
Has health statusYes — computed from member devicesNo — a building does not have a health score
Can exist without the otherYes — a mobile kit has no locationYes — an empty floor has no systems
Zabbix projectionSystems/ host group treeLocations/ host group tree

A location with no systems is simply an empty node in the hierarchy. A system with no location is fully functional — it just does not appear in the location-based host group tree.


Every system and location is projected into Zabbix as a host group:

Omniglass entityZabbix artifact
System “Board Room 302”Host group Systems/board-room-302
Subsystem “Decoder Bank” under “Video Wall”Host group Systems/video-wall/decoder-bank
Location “HQ / Floor 3 / Room 302”Host group Locations/hq/floor-3/room-302
System with type assignedVirtual host og-system-<id> with type’s templates

Host groups exist for visibility and compatibility with native Zabbix pages. They are not the source of truth — Omniglass is authoritative for system structure and membership.

When a system has a type assigned, the reconciler creates a virtual host with these properties:

PropertyValue
Host nameog-system-<system-id>
Visible nameSystem display name
Host groupsThe system’s projected host group
TemplatesAll templates from the system type
Tagsog:system=<name>, og:system-type=<type-name>

The control plane continuously reconciles projected state against desired state through two mechanisms:

Audit-log polling (every 1 second): The control plane polls the Zabbix audit log for relevant events (host group changes, host membership changes, host deletion) and triggers targeted reconciliation for the affected systems and locations. The audit log is used as a wake-up signal; actual state is read directly from Zabbix via API.

Full sweep (every 2 minutes): A safety-net sweep checks all systems and locations for correctness — host groups exist and names match, membership is correct, system hosts have the right templates, tags, and macros, and location coordinates are synced to host inventory.

Manual edits in Zabbix that conflict with Omniglass state are treated as drift and corrected automatically:

DriftResolution
Host added to group via Zabbix UIRemoved
Host removed from group via Zabbix UIRe-added
Host group renamed or deletedRenamed back or recreated
System host deleted or templates changedRecreated or reset
System host tags/macros changedReset
Orphaned Locations/* groupDeleted

All corrections emit reconciliation events visible in the administration UI and container logs.

System lifecycle
OperationWhat happens
Create systemInserts row, creates Zabbix host group, stores zbx_groupid
Rename systemUpdates host group name; descendant groups rename automatically
Move systemUpdates parent_id; all descendant paths update
Delete systemRemoves membership rows, deletes host group. Children must be deleted or reassigned first.
Assign typeReconciler creates system host, assigns templates, sets tags and macros
Change typeReconciler updates template assignment; old items removed by Zabbix
Remove typeReconciler deletes system host; item history retained per Zabbix retention policy
Location lifecycle
OperationWhat happens
Create locationInserts row, creates Zabbix host group
Rename/move locationUpdates host group path; descendants update automatically
Delete locationFails if location has children; removes host group
Assign system to locationSystem’s hosts join the location’s host group; coordinates propagate to host inventory

If Omniglass is removed:

  • All Zabbix host groups (Systems/*, Locations/*) remain
  • System virtual hosts remain with their templates, items, and triggers still executing
  • Full item and trigger history is retained
  • Host inventory coordinates remain set
  • Additive og_ columns on Zabbix tables (from build-time patches) remain but are inert without Omniglass
  • Omniglass schema tables can be dropped without affecting Zabbix

The projected artifacts are self-explanatory. An operator reading the Zabbix UI without Omniglass can still understand the structure from the host group names and system host naming convention.