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.
Page Contents
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.
Name | Description | Default |
---|---|---|
{$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.
Name | Description | Type | Key and additional info |
---|---|---|---|
Get metrics | The result of API requests is expressed in the JSON. | Script | ootbi.get.metrics |
Get errors | The errors from API requests. | Dependent item | ootbi.get.errors Preprocessing * JSON Path: $.error⛔️Custom on fail: Set value to * Discard unchanged with heartbeat: 1h |
Cluster Status | Get the cluster status | Dependent item | ootbi.get.cluster.status Preprocessing * JSON Path: $.clusters.members[:].status * Discard unchanged with heartbeat: 1h |
Triggers
These triggers alert us when things are amiss.
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
Object First OOTBI: Cluster is not healthy | Cluster reports it’s not healthy. Please inspect the cluster. | find(/Object First OOTBI Cluster by HTTP/ootbi.get.cluster.status,,”like”,”\”OK\””)=0 | High | |
Object First OOTBI: There are errors in requests to API | Zabbix has received errors in response to API requests. | length(last(/Object First OOTBI Cluster by HTTP/ootbi.get.errors))>0 | Average |
LLD rule Node discovery
The LLD (Low-Level Discovery) item is used to discover hosts in your cluster. This is, at least, one node.
Name | Description | Type | Key and additional info |
---|---|---|---|
Node discovery | Discovery of cluster nodes. | Dependent item | ootbi.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.
Name | Description | Type | Key and additional info |
---|---|---|---|
Node [{#NAME}]: Get data | Gets raw data from the node [{#NAME}]. | Dependent item | ootbi.node.raw[{#ID}] Preprocessing * JSON Path: $.clusters.members[:].nodes.[?(@.id=='{#ID}’)].first() |
Node [{#NAME}]: Host Name | The name of the cluster node. | Dependent item | ootbi.node.name[{#NAME}] Preprocessing * JSON Path: $.name |
Node [{#NAME}]: State | The state of the cluster node. | Dependent item | ootbi.node.state[{#NAME}] Preprocessing * JSON Path: $.state |
Node [{#NAME}]: Uptime | The uptime of the cluster node. | Dependent item | ootbi.node.uptime[{#NAME}] Preprocessing * JSON Path: $.uptimeInSec |
Trigger prototypes for Node discovery
For each node in your cluster, these triggers are created.
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
Object First OOTBI: {#NAME} Cluster node not healthy | find(/Object First OOTBI Cluster by HTTP/ootbi.node.state[{#NAME}],,”like”,”OK”)=0 | Average | Manual close: Yes | |
Object First OOTBI: {#NAME} Cluster node restarted (uptime < 10m) | last(/Object First OOTBI Cluster by HTTP/ootbi.node.uptime[{#NAME}])<10m | Average | Manual close: Yes |
No Comments Yet