--- layout: doc_page --- # Graphite Emitter To use this extension, make sure to [include](../../operations/including-extensions.html) `graphite-emitter` extension. ## Introduction This extension emits druid metrics to a graphite carbon server. Metrics can be sent by using [plaintext](http://graphite.readthedocs.io/en/latest/feeding-carbon.html#the-plaintext-protocol) or [pickle](http://graphite.readthedocs.io/en/latest/feeding-carbon.html#the-pickle-protocol) protocol. The pickle protocol is more efficient and supports sending batches of metrics (plaintext protocol send only one metric) in one request; batch size is configurable. ## Configuration All the configuration parameters for graphite emitter are under `druid.emitter.graphite`. |property|description|required?|default| |--------|-----------|---------|-------| |`druid.emitter.graphite.hostname`|The hostname of the graphite server.|yes|none| |`druid.emitter.graphite.port`|The port of the graphite server.|yes|none| |`druid.emitter.graphite.batchSize`|Number of events to send as one batch (only for pickle protocol)|no|100| |`druid.emitter.graphite.protocol`|Graphite protocol; available protocols: pickle, plaintext.|no|pickle| |`druid.emitter.graphite.eventConverter`| Filter and converter of druid events to graphite event (please see next section).|yes|none| |`druid.emitter.graphite.flushPeriod` | Queue flushing period in milliseconds. |no|1 minute| |`druid.emitter.graphite.maxQueueSize`| Maximum size of the queue used to buffer events. |no|`MAX_INT`| |`druid.emitter.graphite.alertEmitters`| List of emitters where alerts will be forwarded to. |no| empty list (no forwarding)| |`druid.emitter.graphite.emitWaitTime` | wait time in milliseconds to try to send the event otherwise emitter will throwing event. |no|0| |`druid.emitter.graphite.waitForEventTime` | waiting time in milliseconds if necessary for an event to become available. |no|1000 (1 sec)| ### Druid to Graphite Event Converter Graphite Event Converter defines a mapping between druid metrics name plus dimensions to a Graphite metric path. Graphite metric path is organized using the following schema: `.[].[]..` Properly naming the metrics is critical to avoid conflicts, confusing data and potentially wrong interpretation later on. Example `druid.historical.hist-host1_yahoo_com:8080.MyDataSourceName.GroupBy.query/time`: * `druid` -> namespace prefix * `historical` -> service name * `hist-host1.yahoo.com: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 `.[].[]..` User has control of `.[].[].` You can omit the hostname by setting `ignoreHostname=true` `druid.SERVICE_NAME.dataSourceName.queryType.query/time` You can omit the service name by setting `ignoreServiceName=true` `druid.HOSTNAME.dataSourceName.queryType.query/time` Elements in metric name by default are separated by "/", so graphite will create all metrics on one level. If you want to have metrics in the tree structure, you have to set `replaceSlashWithDot=true` Original: `druid.HOSTNAME.dataSourceName.queryType.query/time` Changed: `druid.HOSTNAME.dataSourceName.queryType.query.time` ```json druid.emitter.graphite.eventConverter={"type":"all", "namespacePrefix": "druid.test", "ignoreHostname":true, "ignoreServiceName":true} ``` #### 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 `.[].[].` 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`. ```json druid.emitter.graphite.eventConverter={"type":"whiteList", "namespacePrefix": "druid.test", "ignoreHostname":true, "ignoreServiceName":true, "mapPath":"/pathPrefix/fileName.json"} ``` **Druid emits a huge number of metrics we highly recommend to use the `whiteList` converter**