RabbitMQ

RabbitMQ

RabbitMQ is an open-source message-broker software that originally implemented the Advanced Message Queuing Protocol and has since been extended with a plug-in architecture to support Streaming Text Oriented Messaging Protocol, Message Queuing Telemetry Transport, and other protocols.

Available solutions




Source: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/rabbitmq_agent


Template App RabbitMQ cluster by Zabbix agent

Overview

For Zabbix version: 4.4
The template to monitor RabbitMQ by Zabbix that work without any external scripts. Most of the metrics are collected in one go, thanks to Zabbix bulk data collection.

Template App RabbitMQ Cluster — collects metrics by polling RabbitMQ management plugin with Zabbix agent.

This template was tested on:

  • RabbitMQ, version 3.5.7, 3.7.17, 3.7.18

Setup

Enable the RabbitMQ management plugin. See RabbitMQ’s documentation to enable it.

Create a user to monitor the service:

rabbitmqctl add_user zbx_monitor <PASSWORD>
rabbitmqctl set_permissions  -p / zbx_monitor "" "" ".*"
rabbitmqctl set_user_tags zbx_monitor monitoring

Login and password are also set in macros:

  • {$RABBITMQ.API.USER}
  • {$RABBITMQ.API.PASSWORD}

If your cluster consists of several nodes, it is recommended to assign the cluster template to a separate balancing host. In the case of a single-node installation, you can assign the cluster template to one host with a node template.

If you use another API endpoint, then don't forget to change {$RABBITMQ.API.CLUSTER_HOST} macro.

Install and setup Zabbix agent.

Zabbix configuration

No specific Zabbix configuration is required.

Macros used

Name Description Default
{$RABBITMQ.API.CLUSTER_HOST}

The hostname or IP of RabbitMQ cluster API endpoint

127.0.0.1
{$RABBITMQ.API.PASSWORD}

-

zabbix
{$RABBITMQ.API.PORT}

The port of RabbitMQ API endpoint

15672
{$RABBITMQ.API.USER}

-

zbx_monitor
{$RABBITMQ.LLD.FILTER.EXCHANGE.MATCHES}

Filter of discoverable exchanges

.*
{$RABBITMQ.LLD.FILTER.EXCHANGE.NOT_MATCHES}

Filter to exclude discovered exchanges

CHANGE_IF_NEEDED

Template links

There are no template links in this template.

Discovery rules

Name Description Type Key and additional info
Exchanges discovery

Individual exchange metrics

DEPENDENT rabbitmq.exchanges.discovery

Filter:

AND

