Monitoring & reporting
This chapter covers the ways in which the appliance and the services it load balances can be monitored from outside the WebUI, and the health information the WebUI itself presents. It describes the SNMP agent and the MIBs it exposes, the Prometheus metric collectors used to feed an external monitoring stack, and the resource utilization graphs shown on the Dashboard.
SNMP
The appliance runs a Net-SNMP agent that answers SNMP v2c and SNMP v3 requests. It is disabled by default - until it has been configured, the SNMP page shows only the message "Nothing configured."
SNMP is enabled and configured from Settings > Collectors & Integrations > SNMP, where the protocol version(s), community string, location, contact, Service IP and port are set. SNMP v3 additionally requires at least one user to be defined. For a full description of every option, see SNMP Configuration and SNMPv3 Users.
Several characteristics of the agent are worth noting before pointing a monitoring system at it:
-
The agent listens on the Service IP selected on the SNMP page and on the loopback address only - not on every address the appliance holds. The Service IP chosen must therefore be one that the monitoring system can reach. For more information on Service IPs, see Service IPs.
-
The Location and Contact values configured in the WebUI are returned as the standard
sysLocationandsysContactobjects. -
The default port is 161 (UDP).
-
SNMP is a monitoring interface only. The SNMPv2 community is granted read-only access, and although an SNMPv3 user can be given Read/Write permission (see SNMPv3 Users), the appliance’s load balancing configuration cannot be changed over SNMP - use the WebUI or the API for that.
MIB Files
A Management Information Base file (MIB) tells the monitoring system how to interpret the values the agent returns. All of the MIB files used by the appliance are held in /usr/share/snmp/mibs, and the loadbalancer.org MIBs can also be downloaded directly from the links below - the published copies are identical to the ones shipped on the appliance.
Standard MIBs - the appliance includes the usual Linux MIB set, so network statistics, CPU load, memory and disk usage are all read in the normal way. The most commonly used are HOST-RESOURCES-MIB, IF-MIB, UCD-SNMP-MIB, IP-MIB, TCP-MIB, UDP-MIB and SNMPv2-MIB.
loadbalancer.org MIBs - three custom MIBs are provided:
| MIB | Purpose |
|---|---|
Defines the loadbalancer.org enterprise root OID, 1.3.6.1.4.1.54849, under which the two MIBs below are registered. It carries no objects of its own, but it must be loaded for the other two to resolve. |
|
Process-level information about the Layer 7 service (HAProxy) - version, uptime, connection and
session rates, SSL/TLS counters, memory pools and so on. This is the SNMP equivalent of the HAProxy
|
|
Defines the per-proxy Layer 7 statistics tables, together with three scalar objects reporting the state of the statistics poller itself. |
| Layer 4 services are not exposed through SNMP - there is no LVS or Layer 4 MIB on the appliance. To monitor the state of Layer 4 Virtual Services and their Real Servers, use the Dashboard (see Using the Dashboard) or the API (see Application Programming Interface (API)). |
Running the Examples
The examples in the sections that follow can be run at the appliance console, over SSH, or from the WebUI using Settings > Terminal command. They use SNMP v2c with a community string of public against the local appliance - adjust the version, community string and target address to match your own configuration and to query the appliance remotely.
Commands run from the Terminal command page are terminated after 30 seconds. An
snmpwalk over a large subtree can easily exceed this, so run the broader examples from the console
or over SSH. The page also rejects any command containing shell metacharacters - including ;, &,
|, <, >, * and ? - so pipes, redirection and wildcards cannot be used there.
|
The standard MIBs are loaded automatically, so the system statistics examples below resolve
object names with no extra options. The appliance does not ship an /etc/snmp/snmp.conf, however, so
the loadbalancer.org MIBs are not loaded automatically: querying them by name fails with
Unknown Object Identifier, and querying them by numeric OID returns the unresolved form, for example
SNMPv2-SMI::enterprises.54849.1.1.1.0. Add -m ALL to load every installed MIB - as the Layer 7
examples below do - or load a single MIB with -m +<MIB-NAME>, for example
-m +L7INFO-EXPERIMENTAL-MIB.
|
Monitoring System Statistics Using SNMP
General system statistics - CPU load, memory usage, disk usage and network throughput - are read using the standard MIBs, and need no -m option.
To display the system group (appliance name, uptime, contact and location):
snmpwalk -v 2c -c public localhost system SNMPv2-MIB::sysDescr.0 = STRING: Linux lb1 6.12.0-211.54.1.el10_2.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Sep 10 19:25:03 UTC 2026 x86_64 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2363) 0:00:23.63 SNMPv2-MIB::sysContact.0 = STRING: admin SNMPv2-MIB::sysName.0 = STRING: lb1 SNMPv2-MIB::sysLocation.0 = STRING: Datacenter ...
The sysName value is the appliance hostname, while sysContact and sysLocation are the Contact
and Location configured on the SNMP page.
Per-interface network statistics are available under the IF-MIB:
snmpwalk -v 2c -c public localhost IF-MIB::ifTable
Memory, CPU and disk statistics are available under the UCD-SNMP-MIB and HOST-RESOURCES-MIB, for example:
snmpwalk -v 2c -c public localhost HOST-RESOURCES-MIB::hrStorageTable snmpwalk -v 2c -c public localhost UCD-SNMP-MIB::laTable
The laTable returns the 1, 5 and 15 minute load averages as Load-1, Load-5 and Load-15.
Monitoring Layer 7 Services Using SNMP
Layer 7 information is published under the loadbalancer.org enterprise root OID 1.3.6.1.4.1.54849, which is divided into two groups:
| Group | OID | Contents |
|---|---|---|
l7Info |
1.3.6.1.4.1.54849.1.1 |
Process-level information about the running Layer 7 service. |
l7Stat |
1.3.6.1.4.1.54849.1.2 |
The state of the statistics poller, and the per-proxy statistics tables. |
The examples below use -m ALL so that object names are resolved rather than returned as numeric OIDs (see the note above).
Layer 7 process information
The l7Info group returns 57 objects describing the running Layer 7 service, equivalent to the HAProxy
show info output:
snmpwalk -v 2c -c public -m ALL localhost l7Info L7INFO-EXPERIMENTAL-MIB::l7InfoLastPolled.0 = Timeticks: (4156506864) 481 days, 1:51:08.64 L7INFO-EXPERIMENTAL-MIB::l7InfoUpdateInterval.0 = INTEGER: 4000 L7INFO-EXPERIMENTAL-MIB::l7InfoLastError.0 = Gauge32: 5 L7INFO-EXPERIMENTAL-MIB::l7InfoName.0 = STRING: HAProxy L7INFO-EXPERIMENTAL-MIB::l7InfoVersion.0 = STRING: 3.0.5-8e879a5 L7INFO-EXPERIMENTAL-MIB::l7InfoReleaseDate.0 = STRING: 2024/09/19 L7INFO-EXPERIMENTAL-MIB::l7InfoUptime.0 = STRING: 0d 0h00m34s L7INFO-EXPERIMENTAL-MIB::l7InfoUptimeSec.0 = Counter32: 34 L7INFO-EXPERIMENTAL-MIB::l7InfoNode.0 = STRING: lb1 L7INFO-EXPERIMENTAL-MIB::l7InfoPid.0 = INTEGER: 2916634 L7INFO-EXPERIMENTAL-MIB::l7InfoNBThread.0 = Gauge32: 3 ...
The first three objects describe the poller rather than the Layer 7 service itself: l7InfoLastPolled is
the time the service was last polled, l7InfoUpdateInterval is the interval between polls (4000 ms by
default) and l7InfoLastError is the last error encountered when polling.
The objects that describe the service itself fall into the groups below, and are fully documented in the MIB file:
| Area | Objects |
|---|---|
Service identity |
|
Capacity and limits |
|
Connections and sessions |
|
SSL/TLS |
|
Compression |
|
Resource usage |
|
Individual objects are polled with snmpget, which is how a monitoring system would normally read
them. Note that each object is a scalar, so the instance suffix .0 is required:
snmpget -v 2c -c public -m ALL localhost l7InfoCurrConns.0 l7InfoIdlePct.0
Layer 7 poller status
The l7Stat group exposes three scalar objects describing the statistics poller:
snmpwalk -v 2c -c public -m ALL localhost l7Stat L7STAT-EXPERIMENTAL-MIB::l7StatLastPolled.0 = Timeticks: (4156515864) 481 days, 1:52:38.64 L7STAT-EXPERIMENTAL-MIB::l7StatUpdateInterval.0 = Gauge32: 4000 L7STAT-EXPERIMENTAL-MIB::l7StatLastError.0 = Gauge32: 7
The L7STAT-EXPERIMENTAL-MIB also defines per-proxy statistics tables - l7ProxyTable,
l7FrontendTable, l7BackendTable and l7ServerTable - but the agent does not implement them:
walking any of them returns No Such Object available on this agent at this OID, and
l7StatLastError reports a non-zero value as shown above. Per-VIP and per-Real
Server statistics are therefore not available over SNMP. Use the Dashboard (see Using the Dashboard),
the service pages (see Viewing a Service), the Prometheus Layer 7 exporter (see
Metric Collectors) or the API to monitor individual
Virtual Services and Real Servers.
|
SNMPv3
Every SNMPv3 user created on the appliance is registered with the agent as an authPriv user, so each request must carry both the authentication and the privacy options - there is no authentication-only mode. The same queries shown above are made as follows:
snmpwalk -v 3 -u <USM-USERNAME> -l authPriv -a <AUTH-ALGORITHM> -A <AUTH-PASSPHRASE> \ -x AES -X <PRIVACY-PASSPHRASE> -m ALL localhost l7Info
The user name and both passphrases must match a user defined on the SNMP page - see SNMPv3 Users. The authentication algorithm passed to -a must match the Authentication algorithm set for that user, MD5 or SHA.
| Always use -x AES, whatever the user’s Privacy algorithm setting says. The Net-SNMP client shipped with the appliance does not support DES - passing -x DES is rejected outright with Invalid privacy protocol specified after -3x flag: DES - and a user created with a Privacy algorithm of DES is still queried successfully with -x AES. |
Metric Collectors
As an alternative - or in addition - to SNMP, the appliance can expose its metrics in Prometheus format for collection by an external monitoring stack. Two independent exporters are provided and each can be enabled on its own:
| Exporter | Default port | Metrics provided |
|---|---|---|
Layer 7 exporter |
9090 |
HAProxy’s built-in Prometheus exporter, publishing the frontend, backend and server statistics that the Layer 7 service collects. |
Node exporter |
9100 |
Local node metrics for the appliance itself - CPU, memory, disk, filesystem and
network statistics, published as the standard |
Both exporters are disabled by default and, as with SNMP, are published on a Service IP that must exist before they can be enabled. They are configured from Settings > Collectors & Integrations > Prometheus - see Collectors & Integrations for the full procedure.
Once an exporter is enabled, the Prometheus server is pointed at the /metrics path on the selected
Service IP and the exporter’s port, over plain HTTP - for example
http://10.11.40.70:9100/metrics for the node exporter. The node exporter also serves a small landing
page at / that links to /metrics and to a pair of /debug/pprof/ profiling endpoints; any other
path returns 404 page not found. The Layer 7 exporter serves /metrics only - its root path returns
a 503.
| The Layer 7 exporter is provided by the Layer 7 service itself rather than by a separate daemon, so it is only reachable while that service is running - that is, while at least one Layer 7 Virtual Service is configured. On an appliance with no Layer 7 services, nothing listens on the Layer 7 exporter port even though the exporter is enabled. The node exporter is independent of this and is always available once enabled. |
| Where SNMP does not provide the required detail for Layer 7 services, the Layer 7 exporter is the alternative route for an external monitoring system. |
Resource Utilization Graphs
For an at-a-glance view of appliance health without an external monitoring system, the WebUI Dashboard presents a set of live graph widgets:
-
Network Graph (kbs) - network throughput, showing the transmit (tx) and receive (rx) rate for each interface.
-
System Load Average (%) - the system load average over time.
-
System Memory Usage (Mb) - memory usage over time.
These sit in the lower portion of the Dashboard, alongside the CPU, Memory, Disks and Connections gauges at the top of the page. For a description of every widget, see Dashboard Widgets.
Clicking the eye icon in the top-right corner of any of these widgets opens the Dashboard details view, where a larger, historical graph can be displayed for a selected metric over a period of 1 Hour, 1 Day, 1 Week, 1 Month or 1 Year. The metric is pre-selected to match the widget whose icon was clicked. For more information, see Viewing Detailed Metrics.