122 lines
4.3 KiB
Plaintext
122 lines
4.3 KiB
Plaintext
|
= Metrics
|
||
|
:idprefix:
|
||
|
:idseparator: -
|
||
|
|
||
|
Apache ActiveMQ Artemis can export metrics to a variety of monitoring systems via the https://micrometer.io/[Micrometer] vendor-neutral application metrics facade.
|
||
|
|
||
|
Important runtime metrics have been instrumented via the Micrometer API, and all a user needs to do is implement `org.apache.activemq.artemis.core.server.metrics.ActiveMQMetricsPlugin` in order to instantiate and configure a `io.micrometer.core.instrument.MeterRegistry` implementation.
|
||
|
Relevant implementations of `MeterRegistry` are available from the https://github.com/micrometer-metrics/micrometer/tree/master/implementations[Micrometer code-base].
|
||
|
|
||
|
This is a simple interface:
|
||
|
|
||
|
[,java]
|
||
|
----
|
||
|
public interface ActiveMQMetricsPlugin extends Serializable {
|
||
|
|
||
|
ActiveMQMetricsPlugin init(Map<String, String> options);
|
||
|
|
||
|
MeterRegistry getRegistry();
|
||
|
}
|
||
|
----
|
||
|
|
||
|
When the broker starts it will call `init` and pass in the `options` which can be specified in XML as key/value properties.
|
||
|
At this point the plugin should instantiate and configure the `io.micrometer.core.instrument.MeterRegistry` implementation.
|
||
|
|
||
|
Later during the broker startup process it will call `getRegistry` in order to get the `MeterRegistry` implementation and use it for registering meters.
|
||
|
|
||
|
The broker ships with two `ActiveMQMetricsPlugin` implementations:
|
||
|
|
||
|
org.apache.activemq.artemis.core.server.metrics.plugins.LoggingMetricsPlugin::
|
||
|
This plugin simply logs metrics.
|
||
|
It's not very useful for production, but can serve as a demonstration of the Micrometer integration.
|
||
|
It takes no key/value properties for configuration.
|
||
|
|
||
|
org.apache.activemq.artemis.core.server.metrics.plugins.SimpleMetricsPlugin::
|
||
|
This plugin is used for testing.
|
||
|
It is in-memory only and provides no external output.
|
||
|
It takes no key/value properties for configuration.
|
||
|
|
||
|
== Exported Metrics
|
||
|
|
||
|
The following metrics are exported, categorized by component.
|
||
|
A description for each metric is exported along with the metric itself therefore the description will not be repeated here.
|
||
|
|
||
|
=== Broker
|
||
|
|
||
|
* connection.count
|
||
|
* total.connection.count
|
||
|
* address.memory.usage
|
||
|
|
||
|
=== Address
|
||
|
|
||
|
* routed.message.count
|
||
|
* unrouted.message.count
|
||
|
|
||
|
=== Queue
|
||
|
|
||
|
* message.count
|
||
|
* durable.message.count
|
||
|
* persistent.size
|
||
|
* durable.persistent.size
|
||
|
* delivering.message.count
|
||
|
* delivering.durable.message.count
|
||
|
* delivering.persistent.size
|
||
|
* delivering.durable.persistent.size
|
||
|
* scheduled.message.count
|
||
|
* scheduled.durable.message.count
|
||
|
* scheduled.persistent.size
|
||
|
* scheduled.durable.persistent.size
|
||
|
* messages.acknowledged
|
||
|
* messages.added
|
||
|
* messages.killed
|
||
|
* messages.expired
|
||
|
* consumer.count
|
||
|
|
||
|
It may appear that some higher level broker metrics are missing (e.g. total message count).
|
||
|
However, these metrics can be deduced by aggregating the lower level metrics (e.g. aggregate the message.count metrics from all queues to get the total).
|
||
|
|
||
|
=== Optional metrics
|
||
|
|
||
|
* JVM memory metrics (exported by default)
|
||
|
* JVM GC
|
||
|
* JVM thread
|
||
|
* https://netty.io/4.1/api/io/netty/buffer/PooledByteBufAllocatorMetric.html[Netty]
|
||
|
* File descriptors
|
||
|
* Processor
|
||
|
* Uptime
|
||
|
|
||
|
== Configuration
|
||
|
|
||
|
Metrics for all addresses and queues are enabled by default.
|
||
|
If you want to disable metrics for a particular address or set of addresses you can do so by setting the `enable-metrics` `address-setting` to `false`.
|
||
|
|
||
|
In `broker.xml` use the `metrics` element to configure which JVM metrics are reported and to configure the plugin itself.
|
||
|
Here's a configuration with all optional metrics:
|
||
|
|
||
|
[,xml]
|
||
|
----
|
||
|
<metrics>
|
||
|
<jvm-memory>true</jvm-memory> <!-- defaults to true -->
|
||
|
<jvm-gc>true</jvm-gc> <!-- defaults to false -->
|
||
|
<jvm-threads>true</jvm-threads> <!-- defaults to false -->
|
||
|
<netty-pool>true</netty-pool> <!-- defaults to false -->
|
||
|
<file-descriptors>true</file-descriptors> <!-- defaults to false -->
|
||
|
<processor>true</processor> <!-- defaults to false -->
|
||
|
<uptime>true</uptime> <!-- defaults to false -->
|
||
|
<plugin class-name="org.apache.activemq.artemis.core.server.metrics.plugins.LoggingMetricsPlugin"/>
|
||
|
</metrics>
|
||
|
----
|
||
|
|
||
|
The plugin can also be configured with key/value properties in order to customize the implementation as necessary, e.g.:
|
||
|
|
||
|
[,xml]
|
||
|
----
|
||
|
<metrics>
|
||
|
<plugin class-name="org.example.MyMetricsPlugin">
|
||
|
<property key="host" value="example.org" />
|
||
|
<property key="port" value="5162" />
|
||
|
<property key="foo" value="10" />
|
||
|
</plugin>
|
||
|
</metrics>
|
||
|
----
|