Reading Time: 3 minutes
Object First and Zabbix logo

Monitoring your environment helps you find issues within your environment. It can even predict if a disk gets full or if processors are overloaded if set up correctly. For this reason, I have started a template to monitor your Object First cluster using Zabbix.

The template is currently limited to Cluster and Host status, uptime, and whether a host was rebooted. I will extend the template over time, but this was the minimum for an initial release. You can find the template on my GitHub.

The template is based on the Veeam template that ships with Zabbix.

The template

I assume that:

  • You have Zabbix 7.0 or higher installed, and it is running correctly.
  • Your Zabbix server can access your Object First appliance management port
  • You have a dedicated monitoring user.
  • You have basic knowledge of Zabbix.
    • How to import templates.
    • How to create hosts.
    • How to link a template to a host.
    • How to set macros.

Installation

  • Download the latest yaml file from my GitHub and load it into Zabbix
  • Create a host and attach the Object First OOTBI Cluster by HTTP template
  • Configure the following macros: {$OOTBI.API.URL}, {$OOTBI.USER}, and {$OOTBI.PASSWORD}.

Full template details

Below is a detailed description of the current template. This might not be interesting for you unless you know how Zabbix works. However, this shows how I have currently created the template.

Macros used

These macros can be updated to your needs. The macros {$OOTBI.API.URL}, {$OOTBI.USER}, and {$OOTBI.PASSWORD} are mandatory for you to change. These are used to connect to your cluster.

NameDescriptionDefault
{$OOTBI.API.URL}The OOTBI Cluster endpoint is a URL in the format <scheme>://<host>:<port>.https://localhost:8443
{$OOTBI.HTTP.PROXY}Sets the HTTP proxy to http_proxy value. If this parameter is empty, then no proxy is used.
{$OOTBI.PASSWORD}The password of the Object First OOTBI Cluster account. It is used to obtain an access token.
{$OOTBI.USER}The username of the Object First OOTBI Cluster account. It is used to obtain an access token.
{$OOTBI.DATA.TIMEOUT}A response timeout for the API.10

Items

There is a script inside the Get metrics item. This JavaScript script connects to your Object First OOTBI and fetches the data.

NameDescriptionTypeKey and additional info
Get metricsThe result of API requests is expressed in the JSON.Scriptootbi.get.metrics
Get errorsThe errors from API requests.Dependent itemootbi.get.errors
Preprocessing
* JSON Path: $.error⛔️Custom on fail: Set value to
* Discard unchanged with heartbeat: 1h
Cluster StatusGet the cluster statusDependent itemootbi.get.cluster.status
Preprocessing
* JSON Path: $.clusters.members[:].status
* Discard unchanged with heartbeat: 1h

Triggers

These triggers alert us when things are amiss.

NameDescriptionExpressionSeverityDependencies and additional info
Object First OOTBI: Cluster is not healthyCluster reports it’s not healthy. Please inspect the cluster.find(/Object First OOTBI Cluster by HTTP/ootbi.get.cluster.status,,”like”,”\”OK\””)=0High
Object First OOTBI: There are errors in requests to APIZabbix has received errors in response to API requests.length(last(/Object First OOTBI Cluster by HTTP/ootbi.get.errors))>0Average

LLD rule Node discovery

The LLD (Low-Level Discovery) item is used to discover hosts in your cluster. This is, at least, one node.

NameDescriptionTypeKey and additional info
Node discoveryDiscovery of cluster nodes.Dependent itemootbi.node.discovery
Preprocessing
* JSON Path: $.clusters.members[:].nodes[:]
* Discard unchanged with heartbeat: 6h

Item prototypes for Node discovery

For each node in your cluster, these items will be created.

NameDescriptionTypeKey and additional info
Node [{#NAME}]: Get dataGets raw data from the node [{#NAME}].Dependent itemootbi.node.raw[{#ID}]
Preprocessing
* JSON Path: $.clusters.members[:].nodes.[?(@.id=='{#ID}’)].first()
Node [{#NAME}]: Host NameThe name of the cluster node.Dependent itemootbi.node.name[{#NAME}]
Preprocessing
* JSON Path: $.name
Node [{#NAME}]: StateThe state of the cluster node.Dependent itemootbi.node.state[{#NAME}]
Preprocessing
* JSON Path: $.state
Node [{#NAME}]: UptimeThe uptime of the cluster node.Dependent itemootbi.node.uptime[{#NAME}]
Preprocessing
* JSON Path: $.uptimeInSec

Trigger prototypes for Node discovery

For each node in your cluster, these triggers are created.

NameDescriptionExpressionSeverityDependencies and additional info
Object First OOTBI: {#NAME} Cluster node not healthyfind(/Object First OOTBI Cluster by HTTP/ootbi.node.state[{#NAME}],,”like”,”OK”)=0AverageManual close: Yes
Object First OOTBI: {#NAME} Cluster node restarted (uptime < 10m)last(/Object First OOTBI Cluster by HTTP/ootbi.node.uptime[{#NAME}])<10mAverageManual close: Yes