Modeling updates the object database model with information about what data to collect. As an example, if the modeler detects three network interfaces, it creates slots
for each network interface, and each of these slots is referenced by an index. It is now up to the data collector to fill each of these slots with performance data.
When the performance collectors read their configuration, the devices are matched against templates, and each template contains each data sources (for example, which data points (such as SNMP OIDs) and their slot to collect) and thresholds. In addition, any information necessary to read the performance data (such as zProperties that contain login information) is retrieved. This information is usually organized by device, and is loaded by the collector when it is started.
When devices change configuration (and therefore change the performance data that needs to be collected), the model must be refreshed either with an explicit selection of zenmodeler
).
All collectors (and the modelers) are sub-classed from PBDaemon
. PBDaemon
will automatically connect to zenhub and re-connect as needed. It provides an easy-to-use Event Service.
The configuration format and API for getting and updating any specific collector will depend on the Service it uses. There are a few caveats about forwarding configuration to collectors:
Change notifications are very "bursty".
A sequence of updates in a burst will often update the same object many times.
The configuration for thousands of devices can take a long time to extract. The configuration should be pushed or pulled incrementally.
Caveats 1 and 2 mean that we often delay sending updates by several seconds to reduce the number of changes sent. Caveat 3 makes for complex exchanges between a service and the collector. There are classes to support delayed evaluation of configuration (Procrastinator
). There is support for determining the type of object change: the deletion of a device, the update of a template, and the update of a monitor's configuration (PerformanceConfig
).