Skip to content

Partitioned Polling

Enterprise Feature

This is a feature which is currently only included in the Enterprise Edition of Observium. Support for this feature can be obtained on our Discord server.

Poller partitioning allows the distribution of polling and discovery functions to across servers to fit with topology and other requirements. This is similar to Distributed Polling and shares most of the same setup procedure, but is used to create polling "islands" for more complex scenarios.

A partitioned poller is a poller server that has a distinct identity and can have devices assigned to it, and will automatically have any devices added or discovered by it assigned to it. This is useful if your central Observium poller doesn't have connectivity to the devices to be monitored.

Each partitioned poller requires access to the MySQL database and RRD files on the main Observium system. Access to RRDs can be achieved either by using remote filesystem mounting or by using remote rrdcached. MySQL access is achieved by allowing the partitioned poller access to the primary Observium database.

Distributed and Paritioned Pollers

Setup Steps

Remote Polling

Follow the Distributed Polling guide to set up and test remote MySQL and RRDcached connections.

VPN and SSH Tunnelling

You can use VPNs, persistent SSH connections with port-forwarding via autossh and other tunnelling methods to forward the MySQL and RRDcached connections across the open Internet.

Configure

We need to modify the config.php to tell Observium that it's running as a partioned poller. This is achieved with a $config['poller_name'] entry.

For example, to configure a node to be part of a partition called site-b, you would set this as the poller_name. If no entry exists for this partition, it is created.

$config['poller_name'] = "site-b";

You can test this is working by running ./observium-wrapper poller -t to test what devices would be polled. The relevant parts of the output are below.

INFO: This is poller_id (12) using poller-restricted devices list
WHERE disabled != 1 AND poller_id = '12'
SELECT   device_id
                   FROM     devices
                   WHERE disabled != 1 AND poller_id = '12' ORDER BY last_polled_timetaken DESC
[779, 826]

You can see that this is poller_id 12, the ID for the configured poller_name. The SELECT statement is correctly using poller_id in the WHERE clause, and it returns the two devices assigned to this partition, 779 and 826.

Device can be assigned to the partition from the Device Settings tab in the device's properties in Observium.

Set device poller partition

If you are setting up Distributed pollers in a partition, you can also follow the Distribution Configuration section of the Distributed Poller setup guide to configure the required settings.

Handling Syslog

If you're using Observium as a syslog reciever, you should configure one poller node in each partition following our Syslog Integration documentation, and configure relevant devices to forward their syslog to this node.

Handling Alert Notifications

Alerts are generated by the alerter.php script which is normally run for each device by poller-wrapper.py directly after poller.php, allowing alerts to be generated with minimum latency. If partitioned pollers are capable of sending notifications, this is the optimal configuration.

If alerts need to be sent from the central site, it's necessary to disable this automatic execution of alerter.php. This can be achieved per-poller in config.php or globally in the web configuration options. To set it per-poller, add the following to config.php

$config['poller-wrapper']['alerter'] = FALSE;

To run alerter.php for this poller partition, you can invoke alerter.php with the -p <poller_id> argument. This can be scheduled in cron to run every minute

# Run alerter.php for poller partition 2 every minute
*/1 *     * * *   observium    /opt/observium/alerter.php -p 2 >> /dev/null 2>&1

If you've disabled alerter.php globally you can alert for all devices with the -h all argument

# Run alerter.php for all devices every minute
*/1 *     * * *   observium    /opt/observium/alerter.php -h all >> /dev/null 2>&1

Note that it's preferable to run the alerter directly in poller wrapper wherever possible because of the delays introduced.

It's possible to run alerter.php more frequently than 1 minute by using a shell script with sleep, but this could cause excess load and should be monitored.