Hello everyone,
i'm new to Zabbix and I'm trying to monitor a RabbitMQ cluster v3.8 with Zabbix 4.2 (mandatory versions)
Since the RMQ API return has changed, the official template doesn't seems to work OOB
So, I created a script that get my informations :
This Python script provides this JSON output, depending on which arguments you pass (here is "queues") :
I managed to get basic stuff with preprocessing steps (JSONPath) but here is the catch :
I don't know how many queues I will get on each nodes, so I want to create a discovery rule to get everything from the JSON above (I have an item which contains this JSON)
I tried so many things to use those data (from official template, asking around at my company, read everything that I can put my hand on) but I'm stuck
does anyone has any idea ? I think it's possible but can't find the way
Thank you very much
i'm new to Zabbix and I'm trying to monitor a RabbitMQ cluster v3.8 with Zabbix 4.2 (mandatory versions)
Since the RMQ API return has changed, the official template doesn't seems to work OOB
So, I created a script that get my informations :
Code:
#!/bin/python2.7
# Libraries import
import requests
import json
import sys
import os
# Define URLs
overview="/api/overview"
nodes="/api/nodes"
queues="/api/queues"
# Get credentials from file
with open('/tech/zabbix/cred') as json_file:
data = json.load(json_file)
user = data['user']
passwd = data['pass']
# Test which URL we want to call
if ''.join(sys.argv[1]) == "overview":
commande=overview
if ''.join(sys.argv[1]) == "queues":
commande=queues
if ''.join(sys.argv[1]) == "nodes":
commande=nodes
def upper_keys(x):
if isinstance(x, list):
return [upper_keys(v) for v in x]
elif isinstance(x, dict):
return dict(("" + k.upper() + "", upper_keys(v)) for k, v in x.iteritems())
else:
return x
# Main
response = requests.get("http://localhost:15672" + commande, auth=(user, passwd))
if(response.ok):
json_data = json.loads(response.content)
# json = json.dumps(upper_keys(json_data), sort_keys=True, indent=4)
json = json.dumps(upper_keys(json_data))
print(json)
Code:
[{"MESSAGES_UNACKNOWLEDGED_RAM": 0, "RECOVERABLE_SLAVES": null, "CONSUMERS": 0, "REDUCTIONS": 36551995, "AUTO_DELETE": false, "MESSAGE_BYTES_PAGED_OUT": 0, "MESSAGE_BYTES_UNACKNOWLEDGED": 0, "REDUCTIONS_DETAILS": {"RATE": 0.0}, "MESSAGE_BYTES": 359988, "MESSAGES_UNACKNOWLEDGED": 0, "CONSUMER_UTILISATION": null, "EXCLUSIVE": false, "VHOST": "/", "GARBAGE_COLLECTION": {"MAX_HEAP_SIZE": 0, "MIN_HEAP_SIZE": 233, "FULLSWEEP_AFTER": 65535, "MINOR_GCS": 263, "MIN_BIN_VHEAP_SIZE": 46422}, "MESSAGES_DETAILS": {"RATE": 0.0}, "SLAVE_NODES": ["rabbit@server567"], "MESSAGE_BYTES_PERSISTENT": 0, "POLICY": "ha-all", "MESSAGES_PAGED_OUT": 0, "NODE": "rabbit@server566", "HEAD_MESSAGE_TIMESTAMP": null, "DURABLE": false, "MESSAGES_READY_RAM": 29999, "STATE": "running", "MESSAGE_STATS": {"PUBLISH_DETAILS": {"RATE": 0.0}, "PUBLISH": 29999}, "ARGUMENTS": {}, "EFFECTIVE_POLICY_DEFINITION": {"HA-MODE": "all"}, "MESSAGES_READY": 29999, "MESSAGES_RAM": 29999, "MESSAGE_BYTES_READY": 359988, "SINGLE_ACTIVE_CONSUMER_TAG": null, "NAME": "test-01", "MESSAGES_PERSISTENT": 0, "BACKING_QUEUE_STATUS": {"MIRROR_SENDERS": 0, "Q1": 0, "Q3": 0, "Q2": 0, "Q4": 29999, "AVG_ACK_EGRESS_RATE": 0.0, "MIRROR_SEEN": 0, "LEN": 29999, "TARGET_RAM_COUNT": "infinity", "MODE": "default", "NEXT_SEQ_ID": 29999, "DELTA": ["delta", "undefined", 0, 0, "undefined"], "AVG_ACK_INGRESS_RATE": 0.0, "AVG_EGRESS_RATE": 0.0, "AVG_INGRESS_RATE": 0.0}, "MESSAGES": 29999, "IDLE_SINCE": "2020-10-22 12:41:22", "OPERATOR_POLICY": null, "SYNCHRONISED_SLAVE_NODES": ["rabbit@server567"], "MEMORY": 18250220, "EXCLUSIVE_CONSUMER_TAG": null, "MESSAGES_READY_DETAILS": {"RATE": 0.0}, "TYPE": "classic", "MESSAGES_UNACKNOWLEDGED_DETAILS": {"RATE": 0.0}, "MESSAGE_BYTES_RAM": 359988}, {"MESSAGES_UNACKNOWLEDGED_RAM": 0, "RECOVERABLE_SLAVES": null, "CONSUMERS": 0, "REDUCTIONS": 35943061, "AUTO_DELETE": false, "MESSAGE_BYTES_PAGED_OUT": 0, "MESSAGE_BYTES_UNACKNOWLEDGED": 0, "REDUCTIONS_DETAILS": {"RATE": 0.0}, "MESSAGE_BYTES": 359988, "MESSAGES_UNACKNOWLEDGED": 0, "CONSUMER_UTILISATION": null, "EXCLUSIVE": false, "VHOST": "/", "GARBAGE_COLLECTION": {"MAX_HEAP_SIZE": 0, "MIN_HEAP_SIZE": 233, "FULLSWEEP_AFTER": 65535, "MINOR_GCS": 257, "MIN_BIN_VHEAP_SIZE": 46422}, "MESSAGES_DETAILS": {"RATE": 0.0}, "SLAVE_NODES": ["rabbit@server567"], "MESSAGE_BYTES_PERSISTENT": 0, "POLICY": "ha-all", "MESSAGES_PAGED_OUT": 0, "NODE": "rabbit@server566", "HEAD_MESSAGE_TIMESTAMP": null, "DURABLE": false, "MESSAGES_READY_RAM": 29999, "STATE": "running", "MESSAGE_STATS": {"PUBLISH_DETAILS": {"RATE": 0.0}, "PUBLISH": 29999}, "ARGUMENTS": {}, "EFFECTIVE_POLICY_DEFINITION": {"HA-MODE": "all"}, "MESSAGES_READY": 29999, "MESSAGES_RAM": 29999, "MESSAGE_BYTES_READY": 359988, "SINGLE_ACTIVE_CONSUMER_TAG": null, "NAME": "test-02", "MESSAGES_PERSISTENT": 0, "BACKING_QUEUE_STATUS": {"MIRROR_SENDERS": 0, "Q1": 0, "Q3": 0, "Q2": 0, "Q4": 29999, "AVG_ACK_EGRESS_RATE": 0.0, "MIRROR_SEEN": 0, "LEN": 29999, "TARGET_RAM_COUNT": "infinity", "MODE": "default", "NEXT_SEQ_ID": 29999, "DELTA": ["delta", "undefined", 0, 0, "undefined"], "AVG_ACK_INGRESS_RATE": 0.0, "AVG_EGRESS_RATE": 0.0, "AVG_INGRESS_RATE": 0.0}, "MESSAGES": 29999, "IDLE_SINCE": "2020-10-22 12:41:22", "OPERATOR_POLICY": null, "SYNCHRONISED_SLAVE_NODES": ["rabbit@server567"], "MEMORY": 18250220, "EXCLUSIVE_CONSUMER_TAG": null, "MESSAGES_READY_DETAILS": {"RATE": 0.0}, "TYPE": "classic", "MESSAGES_UNACKNOWLEDGED_DETAILS": {"RATE": 0.0}, "MESSAGE_BYTES_RAM": 359988}, {"MESSAGES_UNACKNOWLEDGED_RAM": 0, "RECOVERABLE_SLAVES": null, "CONSUMERS": 0, "REDUCTIONS": 36756275, "AUTO_DELETE": false, "MESSAGE_BYTES_PAGED_OUT": 0, "MESSAGE_BYTES_UNACKNOWLEDGED": 0, "REDUCTIONS_DETAILS": {"RATE": 0.0}, "MESSAGE_BYTES": 359988, "MESSAGES_UNACKNOWLEDGED": 0, "CONSUMER_UTILISATION": null, "EXCLUSIVE": false, "VHOST": "/", "GARBAGE_COLLECTION": {"MAX_HEAP_SIZE": 0, "MIN_HEAP_SIZE": 233, "FULLSWEEP_AFTER": 65535, "MINOR_GCS": 257, "MIN_BIN_VHEAP_SIZE": 46422}, "MESSAGES_DETAILS": {"RATE": 0.0}, "SLAVE_NODES": ["rabbit@server567"], "MESSAGE_BYTES_PERSISTENT": 0, "POLICY": "ha-all", "MESSAGES_PAGED_OUT": 0, "NODE": "rabbit@server566", "HEAD_MESSAGE_TIMESTAMP": null, "DURABLE": false, "MESSAGES_READY_RAM": 29999, "STATE": "running", "MESSAGE_STATS": {"PUBLISH_DETAILS": {"RATE": 0.0}, "PUBLISH": 29999}, "ARGUMENTS": {}, "EFFECTIVE_POLICY_DEFINITION": {"HA-MODE": "all"}, "MESSAGES_READY": 29999, "MESSAGES_RAM": 29999, "MESSAGE_BYTES_READY": 359988, "SINGLE_ACTIVE_CONSUMER_TAG": null, "NAME": "test-03", "MESSAGES_PERSISTENT": 0, "BACKING_QUEUE_STATUS": {"MIRROR_SENDERS": 0, "Q1": 0, "Q3": 0, "Q2": 0, "Q4": 29999, "AVG_ACK_EGRESS_RATE": 0.0, "MIRROR_SEEN": 0, "LEN": 29999, "TARGET_RAM_COUNT": "infinity", "MODE": "default", "NEXT_SEQ_ID": 29999, "DELTA": ["delta", "undefined", 0, 0, "undefined"], "AVG_ACK_INGRESS_RATE": 0.0, "AVG_EGRESS_RATE": 0.0, "AVG_INGRESS_RATE": 0.0}, "MESSAGES": 29999, "IDLE_SINCE": "2020-10-22 12:41:23", "OPERATOR_POLICY": null, "SYNCHRONISED_SLAVE_NODES": ["rabbit@server567"], "MEMORY": 18250204, "EXCLUSIVE_CONSUMER_TAG": null, "MESSAGES_READY_DETAILS": {"RATE": 0.0}, "TYPE": "classic", "MESSAGES_UNACKNOWLEDGED_DETAILS": {"RATE": 0.0}, "MESSAGE_BYTES_RAM": 359988}, {"MESSAGES_UNACKNOWLEDGED_RAM": 0, "RECOVERABLE_SLAVES": null, "CONSUMERS": 0, "REDUCTIONS": 322913, "AUTO_DELETE": false, "MESSAGE_BYTES_PAGED_OUT": 0, "MESSAGE_BYTES_UNACKNOWLEDGED": 0, "REDUCTIONS_DETAILS": {"RATE": 0.0}, "MESSAGE_BYTES": 0, "MESSAGES_UNACKNOWLEDGED": 0, "CONSUMER_UTILISATION": null, "EXCLUSIVE": false, "VHOST": "/", "GARBAGE_COLLECTION": {"MAX_HEAP_SIZE": 0, "MIN_HEAP_SIZE": 233, "FULLSWEEP_AFTER": 65535, "MINOR_GCS": 508, "MIN_BIN_VHEAP_SIZE": 46422}, "MESSAGES_DETAILS": {"RATE": 0.0}, "SLAVE_NODES": ["rabbit@server567"], "MESSAGE_BYTES_PERSISTENT": 0, "POLICY": "ha-all", "MESSAGES_PAGED_OUT": 0, "NODE": "rabbit@server566", "HEAD_MESSAGE_TIMESTAMP": null, "DURABLE": false, "MESSAGES_READY_RAM": 0, "STATE": "running", "ARGUMENTS": {}, "EFFECTIVE_POLICY_DEFINITION": {"HA-MODE": "all"}, "MESSAGES_READY": 0, "MESSAGES_RAM": 0, "MESSAGE_BYTES_READY": 0, "SINGLE_ACTIVE_CONSUMER_TAG": null, "NAME": "test-04", "MESSAGES_PERSISTENT": 0, "BACKING_QUEUE_STATUS": {"MIRROR_SENDERS": 0, "Q1": 0, "Q3": 0, "Q2": 0, "Q4": 0, "AVG_ACK_EGRESS_RATE": 0.0, "MIRROR_SEEN": 0, "LEN": 0, "TARGET_RAM_COUNT": "infinity", "MODE": "default", "NEXT_SEQ_ID": 0, "DELTA": ["delta", "undefined", 0, 0, "undefined"], "AVG_ACK_INGRESS_RATE": 0.0, "AVG_EGRESS_RATE": 0.0, "AVG_INGRESS_RATE": 0.0}, "MESSAGES": 0, "IDLE_SINCE": "2020-10-22 12:41:23", "OPERATOR_POLICY": null, "SYNCHRONISED_SLAVE_NODES": ["rabbit@server567"], "MEMORY": 10484, "EXCLUSIVE_CONSUMER_TAG": null, "MESSAGES_READY_DETAILS": {"RATE": 0.0}, "TYPE": "classic", "MESSAGES_UNACKNOWLEDGED_DETAILS": {"RATE": 0.0}, "MESSAGE_BYTES_RAM": 0}]
I don't know how many queues I will get on each nodes, so I want to create a discovery rule to get everything from the JSON above (I have an item which contains this JSON)
I tried so many things to use those data (from official template, asking around at my company, read everything that I can put my hand on) but I'm stuck
does anyone has any idea ? I think it's possible but can't find the way
Thank you very much