# Apache ActiveMQ by JMX ## Overview This template is designed for the effortless deployment of Apache ActiveMQ monitoring by Zabbix via JMX and doesn't require any external scripts. ## Requirements Zabbix version: 7.0 and higher. ## Tested versions This template has been tested on: - Apache ActiveMQ 5.15.5 ## Configuration > Zabbix should be configured according to the instructions in the [Templates out of the box](https://www.zabbix.com/documentation/7.0/manual/config/templates_out_of_the_box) section. ## Setup Metrics are collected by JMX. 1. Enable and configure JMX access to Apache ActiveMQ. See documentation for [instructions](https://activemq.apache.org/jmx.html). 2. Set values in host macros {$ACTIVEMQ.USERNAME}, {$ACTIVEMQ.PASSWORD} and {$ACTIVEMQ.PORT}. ### Macros used |Name|Description|Default| |----|-----------|-------| |{$ACTIVEMQ.USER}|

User for JMX

|`admin`| |{$ACTIVEMQ.PASSWORD}|

Password for JMX

|`activemq`| |{$ACTIVEMQ.PORT}|

Port for JMX

|`1099`| |{$ACTIVEMQ.LLD.FILTER.BROKER.MATCHES}|

Filter of discoverable discovered brokers

|`.*`| |{$ACTIVEMQ.LLD.FILTER.BROKER.NOT_MATCHES}|

Filter to exclude discovered brokers

|`CHANGE IF NEEDED`| |{$ACTIVEMQ.LLD.FILTER.DESTINATION.MATCHES}|

Filter of discoverable discovered destinations

|`.*`| |{$ACTIVEMQ.LLD.FILTER.DESTINATION.NOT_MATCHES}|

Filter to exclude discovered destinations

|`CHANGE IF NEEDED`| |{$ACTIVEMQ.MSG.RATE.WARN.TIME}|

The time for message enqueue/dequeue rate. Can be used with destination or broker name as context.

|`15m`| |{$ACTIVEMQ.MEM.MAX.WARN}|

Memory threshold for AVERAGE trigger. Can be used with destination or broker name as context.

|`75`| |{$ACTIVEMQ.MEM.MAX.HIGH}|

Memory threshold for HIGH trigger. Can be used with destination or broker name as context.

|`90`| |{$ACTIVEMQ.MEM.TIME}|

Time during which the metric can be above the threshold. Can be used with destination or broker name as context.

|`5m`| |{$ACTIVEMQ.STORE.MAX.WARN}|

Storage threshold for AVERAGE trigger. Can be used with broker name as context.

|`75`| |{$ACTIVEMQ.STORE.TIME}|

Time during which the metric can be above the threshold. Can be used with destination or broker name as context.

|`5m`| |{$ACTIVEMQ.STORE.MAX.HIGH}|

Storage threshold for HIGH trigger. Can be used with broker name as context.

|`90`| |{$ACTIVEMQ.TEMP.MAX.WARN}|

Temp threshold for AVERAGE trigger. Can be used with broker name as context.

|`75`| |{$ACTIVEMQ.TEMP.MAX.HIGH}|

Temp threshold for HIGH trigger. Can be used with broker name as context.

|`90`| |{$ACTIVEMQ.TEMP.TIME}|

Time during which the metric can be above the threshold. Can be used with destination or broker name as context.

|`5m`| |{$ACTIVEMQ.DESTINATION.CONSUMERS.MIN.TIME}|

Time during which there may be no consumers in destination. Can be used with destination name as context.

|`10m`| |{$ACTIVEMQ.DESTINATION.CONSUMERS.MIN.HIGH}|

Minimum amount of consumers for destination. Can be used with destination name as context.

|`1`| |{$ACTIVEMQ.DESTINATION.PRODUCERS.MIN.TIME}|

Time during which there may be no producers on destination. Can be used with destination name as context.

|`10m`| |{$ACTIVEMQ.DESTINATION.PRODUCERS.MIN.HIGH}|

Minimum amount of producers for destination. Can be used with destination name as context.

|`1`| |{$ACTIVEMQ.BROKER.CONSUMERS.MIN.TIME}|

Time during which there may be no consumers on destination. Can be used with broker name as context.

|`5m`| |{$ACTIVEMQ.BROKER.CONSUMERS.MIN.HIGH}|

Minimum amount of consumers for broker. Can be used with broker name as context.

|`1`| |{$ACTIVEMQ.BROKER.PRODUCERS.MIN.TIME}|

