== Camel Spring Boot Metrics Example

=== Introduction

This example sends Camel route metrics to Graphite from a Spring Boot
app.

Please read *Configuration* first

=== Build

You will need to compile this example first:

....
mvn install
....

=== Run

To run the example type

....
java -jar target/camel-example-spring-boot-metrics.jar
....

You will see logging from the ``Fast'' and ``Slow'' routes, and metrics
will be sent to Graphite (or nc) every 5 seconds.

=== Configuration

Spring Boot auto-configures the `+com.codahale.metrics.MetricRegistry+`.
See code comments in `+Application.java+` for further details.

If you already have a Graphite server, make sure that UDP is enabled
(set `+ENABLE_UDP_LISTENER = True+` in carbon.conf).

If Graphite is not on your local machine, replace `+localhost+` in
`+Application.java+` with the hostname or IP address of your Graphite
server.

If you want to use TCP instead of UDP, use
`+com.codahale.metrics.graphite.Graphite+` instead of
`+com.codahale.metrics.graphite.GraphiteUDP+`, as shown here:
http://metrics.dropwizard.io/3.1.0/manual/graphite/

If you can't be bothered to set up a Graphite server right now, you can
simulate it by running `+nc -ul 2003+` on Linux. If you don't have
`+nc+`, use `+yum search netcat+` to find a suitable package to install
(e.g. nmap-ncat.x86_64).

=== Help and contributions

If you hit any problem using Camel or have some feedback, then please
https://camel.apache.org/support.html[let us know].

We also love contributors, so
https://camel.apache.org/contributing.html[get involved] :-)

The Camel riders!
