# 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**
Discard unchanged with heartbeat: `3h`
The uptime of the broker.
|JMX agent|jmx[{#JMXOBJ},UptimeMillis]**Preprocessing**
Custom multiplier: `0.001`
Memory limit, in bytes, used for holding undelivered messages before paging to temporary storage.
|JMX agent|jmx[{#JMXOBJ},MemoryLimit]**Preprocessing**
Discard unchanged with heartbeat: `1h`
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**
Discard unchanged with heartbeat: `1h`
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**
Discard unchanged with heartbeat: `1h`
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**
Rate of messages that have been delivered by the broker and acknowledged by consumers.
|JMX agent|jmx[{#JMXOBJ},TotalDequeueCount]**Preprocessing**
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**: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**
In range: `0 -> {$ACTIVEMQ.BROKER.CONSUMERS.MIN.HIGH}`
⛔️Custom on fail: Set value to: `{$ACTIVEMQ.BROKER.CONSUMERS.MIN.HIGH}`
Discard unchanged with heartbeat: `3h`
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**
In range: `0 -> {$ACTIVEMQ.BROKER.PRODUCERS.MIN.HIGH}`
⛔️Custom on fail: Set value to: `{$ACTIVEMQ.BROKER.PRODUCERS.MIN.HIGH}`
Discard unchanged with heartbeat: `3h`
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**
Rate of messages that has been acknowledged (and removed) from the destination.
|JMX agent|jmx[{#JMXOBJ},DequeueCount]**Preprocessing**
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**
Discard unchanged with heartbeat: `3h`
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)