7. Multiple Mix-In Inheritance and Performance (RRD) Template Binding

Performance configurations are stored in objects called RRDTemplates, frequently just referred to as templates. Templates contain other objects that define where and how to obtain performance data, thresholds for that data and graphs of the data. A template can be defined anywhere in the Device Class hierarchy or on an individual device.

The determination of which templates apply to what objects is called binding. There are two steps to binding: first is determining which template names are appropriate and second is locating the correct templates with those names. The template names used for components such as FileSystems, Interfaces, etc is the same as the components' meta type. For example, file systems use templates name FileSystem. Devices are more complex because users can modify the names of the templates to be used and can specify more than one name. This list of template names is stored in the zDeviceTemplates zProperty. This zProperty can be edited directly on the zProperties page of any Device or Device Class. It can also be edited through the Bind Templates menu item and dialog available from the Templates page of any Device or Device Class. The second step of template binding is finding the correct template with the given name. As with zProperties, templates can be defined directly on a Device or they can be inherited from one of the Device Classes above it. The first templates found with the correct names searching up the hierarchy are used. Any similarly named templates farther up the hierarchy are ignored.

7.1. Template Binding Example 1

You add a new device at /Devices/Server/Linux/Example1Server. You haven't edited its zDeviceTemplates so it is inheriting the value of "Device" from the root Device Class, in this case "/Devices". Zenoss looks to see if there is a template named Device defined on Example1Server itself. There is not, so it checks /Devices/Server/Linux. There is a template named Device defined for that Device Class, so that template is used for Example1Server. There is also a template named Device defined at /Devices, but that one isn't used in this case because the one at /Devices/Server/Linux overrides it.

7.2. Template Binding Example 2

You want to perform specific monitoring of servers running a certain web application, but those servers are spread across several different Device Classes. You create a new template at /Devices called WebApplication with the appropriate Data Sources, Thresholds and Graphs. You then append the name "WebApplication" to the zDeviceTemplates zProperty for the Devices Classes and/or individual Devices running this web application. (You could use the Bind Templates menu item and dialog on the Templates page if you prefer instead of directly editing zDeviceTemplates.)