# 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).