RabbitMQ

RabbitMQ

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 — (Zabbix version >= 4.2) 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

NameDescriptionDefault
{$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

NameDescriptionTypeKey and additional info
Exchanges discovery

Individual exchange metrics

DEPENDENTrabbitmq.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

GroupNameDescriptionTypeKey and additional info
RabbitMQRabbitMQ: Connections total

Total number of connections

DEPENDENTrabbitmq.overview.object_totals.connections

Preprocessing:

- JSONPATH: $.object_totals.connections

RabbitMQRabbitMQ: Channels total

Total number of channels

DEPENDENTrabbitmq.overview.object_totals.channels

Preprocessing:

- JSONPATH: $.object_totals.channels

RabbitMQRabbitMQ: Queues total

Total number of queues

DEPENDENTrabbitmq.overview.object_totals.queues

Preprocessing:

- JSONPATH: $.object_totals.queues

RabbitMQRabbitMQ: Consumers total

Total number of consumers

DEPENDENTrabbitmq.overview.object_totals.consumers

Preprocessing:

- JSONPATH: $.object_totals.consumers

RabbitMQRabbitMQ: Exchanges total

Total number of exchanges

DEPENDENTrabbitmq.overview.object_totals.exchanges

Preprocessing:

- JSONPATH: $.object_totals.exchanges

RabbitMQRabbitMQ: Messages total

Total number of messages (ready plus unacknowledged)

DEPENDENTrabbitmq.overview.queue_totals.messages

Preprocessing:

- JSONPATH: $.queue_totals.messages

RabbitMQRabbitMQ: Messages ready for delivery

Number of messages ready for deliver

DEPENDENTrabbitmq.overview.queue_totals.messages.ready

Preprocessing:

- JSONPATH: $.queue_totals.messages_ready

RabbitMQRabbitMQ: Messages unacknowledged

Number of unacknowledged messages

DEPENDENTrabbitmq.overview.queue_totals.messages.unacknowledged

Preprocessing:

- JSONPATH: $.queue_totals.messages_unacknowledged

RabbitMQRabbitMQ: Messages acknowledged

Number of messages delivered to clients and acknowledged

DEPENDENTrabbitmq.overview.messages.ack

Preprocessing:

- JSONPATH: $.message_stats.ack

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages acknowledged per second

Rate of messages delivered to clients and acknowledged per second

DEPENDENTrabbitmq.overview.messages.ack.rate

Preprocessing:

- JSONPATH: $.message_stats.ack_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages confirmed

Count of messages confirmed

DEPENDENTrabbitmq.overview.messages.confirm

Preprocessing:

- JSONPATH: $.message_stats.confirm

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages confirmed per second

Rate of messages confirmed per second

DEPENDENTrabbitmq.overview.messages.confirm.rate

Preprocessing:

- JSONPATH: $.message_stats.confirm_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: 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

DEPENDENTrabbitmq.overview.messages.deliver_get

Preprocessing:

- JSONPATH: $.message_stats.deliver_get

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: 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

DEPENDENTrabbitmq.overview.messages.deliver_get.rate

Preprocessing:

- JSONPATH: $.message_stats.deliver_get_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages published

Count of messages published

DEPENDENTrabbitmq.overview.messages.publish

Preprocessing:

- JSONPATH: $.message_stats.publish

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages published per second

Rate of messages published per second

DEPENDENTrabbitmq.overview.messages.publish.rate

Preprocessing:

- JSONPATH: $.message_stats.publish_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages publish_in

Count of messages published from channels into this overview

DEPENDENTrabbitmq.overview.messages.publish_in

Preprocessing:

- JSONPATH: $.message_stats.publish_in

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages publish_in per second

Rate of messages published from channels into this overview per sec

DEPENDENTrabbitmq.overview.messages.publish_in.rate

Preprocessing:

- JSONPATH: $.message_stats.publish_in_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages publish_out

Count of messages published from this overview into queues

DEPENDENTrabbitmq.overview.messages.publish_out

Preprocessing:

- JSONPATH: $.message_stats.publish_out

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages publish_out per second

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

DEPENDENTrabbitmq.overview.messages.publish_out.rate

Preprocessing:

- JSONPATH: $.message_stats.publish_out_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages returned unroutable

Count of messages returned to publisher as unroutable

DEPENDENTrabbitmq.overview.messages.return_unroutable

Preprocessing:

- JSONPATH: $.message_stats.return_unroutable

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages returned unroutable per second

Rate of messages returned to publisher as unroutable per second

DEPENDENTrabbitmq.overview.messages.return_unroutable.rate

Preprocessing:

- JSONPATH: $.message_stats.return_unroutable_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages returned redeliver

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

DEPENDENTrabbitmq.overview.messages.redeliver

Preprocessing:

- JSONPATH: $.message_stats.redeliver

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: Messages returned redeliver per second

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

DEPENDENTrabbitmq.overview.messages.redeliver.rate

Preprocessing:

- JSONPATH: $.message_stats.redeliver_details.rate

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

Number of messages delivered to clients and acknowledged

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

Rate of messages delivered to clients and acknowledged per second

DEPENDENTrabbitmq.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

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

Count of messages confirmed

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

Rate of messages confirmed per second

DEPENDENTrabbitmq.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

RabbitMQRabbitMQ: 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

DEPENDENTrabbitmq.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

RabbitMQRabbitMQ: 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

DEPENDENTrabbitmq.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

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

Count of messages published

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

Rate of messages published per second

DEPENDENTrabbitmq.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

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

Count of messages published from channels into this overview

DEPENDENTrabbitmq.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

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

Rate of messages published from channels into this overview per sec

DEPENDENTrabbitmq.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

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

Count of messages published from this overview into queues

DEPENDENTrabbitmq.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

RabbitMQRabbitMQ: 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

DEPENDENTrabbitmq.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

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

Count of messages returned to publisher as unroutable

DEPENDENTrabbitmq.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

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

Rate of messages returned to publisher as unroutable per second

DEPENDENTrabbitmq.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

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

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

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

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

DEPENDENTrabbitmq.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_itemsRabbitMQ: Get overview

The HTTP API endpoint that returns cluster-wide metrics

ZABBIX_PASSIVEweb.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_itemsRabbitMQ: Get exchanges

The HTTP API endpoint that returns exchanges metrics

ZABBIX_PASSIVEweb.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

NameDescriptionExpressionSeverityDependencies 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)}=1WARNING

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

