# Apache ActiveMQ by JMX ## Overview For Zabbix version: 6.2 and higher Official JMX Template for Apache ActiveMQ. This template was tested on: - Apache ActiveMQ, version 5.15.5 ## Setup > See [Zabbix template operation](https://www.zabbix.com/documentation/6.2/manual/config/templates_out_of_the_box/jmx) for basic instructions. 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}. ## Zabbix configuration No specific Zabbix configuration is required. ### Macros used |Name|Description|Default| |----|-----------|-------| |{$ACTIVEMQ.BROKER.CONSUMERS.MIN.HIGH} |
Minimum amount of consumers for broker. Can be used with broker 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.PRODUCERS.MIN.HIGH} |Minimum amount of producers 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.DESTINATION.CONSUMERS.MIN.HIGH} |Minimum amount of consumers for destination. Can be used with destination name as context.
|`1` | |{$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.PRODUCERS.MIN.HIGH} |Minimum amount of producers 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.EXPIRED.WARN} |Threshold for expired messages count. Can be used with destination name as context.
|`0` | |{$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.MEM.MAX.HIGH} |Memory threshold for HIGH trigger. Can be used with destination or broker name as context.
|`90` | |{$ACTIVEMQ.MEM.MAX.WARN} |Memory threshold for AVERAGE trigger. Can be used with destination or broker name as context.
|`75` | |{$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.MSG.RATE.WARN.TIME} |The time for message enqueue/dequeue rate. Can be used with destination or broker name as context.
|`15m` | |{$ACTIVEMQ.PASSWORD} |Password for JMX
|`activemq` | |{$ACTIVEMQ.PORT} |Port for JMX
|`1099` | |{$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.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.STORE.MAX.HIGH} |Storage threshold for HIGH trigger. Can be used with broker name as context.
|`90` | |{$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.TEMP.MAX.HIGH} |Temp 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.TIME} |Time during which the metric can be above the threshold. Can be used with destination or broker name as context.
|`5m` | |{$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.USER} |User for JMX
|`admin` | ## Template links There are no template links in this template. ## Discovery rules |Name|Description|Type|Key and additional info| |----|-----------|----|----| |Brokers discovery |Discovery of brokers
|JMX |jmx.discovery[beans,"org.apache.activemq:type=Broker,brokerName=*"]**Filter**:
FORMULA A and B- {#JMXBROKERNAME} MATCHES_REGEX `{$ACTIVEMQ.LLD.FILTER.BROKER.MATCHES}`
- {#JMXBROKERNAME} NOT_MATCHES_REGEX `{$ACTIVEMQ.LLD.FILTER.BROKER.NOT_MATCHES}`
| |Destinations discovery |Discovery of destinations
|JMX |jmx.discovery[beans,"org.apache.activemq:type=Broker,brokerName=*,destinationType=*,destinationName=*"]**Filter**:
FORMULA A and B- {#JMXDESTINATIONNAME} MATCHES_REGEX `{$ACTIVEMQ.LLD.FILTER.DESTINATION.MATCHES}`
- {#JMXDESTINATIONNAME} NOT_MATCHES_REGEX `{$ACTIVEMQ.LLD.FILTER.DESTINATION.NOT_MATCHES}`
| ## Items collected |Group|Name|Description|Type|Key and additional info| |-----|----|-----------|----|---------------------| |ActiveMQ |Broker {#JMXBROKERNAME}: Version |The version of the broker.
|JMX |jmx[{#JMXOBJ},BrokerVersion]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |ActiveMQ |Broker {#JMXBROKERNAME}: Uptime |The uptime of the broker.
|JMX |jmx[{#JMXOBJ},UptimeMillis]**Preprocessing**:
- MULTIPLIER: `0.001`
| |ActiveMQ |Broker {#JMXBROKERNAME}: Memory limit |Memory limit, in bytes, used for holding undelivered messages before paging to temporary storage.
|JMX |jmx[{#JMXOBJ},MemoryLimit]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `1h`
| |ActiveMQ |Broker {#JMXBROKERNAME}: Memory usage in percents |Percent of memory limit used.
|JMX |jmx[{#JMXOBJ}, MemoryPercentUsage] | |ActiveMQ |Broker {#JMXBROKERNAME}: Storage limit |Disk limit, in bytes, used for persistent messages before producers are blocked.
|JMX |jmx[{#JMXOBJ},StoreLimit]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `1h`
| |ActiveMQ |Broker {#JMXBROKERNAME}: Storage usage in percents |Percent of store limit used.
|JMX |jmx[{#JMXOBJ},StorePercentUsage] | |ActiveMQ |Broker {#JMXBROKERNAME}: Temp limit |Disk limit, in bytes, used for non-persistent messages and temporary data before producers are blocked.
|JMX |jmx[{#JMXOBJ},TempLimit]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `1h`
| |ActiveMQ |Broker {#JMXBROKERNAME}: Temp usage in percents |Percent of temp limit used.
|JMX |jmx[{#JMXOBJ},TempPercentUsage] | |ActiveMQ |Broker {#JMXBROKERNAME}: Messages enqueue rate |Rate of messages that have been sent to the broker.
|JMX |jmx[{#JMXOBJ},TotalEnqueueCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |ActiveMQ |Broker {#JMXBROKERNAME}: Messages dequeue rate |Rate of messages that have been delivered by the broker and acknowledged by consumers.
|JMX |jmx[{#JMXOBJ},TotalDequeueCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |ActiveMQ |Broker {#JMXBROKERNAME}: Consumers count total |Number of consumers attached to this broker.
|JMX |jmx[{#JMXOBJ},TotalConsumerCount] | |ActiveMQ |Broker {#JMXBROKERNAME}: Producers count total |Number of producers attached to this broker.
|JMX |jmx[{#JMXOBJ},TotalProducerCount] | |ActiveMQ |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Consumers count |Number of consumers attached to this destination.
|JMX |jmx[{#JMXOBJ},ConsumerCount] | |ActiveMQ |{#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 |jmx["org.apache.activemq:type=Broker,brokerName={#JMXBROKERNAME}",{$ACTIVEMQ.TOTAL.CONSUMERS.COUNT: "{#JMXDESTINATIONNAME}"}]**Preprocessing**:
- IN_RANGE: `0 {$ACTIVEMQ.BROKER.CONSUMERS.MIN.HIGH}`
⛔️ON_FAIL: `CUSTOM_VALUE -> {$ACTIVEMQ.BROKER.CONSUMERS.MIN.HIGH}`
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |ActiveMQ |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Producers count |Number of producers attached to this destination.
|JMX |jmx[{#JMXOBJ},ProducerCount] | |ActiveMQ |{#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 |jmx["org.apache.activemq:type=Broker,brokerName={#JMXBROKERNAME}",{$ACTIVEMQ.TOTAL.PRODUCERS.COUNT: "{#JMXDESTINATIONNAME}"}]**Preprocessing**:
- IN_RANGE: `0 {$ACTIVEMQ.BROKER.PRODUCERS.MIN.HIGH}`
⛔️ON_FAIL: `CUSTOM_VALUE -> {$ACTIVEMQ.BROKER.PRODUCERS.MIN.HIGH}`
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |ActiveMQ |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Memory usage in percents |The percentage of the memory limit used.
|JMX |jmx[{#JMXOBJ},MemoryPercentUsage] | |ActiveMQ |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Messages enqueue rate |Rate of messages that have been sent to the destination.
|JMX |jmx[{#JMXOBJ},EnqueueCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |ActiveMQ |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Messages dequeue rate |Rate of messages that has been acknowledged (and removed) from the destination.
|JMX |jmx[{#JMXOBJ},DequeueCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |ActiveMQ |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Queue size |Number of messages on this destination, including any that have been dispatched but not acknowledged.
|JMX |jmx[{#JMXOBJ},QueueSize] | |ActiveMQ |{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Expired messages count |Number of messages that have been expired.
|JMX |jmx[{#JMXOBJ},ExpiredCount]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| ## Triggers |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----|----|----| |Broker {#JMXBROKERNAME}: Version has been changed |Broker {#JMXBROKERNAME} version has changed. Ack to close.
|`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
| |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
| |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
| |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 | | |{#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}"}`Recovery expression:
`min(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},ConsumerCount],{$ACTIVEMQ.DESTINATION.CONSUMERS.MIN.TIME:"{#JMXDESTINATIONNAME}"})>={$ACTIVEMQ.DESTINATION.CONSUMERS.MIN.HIGH:"{#JMXDESTINATIONNAME}"}` |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}"}`Recovery expression:
`min(/Apache ActiveMQ by JMX/jmx[{#JMXOBJ},ProducerCount],{$ACTIVEMQ.DESTINATION.PRODUCERS.MIN.TIME:"{#JMXDESTINATIONNAME}"})>={$ACTIVEMQ.DESTINATION.PRODUCERS.MIN.HIGH:"{#JMXDESTINATIONNAME}"}` |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 You can also provide feedback, discuss the template or ask for help with it at [ZABBIX forums](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/411049-discussion-thread-for-official-zabbix-template-amq).