Time during which there may be no producers on broker. Can be used with broker name as context.

|`5m`| |{$ACTIVEMQ.BROKER.PRODUCERS.MIN.HIGH}|

Minimum amount of producers for broker. Can be used with broker name as context.

|`1`| |{$ACTIVEMQ.TOTAL.CONSUMERS.COUNT}|

Attribute for TotalConsumerCount per destination. Used to suppress destination's triggers when the count of consumers on the broker is lower than threshold.

|`TotalConsumerCount`| |{$ACTIVEMQ.TOTAL.PRODUCERS.COUNT}|

Attribute for TotalProducerCount per destination. Used to suppress destination's triggers when the count of consumers on the broker is lower than threshold.

|`TotalProducerCount`| |{$ACTIVEMQ.QUEUE.TIME}|

Time during which the QueueSize can be higher than threshold. Can be used with destination name as context.

|`10m`| |{$ACTIVEMQ.QUEUE.WARN}|

Threshold for QueueSize. Can be used with destination name as context.

|`100`| |{$ACTIVEMQ.QUEUE.ENABLED}|

Use this to disable alerting for specific destination. 1 = enabled, 0 = disabled. Can be used with destination name as context.

|`1`| |{$ACTIVEMQ.EXPIRED.WARN}|

Threshold for expired messages count. Can be used with destination name as context.

|`0`| ### LLD rule Brokers discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Brokers discovery|

Discovery of brokers

|JMX agent|jmx.discovery[beans,"org.apache.activemq:type=Broker,brokerName=*"]| ### Item prototypes for Brokers discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Broker {#JMXBROKERNAME}: Version|

The version of the broker.

