spring-boot/spring-boot-samples/spring-boot-sample-metrics-redis
Andy Wilkinson 33f0ea3480 Rework SpringApplicationTest to support web modes
Rework the new testing support so that @SpringApplicationTest can be
used for standard integration tests, web integration tests with a
mock Servlet environment and web integration tests with an embedded
servlet container. This means that it a replacement for 1.3's
@IntegrationTest and @WebIntegrationTest and allows all
SpringApplication testing to be configured using a common annotation.

The old @IntegrationTest and @WebIntegrationTest along with their
supporting classes have been reinstated to their previous form (while
remaining deprecated). This should ensure that they continue to work
in 1.4 exactly as they did in 1.3 giving users a smooth path to
@SpringApplicationTest.

See gh-5477
2016-03-31 21:35:10 -07:00
..
2015-06-04 00:56:00 -07:00

= Spring Boot sample with Redis export for metrics.

Start redis, e.g. with [Docker Compose]()

[source,indent=0]
----
	$ docker-compose up
----

Run the app and ping the home page (http://localhost:8080) a few times. Go and look at
the result in Redis, e.g.

[source,indent=0]
----
	$ redis-cli
	127.0.0.1:6379> keys *
	1) "keys.spring.metrics"
	2) "spring.metrics.counter.status.200.root"
	3) "spring.metrics.gauge.response.root"
	127.0.0.1:6379> zrange keys.spring.metrics 0 0 WITHSCORES
	1) "spring.metrics.counter.status.200.root"
	2) "4"
----

There is also an `AggregateMetricReader` with public metrics in the application context,
and you can see the result in the "/metrics" (metrics with names in "aggregate.*").
The way the Redis repository was set up (with a random key in the metric names) makes the
aggregates work across restarts of the same application, or across a scaled up application
running in multiple processes. E.g.

[source,indent=0]
----
	$ curl localhost:8080/metrics
	{
		...
		"aggregate.application.counter.status.200.metrics": 12,
		"aggregate.application.counter.status.200.root": 29,
		"aggregate.application.gauge.response.metrics": 43,
		"aggregate.application.gauge.response.root": 5,
		"counter.status.200.root": 2,
		"counter.status.200.metrics": 1,
		"gauge.response.metrics": 43,
		"gauge.response.root": 5
	}
----