docs/source/manual/servlets.rst
.. _manual-servlets:
################ Metrics Servlets ################
The metrics-servlets module provides a handful of useful servlets:
.. _man-servlet-healthcheck:
HealthCheckServlet responds to GET requests by running all the currently-registered
health checks. The results are returned as a human-readable JSON entity.
HealthCheckServlet responds with one of the following status codes (depending on configuration).
If reporting health via HTTP status is disabled, callers will have to introspect the JSON to
determine application health.
501 Not Implemented: If no health checks are registered200 OK: If all checks pass, or if httpStatusIndicator is set to "false" and one or more
health checks fail (see below for more information on this setting)500 Internal Service Error: If httpStatusIndicator is set to "true" and one or more
health checks fail (see below for more information on this setting)HealthCheckServlet supports the following configuration items.
Servlet Context
``HealthCheckServlet`` requires that the servlet context has a ``HealthCheckRegistry`` named
``com.codahale.metrics.servlets.HealthCheckServlet.registry``. You can subclass
``HealthCheckServlet.ContextListener``, which will add a specific ``HealthCheckRegistry`` to the
servlet context.
An instance of ``ExecutorService`` can be provided via the servlet context using the name
``com.codahale.metrics.servlets.HealthCheckServlet.executor``; by default, no thread pool is used to
execute the health checks.
An instance of ``HealthCheckFilter`` can be provided via the servlet context using the name
``com.codahale.metrics.servlets.HealthCheckServlet.healthCheckFilter``; by default, no filtering is
enabled. The filter is used to determine which health checks to include in the health status.
An instance of ``ObjectMapper`` can be provided via the servlet context using the name
``com.codahale.metrics.servlets.HealthCheckServlet.mapper``; if none is provided, a default instance
will be used to convert the health check results to JSON.
Initialization Parameters
HealthCheckServlet supports the following initialization parameters:
com.codahale.metrics.servlets.HealthCheckServlet.httpStatusIndicator: Provides the
default setting that determines whether the HTTP status code is used to determine whether the
application is healthy; if not provided, it defaults to "true"Query Parameters
``HealthCheckServlet`` supports the following query parameters:
* ``httpStatusIndicator`` (``Boolean``): Determines whether the HTTP status code is used to
determine whether the application is healthy; if not provided, it defaults to the value from the
initialization parameter
* ``pretty`` (``Boolean``): Indicates whether the JSON response should be formatted; if
``"true"``, the JSON response will be formatted instead of condensed
.. _man-servlet-threaddump:
ThreadDumpServlet
=================
``ThreadDumpServlet`` responds to ``GET`` requests with a ``text/plain`` representation of all the live
threads in the JVM, their states, their stack traces, and the state of any locks they may be
waiting for.
Configuration
-------------
``ThreadDumpServlet`` supports the following configuration items.
Query Parameters
ThreadDumpServlet supports the following query parameters:
monitors (Boolean): Determines whether locked monitors are included; if not provided,
it defaults to "true"synchronizers (Boolean): Determines whether locked ownable synchronizers are included;
if not provided, it defaults to "true".. _man-servlet-metrics:
MetricsServlet exposes the state of the metrics in a particular registry as a JSON object.
MetricsServlet supports the following configuration items.
Servlet Context
``MetricsServlet`` requires that the servlet context has a ``MetricRegistry`` named
``com.codahale.metrics.servlets.MetricsServlet.registry``. You can subclass
``MetricsServlet.ContextListener``, which will add a specific ``MetricRegistry`` to the servlet
context.
An instance of ``MetricFilter`` can be provided via the servlet context using the name
``com.codahale.metrics.servlets.MetricsServlet.metricFilter``; by default, no filtering is
enabled. The filter is used to determine which metrics to include in the JSON output.
Initialization Parameters
MetricsServlet supports the following initialization parameters:
com.codahale.metrics.servlets.MetricsServlet.allowedOrigin: Provides a value for the
response header Access-Control-Allow-Origin; if no value is provided, the header is not usedcom.codahale.metrics.servlets.MetricsServlet.jsonpCalblack: Specifies a request parameter
name to use as the callback when returning the metrics as JSON-P; if no value is provided, the response is
returned as JSON. This also requires a query parameter with the same name as the value to enable a JSON-P
response.com.codahale.metrics.servlets.MetricsServlet.rateUnit: Provides a value for the
rate unit used for metrics output; if none is provided, the default is SECONDS (see TimeUnit for
acceptable values)com.codahale.metrics.servlets.MetricsServlet.durationUnit: Provides a value for the
duration unit used for metrics output; if none is provided, the default is SECONDS (see TimeUnit for
acceptable values)com.codahale.metrics.servlets.MetricsServlet.showSamples: Controls whether sample data is
included in the output for histograms and timers; if no value is provided, the sample data will be omitted.Query Parameters
``MetricsServlet`` supports the following query parameters:
* ``pretty`` (``Boolean``): Determines whether the results are formatted; if not provided, this
parameter defaults to ``"false"``.
.. _man-servlet-ping:
PingServlet
===========
``PingServlet`` responds to ``GET`` requests with a ``text/plain``/``200 OK`` response of ``pong``. This is
useful for determining liveness for load balancers, etc.
.. _man-servlet-cpu-profile:
CpuProfileServlet
=================
``CpuProfileServlet`` responds to ``GET`` requests with a ``pprof/raw``/``200 OK`` response containing the
results of CPU profiling.
Configuration
-------------
``CpuProfileServlet`` supports the following configuration items.
Query Parameters
CpuProfileServlet supports the following query parameters:
duration (Integer): Determines the amount of time in seconds for which the CPU
profiling will occur; the default is 10 seconds.frequency (Integer)Determines the frequency in Hz at which the CPU
profiling sample; the default is 100 Hz (100 times per second).state (String): Determines which threads will be profiled. If the value provided
is "blocked", only blocked threads will be profiled; otherwise, all runnable threads will be
profiled... _man-servlet-admin:
AdminServlet aggregates HealthCheckServlet, ThreadDumpServlet, MetricsServlet, and
PingServlet into a single, easy-to-use servlet which provides a set of URIs:
/: an HTML admin menu with links to the following:
/metrics: MetricsServlet
/ping: PingServlet/threads: ThreadDumpServlet/healthcheck: HealthCheckServlet/pprof: CpuProfileServlet
You will need to add your MetricRegistry and HealthCheckRegistry instances to the servlet
context as attributes named com.codahale.metrics.servlets.MetricsServlet.registry and
com.codahale.metrics.servlets.HealthCheckServlet.registry, respectively. You can do this using
the Servlet API by extending MetricsServlet.ContextListener for MetricRegistry:
.. code-block:: java
public class MyMetricsServletContextListener extends MetricsServlet.ContextListener {
public static final MetricRegistry METRIC_REGISTRY = new MetricRegistry();
@Override
protected MetricRegistry getMetricRegistry() {
return METRIC_REGISTRY;
}
}
And by extending HealthCheckServlet.ContextListener for HealthCheckRegistry:
.. code-block:: java
public class MyHealthCheckServletContextListener extends HealthCheckServlet.ContextListener {
public static final HealthCheckRegistry HEALTH_CHECK_REGISTRY = new HealthCheckRegistry();
@Override
protected HealthCheckRegistry getHealthCheckRegistry() {
return HEALTH_CHECK_REGISTRY;
}
}
Then you will need to register servlet context listeners either in you web.xml or annotating the class
with @WebListener if you are in servlet 3.0 environment. In web.xml:
.. code-block:: xml
<listener>
<listener-class>com.example.MyMetricsServletContextListener</listener-class>
</listener>
<listener>
<listener-class>com.example.MyHealthCheckServletContextListener</listener-class>
</listener>
You will also need to register AdminServlet in web.xml:
.. code-block:: xml
<servlet>
<servlet-name>metrics</servlet-name>
<servlet-class>com.codahale.metrics.servlets.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>metrics</servlet-name>
<url-pattern>/metrics/*</url-pattern>
</servlet-mapping>
AdminServlet supports the following configuration items.
Initialization Parameters
``AdminServlet`` supports the following initialization parameters:
* ``metrics-enabled``: Determines whether the ``MetricsServlet`` is enabled and
routable; if ``"false"``, the servlet endpoint will not be available via this servlet
* ``metrics-uri``: Specifies the URI for the ``MetricsServlet``; if omitted, the default
(``/metrics``) will be used
* ``ping-enabled``: Determines whether the ``PingServlet`` is enabled and routable; if
``"false"``, the servlet endpoint will not be available via this servlet
* ``ping-uri``: Specifies the URI for the ``PingServlet``; if omitted, the default
(``/ping``) will be used
* ``threads-enabled``: Determines whether the ``ThreadDumpServlet`` is enabled
and routable; if ``"false"``, the servlet endpoint will not be available via this servlet
* ``threads-uri``: Specifies the URI for the ``ThreadDumpServlet``; if omitted, the default
(``/threads``) will be used
* ``cpu-profile-enabled``: Determines whether the ``CpuProfileServlet`` is enabled and routable;
if ``"false"``, the servlet endpoints will not be available via this servlet
* ``cpu-profile-uri``: Specifies the URIs for the ``CpuProfileServlet``; if omitted, the default
(``/pprof``) will be used