NameDescriptionDefault
{$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

NameDescriptionTypeKey and additional info
Queues discovery

Individual queue metrics

DEPENDENTrabbitmq.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

GroupNameDescriptionTypeKey and additional info
RabbitMQRabbitMQ: 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_PASSIVEweb.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

RabbitMQRabbitMQ: Management plugin version

Version of the management plugin in use

DEPENDENTrabbitmq.node.overview.management_version

Preprocessing:

- JSONPATH: $.management_version

- DISCARD_UNCHANGED_HEARTBEAT: 1d

RabbitMQRabbitMQ: RabbitMQ version

Version of RabbitMQ on the node which processed this request

DEPENDENTrabbitmq.node.overview.rabbitmq_version

Preprocessing:

- JSONPATH: $.rabbitmq_version

- DISCARD_UNCHANGED_HEARTBEAT: 1d

RabbitMQRabbitMQ: Used file descriptors

Used file descriptors

DEPENDENTrabbitmq.node.fd_used

Preprocessing:

- JSONPATH: $.fd_used

RabbitMQRabbitMQ: Free disk space

Current free disk space

DEPENDENTrabbitmq.node.disk_free

Preprocessing:

- JSONPATH: $.disk_free

RabbitMQRabbitMQ: Memory used

Memory used in bytes

DEPENDENTrabbitmq.node.mem_used

Preprocessing:

- JSONPATH: $.mem_used

RabbitMQRabbitMQ: Memory limit

Memory usage high watermark in bytes

DEPENDENTrabbitmq.node.mem_limit

Preprocessing:

- JSONPATH: $.mem_limit

RabbitMQRabbitMQ: Disk free limit

Disk free space limit in bytes

DEPENDENTrabbitmq.node.disk_free_limit

Preprocessing:

- JSONPATH: $.disk_free_limit

RabbitMQRabbitMQ: Runtime run queue

Average number of Erlang processes waiting to run

DEPENDENTrabbitmq.node.run_queue

Preprocessing:

- JSONPATH: $.run_queue

RabbitMQRabbitMQ: Sockets used

Number of file descriptors used as sockets

DEPENDENTrabbitmq.node.sockets_used

Preprocessing:

- JSONPATH: $.sockets_used

RabbitMQRabbitMQ: Sockets available

File descriptors available for use as sockets

DEPENDENTrabbitmq.node.sockets_total

Preprocessing:

- JSONPATH: $.sockets_total

RabbitMQRabbitMQ: Number of network partitions

Number of network partitions this node is seeing

DEPENDENTrabbitmq.node.partitions

Preprocessing:

- JSONPATH: $.partitions

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

RabbitMQRabbitMQ: Is running

Is the node running or not

DEPENDENTrabbitmq.node.running

Preprocessing:

- JSONPATH: $.running

- BOOL_TO_DECIMAL

RabbitMQRabbitMQ: Memory alarm

Does the host has memory alarm

DEPENDENTrabbitmq.node.mem_alarm

Preprocessing:

- JSONPATH: $.mem_alarm

- BOOL_TO_DECIMAL

RabbitMQRabbitMQ: Disk free alarm

Does the node have disk alarm

DEPENDENTrabbitmq.node.disk_free_alarm

Preprocessing:

- JSONPATH: $.disk_free_alarm

- BOOL_TO_DECIMAL

RabbitMQRabbitMQ: Uptime

Uptime in milliseconds

DEPENDENTrabbitmq.node.uptime

Preprocessing:

- JSONPATH: $.uptime

- MULTIPLIER: 0.001

RabbitMQRabbitMQ: Number of processes running

-

ZABBIX_PASSIVEproc.num["{$RABBITMQ.PROCESS_NAME}"]
RabbitMQRabbitMQ: Memory usage (rss)

Resident set size memory used by process in bytes.

ZABBIX_PASSIVEproc.mem["{$RABBITMQ.PROCESS_NAME}",,,,rss]
RabbitMQRabbitMQ: Memory usage (vsize)

Virtual memory size used by process in bytes.

ZABBIX_PASSIVEproc.mem["{$RABBITMQ.PROCESS_NAME}",,,,vsize]
RabbitMQRabbitMQ: CPU utilization

Process CPU utilization percentage.

ZABBIX_PASSIVEproc.cpu.util["{$RABBITMQ.PROCESS_NAME}"]
RabbitMQRabbitMQ: Service ping

-

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

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 10m

RabbitMQRabbitMQ: Service response time

-

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

Count of the total messages in the queue

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

Preprocessing:

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

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

Count per second of the total messages in the queue

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

Preprocessing:

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

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

Number of consumers

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

Preprocessing:

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

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

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

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

Preprocessing:

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

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

Number of messages ready to be delivered to clients

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

Preprocessing:

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

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

Number per second of messages ready to be delivered to clients

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

Preprocessing:

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

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

Number of messages delivered to clients but not yet acknowledged

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

Preprocessing:

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

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

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

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

Preprocessing:

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

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

Number of messages delivered to clients and acknowledged

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

Number per second of messages delivered to clients and acknowledged

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

Count of messages delivered in acknowledgement mode to consumers

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

Count of messages delivered in acknowledgement mode to consumers

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: 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

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

RabbitMQRabbitMQ: 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

DEPENDENTrabbitmq.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

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

Count of messages published

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

Rate per second of messages published

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

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

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

Preprocessing:

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

⛔️ON_FAIL: CUSTOM_VALUE -> 0

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

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

DEPENDENTrabbitmq.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_itemsRabbitMQ: Get node overview

The HTTP API endpoint that returns cluster-wide metrics

ZABBIX_PASSIVEweb.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_itemsRabbitMQ: Get nodes

The HTTP API endpoint that returns nodes metrics

ZABBIX_PASSIVEweb.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_itemsRabbitMQ: Get queues

The HTTP API endpoint that returns queues metrics

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

Preprocessing:

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

Triggers

NameDescriptionExpressionSeverityDependencies 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()}=0AVERAGE
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()}>0INFO

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)}>0WARNING
RabbitMQ: Node is not running

RabbitMQ node is not running

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

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()}=1AVERAGE
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()}=1AVERAGE
RabbitMQ: has been restarted (uptime < 10m)

Uptime is less than 10 minutes

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

Manual close: YES

RabbitMQ: Process is not running

-

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

-

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

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)}=1WARNING

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