|JMX agent|jmx[{#JMXOBJ},BrokerVersion]

**Preprocessing**

| |Broker {#JMXBROKERNAME}: Uptime|

The uptime of the broker.

|JMX agent|jmx[{#JMXOBJ},UptimeMillis]

**Preprocessing**

| |Broker {#JMXBROKERNAME}: Memory limit|

Memory limit, in bytes, used for holding undelivered messages before paging to temporary storage.

|JMX agent|jmx[{#JMXOBJ},MemoryLimit]

**Preprocessing**

| |Broker {#JMXBROKERNAME}: Memory usage in percents|

Percent of memory limit used.

|JMX agent|jmx[{#JMXOBJ}, MemoryPercentUsage]| |Broker {#JMXBROKERNAME}: Storage limit|

Disk limit, in bytes, used for persistent messages before producers are blocked.

|JMX agent|jmx[{#JMXOBJ},StoreLimit]

**Preprocessing**

| |Broker {#JMXBROKERNAME}: Storage usage in percents|

Percent of store limit used.

|JMX agent|jmx[{#JMXOBJ},StorePercentUsage]| |Broker {#JMXBROKERNAME}: Temp limit|

Disk limit, in bytes, used for non-persistent messages and temporary data before producers are blocked.

|JMX agent|jmx[{#JMXOBJ},TempLimit]

**Preprocessing**

| |Broker {#JMXBROKERNAME}: Temp usage in percents|

Percent of temp limit used.

|JMX agent|jmx[{#JMXOBJ},TempPercentUsage]| |Broker {#JMXBROKERNAME}: Messages enqueue rate|

Rate of messages that have been sent to the broker.

|JMX agent|jmx[{#JMXOBJ},TotalEnqueueCount]

**Preprocessing**

| |Broker {#JMXBROKERNAME}: Messages dequeue rate|

Rate of messages that have been delivered by the broker and acknowledged by consumers.

|JMX agent|jmx[{#JMXOBJ},TotalDequeueCount]

**Preprocessing**

| |Broker {#JMXBROKERNAME}: Consumers count total|

Number of consumers attached to this broker.

|JMX agent|jmx[{#JMXOBJ},TotalConsumerCount]| |Broker {#JMXBROKERNAME}: Producers count total|

Number of producers attached to this broker.

|JMX agent|jmx[{#JMXOBJ},TotalProducerCount]| ### Trigger prototypes for Brokers discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Broker {#JMXBROKERNAME}: Version has been changed|

The Broker {#JMXBROKERNAME} version has changed. Acknowledge to close the problem manually.

|`last(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},BrokerVersion],#1)<>last(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},BrokerVersion],#2) and length(last(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},BrokerVersion]))>0`|Info|**Manual close**: Yes| |Broker {#JMXBROKERNAME}: Broker has been restarted|

Uptime is less than 10 minutes.

|`last(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},UptimeMillis])<10m`|Info|**Manual close**: Yes| |Broker {#JMXBROKERNAME}: Memory usage is too high||`min(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ}, MemoryPercentUsage],{$ACTIVEMQ.MEM.TIME:"{#JMXBROKERNAME}"})>{$ACTIVEMQ.MEM.MAX.WARN:"{#JMXBROKERNAME}"}`|Average|**Depends on**:
| |Broker {#JMXBROKERNAME}: Memory usage is too high||`min(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ}, MemoryPercentUsage],{$ACTIVEMQ.MEM.TIME:"{#JMXBROKERNAME}"})>{$ACTIVEMQ.MEM.MAX.HIGH:"{#JMXBROKERNAME}"}`|High|| |Broker {#JMXBROKERNAME}: Storage usage is too high||`min(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},StorePercentUsage],{$ACTIVEMQ.STORE.TIME:"{#JMXBROKERNAME}"})>{$ACTIVEMQ.STORE.MAX.WARN:"{#JMXBROKERNAME}"}`|Average|**Depends on**:
| |Broker {#JMXBROKERNAME}: Storage usage is too high||`min(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},StorePercentUsage],{$ACTIVEMQ.STORE.TIME:"{#JMXBROKERNAME}"})>{$ACTIVEMQ.STORE.MAX.HIGH:"{#JMXBROKERNAME}"}`|High|| |Broker {#JMXBROKERNAME}: Temp usage is too high||`min(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},TempPercentUsage],{$ACTIVEMQ.TEMP.TIME:"{#JMXBROKERNAME}"})>{$ACTIVEMQ.TEMP.MAX.WARN}`|Average|**Depends on**:
| |Broker {#JMXBROKERNAME}: Temp usage is too high||`min(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},TempPercentUsage],{$ACTIVEMQ.TEMP.TIME:"{#JMXBROKERNAME}"})>{$ACTIVEMQ.TEMP.MAX.HIGH}`|High|| |Broker {#JMXBROKERNAME}: Message enqueue rate is higher than dequeue rate|

Enqueue rate is higher than dequeue rate. It may indicate performance problems.

|`avg(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},TotalEnqueueCount],{$ACTIVEMQ.MSG.RATE.WARN.TIME:"{#JMXBROKERNAME}"})>avg(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},TotalEnqueueCount],{$ACTIVEMQ.MSG.RATE.WARN.TIME:"{#JMXBROKERNAME}"})`|Average|| |Broker {#JMXBROKERNAME}: Consumers count is too low||`max(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},TotalConsumerCount],{$ACTIVEMQ.BROKER.CONSUMERS.MIN.TIME:"{#JMXBROKERNAME}"})<{$ACTIVEMQ.BROKER.CONSUMERS.MIN.HIGH:"{#JMXBROKERNAME}"}`|High|| |Broker {#JMXBROKERNAME}: Producers count is too low||`max(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},TotalProducerCount],{$ACTIVEMQ.BROKER.PRODUCERS.MIN.TIME:"{#JMXBROKERNAME}"})<{$ACTIVEMQ.BROKER.PRODUCERS.MIN.HIGH:"{#JMXBROKERNAME}"}`|High|| ### LLD rule Destinations discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Destinations discovery|

Discovery of destinations

|JMX agent|jmx.discovery[beans,"org.apache.activemq:type=Broker,brokerName=*,destinationType=*,destinationName=*"]| ### Item prototypes for Destinations discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Consumers count|

Number of consumers attached to this destination.

|JMX agent|jmx[{#JMXOBJ},ConsumerCount]| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Consumers count total on {#JMXBROKERNAME}|

Number of consumers attached to the broker of this destination. Used to suppress destination's triggers when the count of consumers on the broker is lower than threshold.

|JMX agent|jmx["org.apache.activemq:type=Broker,brokerName={#JMXBROKERNAME}",{$ACTIVEMQ.TOTAL.CONSUMERS.COUNT: "{#JMXDESTINATIONNAME}"}]

**Preprocessing**

| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Producers count|

Number of producers attached to this destination.

|JMX agent|jmx[{#JMXOBJ},ProducerCount]| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Producers count total on {#JMXBROKERNAME}|

Number of producers attached to the broker of this destination. Used to suppress destination's triggers when the count of producers on the broker is lower than threshold.

|JMX agent|jmx["org.apache.activemq:type=Broker,brokerName={#JMXBROKERNAME}",{$ACTIVEMQ.TOTAL.PRODUCERS.COUNT: "{#JMXDESTINATIONNAME}"}]

**Preprocessing**

| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Memory usage in percents|

The percentage of the memory limit used.

|JMX agent|jmx[{#JMXOBJ},MemoryPercentUsage]| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Messages enqueue rate|

Rate of messages that have been sent to the destination.

|JMX agent|jmx[{#JMXOBJ},EnqueueCount]

**Preprocessing**

| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Messages dequeue rate|

Rate of messages that has been acknowledged (and removed) from the destination.

|JMX agent|jmx[{#JMXOBJ},DequeueCount]

**Preprocessing**

| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Queue size|

Number of messages on this destination, including any that have been dispatched but not acknowledged.

|JMX agent|jmx[{#JMXOBJ},QueueSize]| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Expired messages count|

Number of messages that have been expired.

|JMX agent|jmx[{#JMXOBJ},ExpiredCount]

**Preprocessing**

| ### Trigger prototypes for Destinations discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Consumers count is too low||`max(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},ConsumerCount],{$ACTIVEMQ.DESTINATION.CONSUMERS.MIN.TIME:"{#JMXDESTINATIONNAME}"})<{$ACTIVEMQ.DESTINATION.CONSUMERS.MIN.HIGH:"{#JMXDESTINATIONNAME}"} and last(/Apache ActiveMQ by JMX/jmx["org.apache.activemq:type=Broker,brokerName={#JMXBROKERNAME}",{$ACTIVEMQ.TOTAL.CONSUMERS.COUNT: "{#JMXDESTINATIONNAME}"}])>{$ACTIVEMQ.BROKER.CONSUMERS.MIN.HIGH:"{#JMXBROKERNAME}"}`|Average|**Manual close**: Yes| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Producers count is too low||`max(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},ProducerCount],{$ACTIVEMQ.DESTINATION.PRODUCERS.MIN.TIME:"{#JMXDESTINATIONNAME}"})<{$ACTIVEMQ.DESTINATION.PRODUCERS.MIN.HIGH:"{#JMXDESTINATIONNAME}"} and last(/Apache ActiveMQ by JMX/jmx["org.apache.activemq:type=Broker,brokerName={#JMXBROKERNAME}",{$ACTIVEMQ.TOTAL.PRODUCERS.COUNT: "{#JMXDESTINATIONNAME}"}])>{$ACTIVEMQ.BROKER.PRODUCERS.MIN.HIGH:"{#JMXBROKERNAME}"}`|Average|**Manual close**: Yes| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Memory usage is too high||`last(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},MemoryPercentUsage])>{$ACTIVEMQ.MEM.MAX.WARN:"{#JMXDESTINATIONNAME}"}`|Average|| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Memory usage is too high||`last(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},MemoryPercentUsage])>{$ACTIVEMQ.MEM.MAX.HIGH:"{#JMXDESTINATIONNAME}"}`|High|| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Message enqueue rate is higher than dequeue rate|

Enqueue rate is higher than dequeue rate. It may indicate performance problems.

|`avg(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},EnqueueCount],{$ACTIVEMQ.MSG.RATE.WARN.TIME:"{#JMXDESTINATIONNAME}"})>avg(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},DequeueCount],{$ACTIVEMQ.MSG.RATE.WARN.TIME:"{#JMXDESTINATIONNAME}"})`|Average|| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Queue size is high|

Queue size is higher than threshold. It may indicate performance problems.

|`min(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},QueueSize],{$ACTIVEMQ.QUEUE.TIME:"{#JMXDESTINATIONNAME}"})>{$ACTIVEMQ.QUEUE.WARN:"{#JMXDESTINATIONNAME}"} and {$ACTIVEMQ.QUEUE.ENABLED:"{#JMXDESTINATIONNAME}"}=1`|Average|| |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Expired messages count is high|

This metric represents the number of messages that expired before they could be delivered. If you expect all messages to be delivered and acknowledged within a certain amount of time, you can set an expiration for each message, and investigate if your ExpiredCount metric rises above zero.

|`last(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},ExpiredCount])>{$ACTIVEMQ.EXPIRED.WARN:"{#JMXDESTINATIONNAME}"}`|Average|| ## Feedback Please report any issues with the template at [`https://support.zabbix.com`](https://support.zabbix.com) You can also provide feedback, discuss the template, or ask for help at [`ZABBIX forums`](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback)