To use this Apache Druid extension, include ambari-metrics-emitter in the extensions load list.

Introduction

This extension emits Druid metrics to an ambari-metrics carbon server. Events are sent after been pickled (i.e., batched). The size of the batch is configurable.

Configuration

All the configuration parameters for ambari-metrics emitter are under druid.emitter.ambari-metrics.

propertydescriptionrequired?default
druid.emitter.ambari-metrics.hostnameThe hostname of the ambari-metrics server.yesnone
druid.emitter.ambari-metrics.portThe port of the ambari-metrics server.yesnone
druid.emitter.ambari-metrics.protocolThe protocol used to send metrics to ambari metrics collector. One of http/httpsnohttp
druid.emitter.ambari-metrics.trustStorePathPath to trustStore to be used for httpsnonone
druid.emitter.ambari-metrics.trustStoreTypetrustStore type to be used for httpsnonone
druid.emitter.ambari-metrics.trustStoreTypetrustStore password to be used for httpsnonone
druid.emitter.ambari-metrics.batchSizeNumber of events to send as one batch.no100
druid.emitter.ambari-metrics.eventConverterFilter and converter of druid events to ambari-metrics timeline event(please see next section).yesnone
druid.emitter.ambari-metrics.flushPeriodQueue flushing period in milliseconds.no1 minute
druid.emitter.ambari-metrics.maxQueueSizeMaximum size of the queue used to buffer events.noMAX_INT
druid.emitter.ambari-metrics.alertEmittersList of emitters where alerts will be forwarded to.noempty list (no forwarding)
druid.emitter.ambari-metrics.emitWaitTimewait time in milliseconds to try to send the event otherwise emitter will throwing event.no0
druid.emitter.ambari-metrics.waitForEventTimewaiting time in milliseconds if necessary for an event to become available.no1000 (1 sec)

Druid to Ambari Metrics Timeline Event Converter

Ambari Metrics Timeline Event Converter defines a mapping between druid metrics name plus dimensions to a timeline event metricName. ambari-metrics metric path is organized using the following schema: <namespacePrefix>.[<druid service name>].[<druid hostname>].<druid metrics dimensions>.<druid metrics name> Properly naming the metrics is critical to avoid conflicts, confusing data and potentially wrong interpretation later on.

Example druid.historical.hist-host1:8080.MyDataSourceName.GroupBy.query/time:

  • druid -> namespace prefix
  • historical -> service name
  • hist-host1:8080 -> druid hostname
  • MyDataSourceName -> dimension value
  • GroupBy -> dimension value
  • query/time -> metric name

We have two different implementation of event converter:

Send-All converter

The first implementation called all, will send all the druid service metrics events. The path will be in the form <namespacePrefix>.[<druid service name>].[<druid hostname>].<dimensions values ordered by dimension's name>.<metric> User has control of <namespacePrefix>.[<druid service name>].[<druid hostname>].

  1. druid.emitter.ambari-metrics.eventConverter={"type":"all", "namespacePrefix": "druid.test", "appName":"druid"}

White-list based converter

The second implementation called whiteList, will send only the white listed metrics and dimensions. Same as for the all converter user has control of <namespacePrefix>.[<druid service name>].[<druid hostname>]. White-list based converter comes with the following default white list map located under resources in ./src/main/resources/defaultWhiteListMap.json

Although user can override the default white list map by supplying a property called mapPath. This property is a String containing the path for the file containing white list map JSON object. For example the following converter will read the map from the file /pathPrefix/fileName.json.

  1. druid.emitter.ambari-metrics.eventConverter={"type":"whiteList", "namespacePrefix": "druid.test", "ignoreHostname":true, "appName":"druid", "mapPath":"/pathPrefix/fileName.json"}

Druid emits a huge number of metrics we highly recommend to use the whiteList converter