- A: {#EXCHANGE} MATCHES_REGEX {$RABBITMQ.LLD.FILTER.EXCHANGE.MATCHES}

- B: {#EXCHANGE} NOT_MATCHES_REGEX {$RABBITMQ.LLD.FILTER.EXCHANGE.NOT_MATCHES}

Items collected

Group Name Description Type Key and additional info
RabbitMQ RabbitMQ: Connections total

Total number of connections

DEPENDENT rabbitmq.overview.object_totals.connections

Preprocessing:

- JSONPATH: $.object_totals.connections

RabbitMQ RabbitMQ: Channels total

Total number of channels

DEPENDENT rabbitmq.overview.object_totals.channels

Preprocessing:

- JSONPATH: $.object_totals.channels

RabbitMQ RabbitMQ: Queues total

Total number of queues

DEPENDENT rabbitmq.overview.object_totals.queues

Preprocessing:

- JSONPATH: $.object_totals.queues

RabbitMQ RabbitMQ: Consumers total

Total number of consumers

DEPENDENT rabbitmq.overview.object_totals.consumers

Preprocessing:

- JSONPATH: $.object_totals.consumers

RabbitMQ RabbitMQ: Exchanges total

Total number of exchanges

DEPENDENT rabbitmq.overview.object_totals.exchanges

Preprocessing:

- JSONPATH: $.object_totals.exchanges

RabbitMQ RabbitMQ: Messages total

Total number of messages (ready plus unacknowledged)

DEPENDENT rabbitmq.overview.queue_totals.messages

Preprocessing:

- JSONPATH: $.queue_totals.messages

RabbitMQ RabbitMQ: Messages ready for delivery

Number of messages ready for deliver

DEPENDENT rabbitmq.overview.queue_totals.messages.ready

Preprocessing:

- JSONPATH: $.queue_totals.messages_ready

RabbitMQ RabbitMQ: Messages unacknowledged

Number of unacknowledged messages

DEPENDENT rabbitmq.overview.queue_totals.messages.unacknowledged

Preprocessing:

- JSONPATH: $.queue_totals.messages_unacknowledged

RabbitMQ RabbitMQ: Messages acknowledged

Number of messages delivered to clients and acknowledged

DEPENDENT rabbitmq.overview.messages.ack

Preprocessing:

- JSONPATH: $.message_stats.ack

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages acknowledged per second

Rate of messages delivered to clients and acknowledged per second

DEPENDENT rabbitmq.overview.messages.ack.rate

Preprocessing:

- JSONPATH: $.message_stats.ack_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages confirmed

Count of messages confirmed

DEPENDENT rabbitmq.overview.messages.confirm

Preprocessing:

- JSONPATH: $.message_stats.confirm

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages confirmed per second

Rate of messages confirmed per second

DEPENDENT rabbitmq.overview.messages.confirm.rate

Preprocessing:

- JSONPATH: $.message_stats.confirm_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages delivered

Sum of messages delivered in acknowledgement mode to consumers, in no-acknowledgement mode to consumers, in acknowledgement mode in response to basic.get, and in no-acknowledgement mode in response to basic.get

DEPENDENT rabbitmq.overview.messages.deliver_get

Preprocessing:

- JSONPATH: $.message_stats.deliver_get

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages delivered per second

Rate per second of the sum of messages delivered in acknowledgement mode to consumers, in no-acknowledgement mode to consumers, in acknowledgement mode in response to basic.get, and in no-acknowledgement mode in response to basic.get

DEPENDENT rabbitmq.overview.messages.deliver_get.rate

Preprocessing:

- JSONPATH: $.message_stats.deliver_get_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages published

Count of messages published

DEPENDENT rabbitmq.overview.messages.publish

Preprocessing:

- JSONPATH: $.message_stats.publish

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages published per second

Rate of messages published per second

DEPENDENT rabbitmq.overview.messages.publish.rate

Preprocessing:

- JSONPATH: $.message_stats.publish_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages publish_in

Count of messages published from channels into this overview

DEPENDENT rabbitmq.overview.messages.publish_in

Preprocessing:

- JSONPATH: $.message_stats.publish_in

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages publish_in per second

Rate of messages published from channels into this overview per sec

DEPENDENT rabbitmq.overview.messages.publish_in.rate

Preprocessing:

- JSONPATH: $.message_stats.publish_in_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages publish_out

Count of messages published from this overview into queues

DEPENDENT rabbitmq.overview.messages.publish_out

Preprocessing:

- JSONPATH: $.message_stats.publish_out

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages publish_out per second

Rate of messages published from this overview into queues per second,0,rabbitmq,total msgs pub out rate

DEPENDENT rabbitmq.overview.messages.publish_out.rate

Preprocessing:

- JSONPATH: $.message_stats.publish_out_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages returned unroutable

Count of messages returned to publisher as unroutable

DEPENDENT rabbitmq.overview.messages.return_unroutable

Preprocessing:

- JSONPATH: $.message_stats.return_unroutable

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages returned unroutable per second

Rate of messages returned to publisher as unroutable per second

DEPENDENT rabbitmq.overview.messages.return_unroutable.rate

Preprocessing:

- JSONPATH: $.message_stats.return_unroutable_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages returned redeliver

Count of subset of messages in deliver_get which had the redelivered flag set

DEPENDENT rabbitmq.overview.messages.redeliver

Preprocessing:

- JSONPATH: $.message_stats.redeliver

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Messages returned redeliver per second

Rate of subset of messages in deliver_get which had the redelivered flag set per second

DEPENDENT rabbitmq.overview.messages.redeliver.rate

Preprocessing:

- JSONPATH: $.message_stats.redeliver_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages acknowledged

Number of messages delivered to clients and acknowledged

DEPENDENT rabbitmq.exchange.messages.ack["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.ack.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages acknowledged per second

Rate of messages delivered to clients and acknowledged per second

DEPENDENT rabbitmq.exchange.messages.ack.rate["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.ack_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages confirmed

Count of messages confirmed

DEPENDENT rabbitmq.exchange.messages.confirm["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.confirm.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages confirmed per second

Rate of messages confirmed per second

DEPENDENT rabbitmq.exchange.messages.confirm.rate["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.confirm_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages delivered

Sum of messages delivered in acknowledgement mode to consumers, in no-acknowledgement mode to consumers, in acknowledgement mode in response to basic.get, and in no-acknowledgement mode in response to basic.get

DEPENDENT rabbitmq.exchange.messages.deliver_get["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.deliver_get.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages delivered per second

Rate per second of the sum of messages delivered in acknowledgement mode to consumers, in no-acknowledgement mode to consumers, in acknowledgement mode in response to basic.get, and in no-acknowledgement mode in response to basic.get

DEPENDENT rabbitmq.exchange.messages.deliver_get.rate["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.deliver_get_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages published

Count of messages published

DEPENDENT rabbitmq.exchange.messages.publish["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.publish.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages published per second

Rate of messages published per second

DEPENDENT rabbitmq.exchange.messages.publish.rate["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.publish_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages publish_in

Count of messages published from channels into this overview

DEPENDENT rabbitmq.exchange.messages.publish_in["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.publish_in.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages publish_in per second

Rate of messages published from channels into this overview per sec

DEPENDENT rabbitmq.exchange.messages.publish_in.rate["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.publish_in_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages publish_out

Count of messages published from this overview into queues

DEPENDENT rabbitmq.exchange.messages.publish_out["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.publish_out.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages publish_out per second

Rate of messages published from this overview into queues per second,0,rabbitmq,total msgs pub out rate

DEPENDENT rabbitmq.exchange.messages.publish_out.rate["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.publish_out_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages returned unroutable

Count of messages returned to publisher as unroutable

DEPENDENT rabbitmq.exchange.messages.return_unroutable["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.return_unroutable.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages returned unroutable per second

Rate of messages returned to publisher as unroutable per second

DEPENDENT rabbitmq.exchange.messages.return_unroutable.rate["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.return_unroutable_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages redelivered

Count of subset of messages in deliver_get which had the redelivered flag set

DEPENDENT rabbitmq.exchange.messages.redeliver["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.redeliver.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Exchange {#VHOST}/{#EXCHANGE}/{#TYPE}: Messages redelivered per second

Rate of subset of messages in deliver_get which had the redelivered flag set per second

DEPENDENT rabbitmq.exchange.messages.redeliver.rate["{#VHOST}/{#EXCHANGE}/{#TYPE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.redeliver_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

Zabbix_raw_items RabbitMQ: Get overview

The HTTP API endpoint that returns cluster-wide metrics

ZABBIX_PASSIVE web.page.get["http://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.CLUSTER_HOST}:{$RABBITMQ.API.PORT}/api/overview"]

Preprocessing:

- REGEX: \n\s?\n(.*) \1

Zabbix_raw_items RabbitMQ: Get exchanges

The HTTP API endpoint that returns exchanges metrics

ZABBIX_PASSIVE web.page.get["http://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.CLUSTER_HOST}:{$RABBITMQ.API.PORT}/api/exchanges"]

Preprocessing:

- REGEX: \n\s?\n(.*) \1

Triggers

Name Description Expression Severity Dependencies and additional info
RabbitMQ: Failed to fetch overview data (or no data for 30m)

Zabbix has not received data for items for the last 30 minutes

{TEMPLATE_NAME:web.page.get["http://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.CLUSTER_HOST}:{$RABBITMQ.API.PORT}/api/overview"].nodata(30m)}=1 WARNING

Manual close: YES

Feedback

Please report any issues with the template at https://support.zabbix.com

You can also provide feedback, discuss the template or ask for help with it at ZABBIX forums.

Template App RabbitMQ node by Zabbix agent

Overview

For Zabbix version: 4.4
The template to monitor RabbitMQ by Zabbix that work without any external scripts. Most of the metrics are collected in one go, thanks to Zabbix bulk data collection.

Template App RabbitMQ Node — (Zabbix version >= 4.2) collects metrics by polling RabbitMQ management plugin with Zabbix agent.

It also uses Zabbix agent to collect RabbitMQ Linux process stats like CPU usage, memory usage and whether process is running or not.

This template was tested on:

  • RabbitMQ, version 3.5.7, 3.7.17, 3.7.18

Setup

Enable the RabbitMQ management plugin. See RabbitMQ’s documentation to enable it.

Create a user to monitor the service:

rabbitmqctl add_user zbx_monitor <PASSWORD>
rabbitmqctl set_permissions  -p / zbx_monitor "" "" ".*"
rabbitmqctl set_user_tags zbx_monitor monitoring

Login and password are also set in macros:

  • {$RABBITMQ.API.USER}
  • {$RABBITMQ.API.PASSWORD}

If you use another API endpoint, then don't forget to change {$RABBITMQ.API.HOST} macro. Install and setup Zabbix agent.

Zabbix configuration

No specific Zabbix configuration is required.

Macros used

Name Description Default
{$RABBITMQ.API.HOST}

The hostname or IP of RabbitMQ API endpoint

127.0.0.1
{$RABBITMQ.API.PASSWORD}

-

zabbix
{$RABBITMQ.API.PORT}

The port of RabbitMQ API endpoint

15672
{$RABBITMQ.API.USER}

-

zbx_monitor
{$RABBITMQ.CLUSTER.NAME}

The name of RabbitMQ cluster

rabbit
{$RABBITMQ.LLD.FILTER.QUEUE.MATCHES}

Filter of discoverable queues

.*
{$RABBITMQ.LLD.FILTER.QUEUE.NOT_MATCHES}

Filter to exclude discovered queues

CHANGE_IF_NEEDED
{$RABBITMQ.MESSAGES.MAX.WARN}

Maximum number of messages in the queue for trigger expression

1000
{$RABBITMQ.PROCESS_NAME}

RabbitMQ server process name

beam.smp
{$RABBITMQ.RESPONSE_TIME.MAX.WARN}

Maximum RabbitMQ response time in seconds for trigger expression

10

Template links

There are no template links in this template.

Discovery rules

Name Description Type Key and additional info
Queues discovery

Individual queue metrics

DEPENDENT rabbitmq.queues.discovery

Filter:

AND

- A: {#QUEUE} MATCHES_REGEX {$RABBITMQ.LLD.FILTER.QUEUE.MATCHES}

- B: {#QUEUE} NOT_MATCHES_REGEX {$RABBITMQ.LLD.FILTER.QUEUE.NOT_MATCHES}

- C: {#NODE} MATCHES_REGEX {$RABBITMQ.CLUSTER.NAME}@{HOST.NAME}

Items collected

Group Name Description Type Key and additional info
RabbitMQ RabbitMQ: Healthcheck

Runs basic healthchecks in the current node. Checks that the rabbit application is running, channels and queues can be listed successfully, and that no alarms are in effect.

ZABBIX_PASSIVE web.page.get["http://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/healthchecks/node"]

Preprocessing:

- REGEX: \n\s?\n(.*) \1

- JSONPATH: $.status

- BOOL_TO_DECIMAL

RabbitMQ RabbitMQ: Management plugin version

Version of the management plugin in use

DEPENDENT rabbitmq.node.overview.management_version

Preprocessing:

- JSONPATH: $.management_version

- DISCARD_UNCHANGED_HEARTBEAT: 1d

RabbitMQ RabbitMQ: RabbitMQ version

Version of RabbitMQ on the node which processed this request

DEPENDENT rabbitmq.node.overview.rabbitmq_version

Preprocessing:

- JSONPATH: $.rabbitmq_version

- DISCARD_UNCHANGED_HEARTBEAT: 1d

RabbitMQ RabbitMQ: Used file descriptors

Used file descriptors

DEPENDENT rabbitmq.node.fd_used

Preprocessing:

- JSONPATH: $.fd_used

RabbitMQ RabbitMQ: Free disk space

Current free disk space

DEPENDENT rabbitmq.node.disk_free

Preprocessing:

- JSONPATH: $.disk_free

RabbitMQ RabbitMQ: Memory used

Memory used in bytes

DEPENDENT rabbitmq.node.mem_used

Preprocessing:

- JSONPATH: $.mem_used

RabbitMQ RabbitMQ: Memory limit

Memory usage high watermark in bytes

DEPENDENT rabbitmq.node.mem_limit

Preprocessing:

- JSONPATH: $.mem_limit

RabbitMQ RabbitMQ: Disk free limit

Disk free space limit in bytes

DEPENDENT rabbitmq.node.disk_free_limit

Preprocessing:

- JSONPATH: $.disk_free_limit

RabbitMQ RabbitMQ: Runtime run queue

Average number of Erlang processes waiting to run

DEPENDENT rabbitmq.node.run_queue

Preprocessing:

- JSONPATH: $.run_queue

RabbitMQ RabbitMQ: Sockets used

Number of file descriptors used as sockets

DEPENDENT rabbitmq.node.sockets_used

Preprocessing:

- JSONPATH: $.sockets_used

RabbitMQ RabbitMQ: Sockets available

File descriptors available for use as sockets

DEPENDENT rabbitmq.node.sockets_total

Preprocessing:

- JSONPATH: $.sockets_total

RabbitMQ RabbitMQ: Number of network partitions

Number of network partitions this node is seeing

DEPENDENT rabbitmq.node.partitions

Preprocessing:

- JSONPATH: $.partitions

- JAVASCRIPT: return JSON.parse(value).length;

RabbitMQ RabbitMQ: Is running

Is the node running or not

DEPENDENT rabbitmq.node.running

Preprocessing:

- JSONPATH: $.running

- BOOL_TO_DECIMAL

RabbitMQ RabbitMQ: Memory alarm

Does the host has memory alarm

DEPENDENT rabbitmq.node.mem_alarm

Preprocessing:

- JSONPATH: $.mem_alarm

- BOOL_TO_DECIMAL

RabbitMQ RabbitMQ: Disk free alarm

Does the node have disk alarm

DEPENDENT rabbitmq.node.disk_free_alarm

Preprocessing:

- JSONPATH: $.disk_free_alarm

- BOOL_TO_DECIMAL

RabbitMQ RabbitMQ: Uptime

Uptime in milliseconds

DEPENDENT rabbitmq.node.uptime

Preprocessing:

- JSONPATH: $.uptime

- MULTIPLIER: 0.001

RabbitMQ RabbitMQ: Number of processes running

-

ZABBIX_PASSIVE proc.num["{$RABBITMQ.PROCESS_NAME}"]
RabbitMQ RabbitMQ: Memory usage (rss)

Resident set size memory used by process in bytes.

ZABBIX_PASSIVE proc.mem["{$RABBITMQ.PROCESS_NAME}",,,,rss]
RabbitMQ RabbitMQ: Memory usage (vsize)

Virtual memory size used by process in bytes.

ZABBIX_PASSIVE proc.mem["{$RABBITMQ.PROCESS_NAME}",,,,vsize]
RabbitMQ RabbitMQ: CPU utilization

Process CPU utilization percentage.

ZABBIX_PASSIVE proc.cpu.util["{$RABBITMQ.PROCESS_NAME}"]
RabbitMQ RabbitMQ: Service ping

-

ZABBIX_PASSIVE net.tcp.service[http,"{$RABBITMQ.API.HOST}","{$RABBITMQ.API.PORT}"]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 10m

RabbitMQ RabbitMQ: Service response time

-

ZABBIX_PASSIVE net.tcp.service.perf[http,"{$RABBITMQ.API.HOST}","{$RABBITMQ.API.PORT}"]
RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages

Count of the total messages in the queue

DEPENDENT rabbitmq.queue.messages["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].messages.first()

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages per second

Count per second of the total messages in the queue

DEPENDENT rabbitmq.queue.messages.rate["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].messages_details.rate.first()

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Consumers

Number of consumers

DEPENDENT rabbitmq.queue.consumers["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].consumers.first()

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Memory

Bytes of memory consumed by the Erlang process associated with the queue, including stack, heap and internal structures

DEPENDENT rabbitmq.queue.memory["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].memory.first()

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages ready

Number of messages ready to be delivered to clients

DEPENDENT rabbitmq.queue.messages_ready["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].messages_ready.first()

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages ready per second

Number per second of messages ready to be delivered to clients

DEPENDENT rabbitmq.queue.messages_ready.rate["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].messages_ready_details.rate.first()

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages unacknowledged

Number of messages delivered to clients but not yet acknowledged

DEPENDENT rabbitmq.queue.messages_unacknowledged["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].messages_unacknowledged.first()

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages unacknowledged per second

Number per second of messages delivered to clients but not yet acknowledged

DEPENDENT rabbitmq.queue.messages_unacknowledged.rate["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].messages_unacknowledged_details.rate.first()

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages acknowledged

Number of messages delivered to clients and acknowledged

DEPENDENT rabbitmq.queue.messages.ack["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].message_stats.ack.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages acknowledged per second

Number per second of messages delivered to clients and acknowledged

DEPENDENT rabbitmq.queue.messages.ack.rate["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].message_stats.ack_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages delivered

Count of messages delivered in acknowledgement mode to consumers

DEPENDENT rabbitmq.queue.messages.deliver["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].message_stats.deliver.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages delivered per second

Count of messages delivered in acknowledgement mode to consumers

DEPENDENT rabbitmq.queue.messages.deliver.rate["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].message_stats.deliver_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages delivered

Sum of messages delivered in acknowledgement mode to consumers, in no-acknowledgement mode to consumers, in acknowledgement mode in response to basic.get, and in no-acknowledgement mode in response to basic.get

DEPENDENT rabbitmq.queue.messages.deliver_get["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].message_stats.deliver_get.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages delivered per second

Rate per second of the sum of messages delivered in acknowledgement mode to consumers, in no-acknowledgement mode to consumers, in acknowledgement mode in response to basic.get, and in no-acknowledgement mode in response to basic.get

DEPENDENT rabbitmq.queue.messages.deliver_get.rate["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].message_stats.deliver_get_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages published

Count of messages published

DEPENDENT rabbitmq.queue.messages.publish["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].message_stats.publish.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages published per second

Rate per second of messages published

DEPENDENT rabbitmq.queue.messages.publish.rate["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].message_stats.publish_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages redelivered

Count of subset of messages in deliver_get which had the redelivered flag set

DEPENDENT rabbitmq.queue.messages.redeliver["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].message_stats.redeliver.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQ RabbitMQ: Queue {#VHOST}/{#QUEUE}: Messages redelivered per second

Rate per second of subset of messages in deliver_get which had the redelivered flag set

DEPENDENT rabbitmq.queue.messages.redeliver.rate["{#VHOST}/{#QUEUE}"]

Preprocessing:

- JSONPATH: $[?(@.name == "{#QUEUE}" && @.vhost == "{#VHOST}")].message_stats.redeliver_details.rate.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

Zabbix_raw_items RabbitMQ: Get node overview

The HTTP API endpoint that returns cluster-wide metrics

ZABBIX_PASSIVE web.page.get["http://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/overview"]

Preprocessing:

- REGEX: \n\s?\n(.*) \1

Zabbix_raw_items RabbitMQ: Get nodes

The HTTP API endpoint that returns nodes metrics

ZABBIX_PASSIVE web.page.get["http://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/nodes/{$RABBITMQ.CLUSTER.NAME}@{HOST.NAME}?memory=true"]

Preprocessing:

- REGEX: \n\s?\n(.*) \1

Zabbix_raw_items RabbitMQ: Get queues

The HTTP API endpoint that returns queues metrics

ZABBIX_PASSIVE web.page.get["http://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/queues"]

Preprocessing:

- REGEX: \n\s?\n(.*) \1

Triggers

Name Description Expression Severity Dependencies and additional info
RabbitMQ: Node healthcheck failed

https://www.rabbitmq.com/monitoring.html#health-checks

{TEMPLATE_NAME:web.page.get["http://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/healthchecks/node"].last()}=0 AVERAGE
RabbitMQ: Version has changed (new version: {ITEM.VALUE})

RabbitMQ version has changed. Ack to close.

{TEMPLATE_NAME:rabbitmq.node.overview.rabbitmq_version.diff()}=1 and {TEMPLATE_NAME:rabbitmq.node.overview.rabbitmq_version.strlen()}>0 INFO

Manual close: YES

RabbitMQ: Number of network partitions is too high (more than 0 for 5m)

https://www.rabbitmq.com/partitions.html#detecting

{TEMPLATE_NAME:rabbitmq.node.partitions.min(5m)}>0 WARNING
RabbitMQ: Node is not running

RabbitMQ node is not running

{TEMPLATE_NAME:rabbitmq.node.running.max(5m)}=0 AVERAGE

Depends on:

- RabbitMQ: Process is not running

- RabbitMQ: Service is down

RabbitMQ: Memory alarm (Memory usage threshold has been reached)

https://www.rabbitmq.com/memory.html

{TEMPLATE_NAME:rabbitmq.node.mem_alarm.last()}=1 AVERAGE
RabbitMQ: Free disk space alarm (Free space threshold has been reached)

https://www.rabbitmq.com/disk-alarms.html

{TEMPLATE_NAME:rabbitmq.node.disk_free_alarm.last()}=1 AVERAGE
RabbitMQ: has been restarted (uptime < 10m)

Uptime is less than 10 minutes

{TEMPLATE_NAME:rabbitmq.node.uptime.last()}<10m INFO

Manual close: YES

RabbitMQ: Process is not running

-

{TEMPLATE_NAME:proc.num["{$RABBITMQ.PROCESS_NAME}"].last()}=0 HIGH
RabbitMQ: Service is down

-

{TEMPLATE_NAME:net.tcp.service[http,"{$RABBITMQ.API.HOST}","{$RABBITMQ.API.PORT}"].last()}=0 AVERAGE

Manual close: YES

Depends on:

- RabbitMQ: Process is not running

RabbitMQ: Service response time is too high (over {$RABBITMQ.RESPONSE_TIME.MAX.WARN}s for 5m)

-

{TEMPLATE_NAME:net.tcp.service.perf[http,"{$RABBITMQ.API.HOST}","{$RABBITMQ.API.PORT}"].min(5m)}>{$RABBITMQ.RESPONSE_TIME.MAX.WARN} WARNING

Manual close: YES

Depends on:

- RabbitMQ: Process is not running

- RabbitMQ: Service is down

RabbitMQ: Too many messages in queue (over {$RABBITMQ.MESSAGES.MAX.WARN} for 5m)

-

{TEMPLATE_NAME:rabbitmq.queue.messages["{#VHOST}/{#QUEUE}"].min(5m)}>{$RABBITMQ.MESSAGES.MAX.WARN:"{#QUEUE}"} WARNING
RabbitMQ: Failed to fetch nodes data (or no data for 30m)

Zabbix has not received data for items for the last 30 minutes.

{TEMPLATE_NAME:web.page.get["http://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/nodes/{$RABBITMQ.CLUSTER.NAME}@{HOST.NAME}?memory=true"].nodata(30m)}=1 WARNING

Manual close: YES

Depends on:

- RabbitMQ: Process is not running

- RabbitMQ: Service is down

Feedback

Please report any issues with the template at https://support.zabbix.com

You can also provide feedback, discuss the template or ask for help with it at ZABBIX forums.

Articles and documentation

+ Propose new article
Add your solution