2.11. Metrics
Overview
Available as of Camel 2.14
While Camel provides a lot of existing metrics integration with Codahale metrics has been added for Camel routes. This allows end users to seamless feed Camel routing information together with existing data they are gathering using Codahale metrics.
To use the Codahale metrics you will need to:
- Add camel-metrics component
- Enable route metrics in XML or Java code
Note that performance metrics are only usable if you have a way of displaying them; any kind of monitoring tooling which can integrate with JMX can be used, as the metrics are available over JMX. In addition, the actual data is 100% Codehale JSON.
Metrics Route Policy
Obtaining Codahale metrics for a single route can be accomplished by defining a
MetricsRoutePolicy
on a per route basis.
From Java create an instance of
MetricsRoutePolicy
to be assigned as the route's policy. This is shown below:
from("file:src/data?noop=true").routePolicy(new MetricsRoutePolicy()).to("jms:incomingOrders");
From XML DSL you define a
<bean>
which is specified as the route's policy; for example:
<bean id="policy" class="org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicy"/> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route routePolicyRef="policy"> <from uri="file:src/data?noop=true"/> [...]
Metrics Route Policy Factory
This factory allows one to add a
RoutePolicy
for each route which exposes route utilization statistics using Codahale metrics. This factory can be used in Java and XML as the examples below demonstrate.
From Java you just add the factory to the
CamelContext
as shown below:
context.addRoutePolicyFactory(new MetricsRoutePolicyFactory());
And from XML DSL you define a
<bean>
as follows:
<!-- use camel-metrics route policy to gather metrics for all routes --> <bean id="metricsRoutePolicyFactory" class="org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicyFactory"/>
From Java code you can get hold of the
com.codahale.metrics.MetricRegistry
from the org.apache.camel.component.metrics.routepolicy.MetricsRegistryService
as shown below:
MetricRegistryService registryService = context.hasService(MetricsRegistryService.class); if (registryService != null) { MetricsRegistry registry = registryService.getMetricsRegistry(); ... }
Options
The
MetricsRoutePolicyFactory
and MetricsRoutePolicy
supports the following options:
Name | Default | Description |
---|---|---|
durationUnit
|
TimeUnit.MILLISECONDS
|
The unit to use for duration in the metrics reporter or when dumping the statistics as json. |
jmxDomain
|
org.apache.camel.metrics
|
The JXM domain name. |
metricsRegistry
|
Allow to use a shared com.codahale.metrics.MetricRegistry . If none is provided then Camel will create a shared instance used by the this CamelContext.
|
|
prettyPrint
|
false
|
Whether to use pretty print when outputting statistics in json format. |
rateUnit
|
TimeUnit.SECONDS
|
The unit to use for rate in the metrics reporter or when dumping the statistics as json. |
useJmx
|
false
|
Whether to report fine grained statistics to JMX by using the
com.codahale.metrics.JmxReporter .
Notice that if JMX is enabled on CamelContext then a
MetricsRegistryService mbean is enlisted under the services type in the JMX tree. That mbean has a single operation to output the statistics using json. Setting useJmx to true is only needed if you want fine grained mbeans per statistics type.
|