MetricsServlet JSON Metrics Sink¶
MetricsServlet is a metrics sink that gives metrics snapshots in JSON format.
MetricsServlet is a "special" sink as it is only available to the metrics instances with a web UI:
- Driver of a Spark application
- Spark Standalone's
MasterandWorker
You can access the metrics from MetricsServlet at /metrics/json URI by default. The entire URL depends on a metrics instance, e.g. http://localhost:4040/metrics/json/ for a running Spark application.
$ http http://localhost:4040/metrics/json/
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, must-revalidate
Content-Length: 5005
Content-Type: text/json;charset=utf-8
Date: Mon, 11 Jun 2018 06:29:03 GMT
Server: Jetty(9.3.z-SNAPSHOT)
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
{
"counters": {
"local-1528698499919.driver.HiveExternalCatalog.fileCacheHits": {
"count": 0
},
"local-1528698499919.driver.HiveExternalCatalog.filesDiscovered": {
"count": 0
},
"local-1528698499919.driver.HiveExternalCatalog.hiveClientCalls": {
"count": 0
},
"local-1528698499919.driver.HiveExternalCatalog.parallelListingJobCount": {
"count": 0
},
"local-1528698499919.driver.HiveExternalCatalog.partitionsFetched": {
"count": 0
},
"local-1528698499919.driver.LiveListenerBus.numEventsPosted": {
"count": 7
},
"local-1528698499919.driver.LiveListenerBus.queue.appStatus.numDroppedEvents": {
"count": 0
},
"local-1528698499919.driver.LiveListenerBus.queue.executorManagement.numDroppedEvents": {
"count": 0
}
},
...
MetricsServlet is <MetricsSystem is started (and requested to register metrics sinks).
MetricsServlet can be configured using configuration properties with sink.servlet prefix (in spark-metrics-MetricsConfig.md[metrics configuration]). That is not required since MetricsConfig spark-metrics-MetricsConfig.md#setDefaultProperties[makes sure] that MetricsServlet is always configured.
MetricsServlet uses https://fasterxml.github.io/jackson-databind/[jackson-databind], the general data-binding package for Jackson (as <MetricsModule).
[[properties]] .MetricsServlet's Configuration Properties [cols="1,1,2",options="header",width="100%"] |=== | Name | Default | Description
| path | /metrics/json/ | [[path]] Path URI prefix to bind to
| sample | false | [[sample]] Whether to show entire set of samples for histograms |===
[[internal-registries]] .MetricsServlet's Internal Properties (e.g. Registries, Counters and Flags) [cols="1,2",options="header",width="100%"] |=== | Name | Description
| mapper | [[mapper]] Jaxson's https://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/ObjectMapper.html[com.fasterxml.jackson.databind.ObjectMapper] that "provides functionality for reading and writing JSON, either to and from basic POJOs (Plain Old Java Objects), or to and from a general-purpose JSON Tree Model (JsonNode), as well as related functionality for performing conversions."
When created, mapper is requested to register a Coda Hale com.codahale.metrics.json.MetricsModule.
Used exclusively when MetricsServlet is requested to <
| servletPath | [[servletPath]] Value of <
| servletShowSample | [[servletShowSample]] Flag to control whether to show samples (true) or not (false).
servletShowSample is the value of <false.
Used when <
Creating Instance¶
MetricsServlet takes the following when created:
- [[property]] Configuration Properties (as Java
Properties) - [[registry]]
MetricRegistry(Dropwizard Metrics - [[securityMgr]]
SecurityManager
MetricsServlet initializes the <
=== [[getMetricsSnapshot]] Requesting Metrics Snapshot -- getMetricsSnapshot Method
[source, scala]¶
getMetricsSnapshot(request: HttpServletRequest): String¶
getMetricsSnapshot simply requests the <
NOTE: getMetricsSnapshot is used exclusively when MetricsServlet is requested to <
=== [[getHandlers]] Requesting JSON Servlet Handler -- getHandlers Method
[source, scala]¶
getHandlers(conf: SparkConf): Array[ServletContextHandler]¶
getHandlers returns just a single ServletContextHandler (in a collection) that gives <
NOTE: getHandlers is used exclusively when MetricsSystem is requested for MetricsSystem.md#getServletHandlers[metrics ServletContextHandlers].