New Relic

Cinnamon provides a plugin that integrates with New Relic Insights using the New Relic Agent. This makes all Cinnamon metrics available as structured New Relic Insights events with rich metadata tags.

New Relic Java API dependency

Add the New Relic Java API dependency to your build:

sbt
libraryDependencies += "com.newrelic.agent.java" % "newrelic-api" % "5.1.0"
Maven
<dependency>
  <groupId>com.newrelic.agent.java</groupId>
  <artifactId>newrelic-api</artifactId>
  <version>5.1.0</version>
</dependency>
Gradle
dependencies {
  implementation group: 'com.newrelic.agent.java', name: 'newrelic-api', version: '5.1.0'
}

Cinnamon dependency

We provide an easy-to-get-started plugin that contains all settings required for pushing Lightbend related metrics to New Relic.

First make sure that your build is configured to use the Cinnamon Agent.

Add the core Coda Hale Metrics dependency and the Cinnamon New Relic dependency to your build:

sbt
libraryDependencies += Cinnamon.library.cinnamonCHMetrics
libraryDependencies += Cinnamon.library.cinnamonNewRelic
Maven
<dependency>
  <groupId>com.lightbend.cinnamon</groupId>
  <artifactId>cinnamon-chmetrics</artifactId>
  <version>2.20.4</version>
</dependency>
<dependency>
  <groupId>com.lightbend.cinnamon</groupId>
  <artifactId>cinnamon-newrelic</artifactId>
  <version>2.20.4</version>
</dependency>
Gradle
dependencies {
  implementation group: 'com.lightbend.cinnamon', name: 'cinnamon-chmetrics', version: '2.20.4'
}
dependencies {
  implementation group: 'com.lightbend.cinnamon', name: 'cinnamon-newrelic', version: '2.20.4'
}
Note

The default Coda Hale Metrics module uses Metrics 4 but Coda Hale Metrics 3 can also be used.

The Cinnamon New Relic reporter provides a preconfigured reporter for our Coda Hale Metrics integration. Here is how you enable the reporter, and an example of how to override some default values if you want to change the default behavior.

Required
cinnamon.chmetrics {
  reporters += newrelic-reporter
}
Example
cinnamon.chmetrics {
  reporters += newrelic-reporter

  newrelic-reporter {
    frequency = 60s

    report {
      histogram = ["min", "max", "p98", "p99", "p999"]
    }
  }
}
Reference
cinnamon.chmetrics {
  newrelic-reporter {

    # Frequency of metric reporting to NewRelic Agent.
    frequency = 10s

    # Prefix for all metric keys.
    prefix = "lightbend"

    # Suffix for all metric keys.
    suffix = ""

    # Tags for all metrics.
    # Uses a "key-value" approach to generate the tags.
    # E.g. the following configuration:
    # tags {
    #   country = "UK"
    # }
    # will generate tags = "country" -> "UK"
    tags {}

    # Handle events.
    # Control if the reporter should send events to new relic as well.
    handle-events = false

    report {
      # Histogram fields to report for metrics.
      histogram = ["max", "min", "mean", "median", "stddev", "p75", "p95", "p98", "p99", "p999"]

      # Meter fields to report for metrics.
      meter = ["samples", "min1_rate", "min5_rate", "min15_rate", "mean_rate"]

      # Tags to include for metrics. Does not affect histogram or meter fields.
      include-tags = ["*"]

      # Tags to exclude for metrics. Does not affect histogram or meter fields.
      exclude-tags = []

      # Converts time from nano into specified unit. Use "ns" for no conversion.
      # Supported units: "ns" (default), "us", "ms", and "s".
      conversion-time-unit = "ns"

      # Group by category instead of name.
      # If enabled the New Relic event names will only include the metric category and not the name,
      # and a new tag named "metric" containing the metric name will be added.
      # E.g. the metric "lightbend:actors:mailbox_size" will be reported as "lightbend:actors" with
      # the tag "metric" -> "mailbox_size"
      group-by-category = false
    }
  }
}
Note

These settings are defined in the reference.conf. You only need to specify any of these settings when you want to override the defaults.

Event reporting

By default all Cinnamon metrics are reported to New Relic, but it is also possible to report Cinnamon events to New Relic by changing the configuration like this:

cinnamon.chmetrics.newrelic-reporter.handle-events = true

To manage the amount of data being reported to New Relic, you can disable or rate limit events via configuration.

Note

The total number of times that an event has fired is automatically reported as a metric, so there will be one instance with type = metric and one instance with type = event with the same name.

Format

The information published to New Relic as Custom Events have their names formatted in this fashion:

[<prefix>:]<category>:<name>[:<suffix>]

As an example, the name of the akka actor mailbox size metric with the default configuration would be:

lighbend:actors:mailbox_size

All metrics and events have a field named type that is set to metric or event respectively.

Grouping by category

There is also the option to have the metrics and events, that are being sent to New Relic, grouped together at the category level, to make the number of names showing up in the New Relic UI smaller. To group the names together you need to change the configuration like this.

cinnamon.chmetrics.newrelic-reporter.report.group-by-category = true

All metrics and events will now have a field named name, that contains the metric or event name, and the name of Custom Event reported to New Relic will be.

[<prefix>:]<category>[:<suffix>]

The same example for akka actor mailbox size will now have a Custom Event with the name lighbend:actors, as well as a field name containing mailbox_size.

New Relic time units

New Relic has support for time data formatting of Insight Events tags, but only for milliseconds and seconds. By default Cinnamon will report all time related metrics to New Relic in nanoseconds. See settings in the reference.conf for more information of how to configure the behavior.

New Relic queries

To plot the data that is reported into New Relic Insights, you need to create your own graphs with some queries.

To help you understand the metrics you are plotting, a good place to get more insights into the metrics is the Data Explorer UI. To use it, go to the Data Explorer page from New Relic Insights navigation panel. Under the Events tab, select the metric you are trying to plot. Then click on See All Samples button to see sample data with all the fields. By default, the graph plotted on the page shows how many events are received. To plot more interesting graphs, change the query at the top of the page, then click on Run.

This is a sample query for plotting the akka actor mailbox size metric per actor:

SELECT average(mean) FROM `lightbend:actors:mailbox_size` FACET application,actor,host WHERE type = 'metric' SINCE 30 MINUTES AGO TIMESERIES

And the same query when metrics and events are grouped by category:

SELECT average(mean) FROM `lightbend:actors` FACET application,actor,host WHERE type = 'metric' AND name = 'mailbox_size' SINCE 30 MINUTES AGO TIMESERIES

For graphs with time, make sure you use the most appropriate time unit instead of the default nano seconds.

SELECT average(mean)/1000000 FROM `lightbend:dispatchers:queue_time` FACET application,dispatcher,host WHERE type = 'metric' SINCE 30 MINUTES AGO TIMESERIES

Depending on the type of the graph, the field that you select to plot your graphs changes too. For example, you should plot the graph for dispatchers:processed_tasks using the value field

SELECT average(value) FROM `lightbend:dispatchers:processed_tasks` FACET application,dispatcher,host WHERE type = 'metric' SINCE 30 MINUTES AGO TIMESERIES

New Relic dashboards

Creating dashboards for metrics provides an easy way for fast metric look-ups. You can create dashboards from the New Relic Insights navigation panel. Then add metrics to these dashboards from the Data Explorer screen.

Each dashboard should be at most one category of metrics for better filtering capabilities. For example, group all dispatchers metrics in the dispatcher dashboard. Because all the dispatcher metrics have the same facets, you can enable filters on this dashboard and select available facets to plot your metrics per application, dispatcher or host.

New Relic dependency

For information about how to get started with New Relic we refer to their getting started instructions. Go to their website, create an account and follow the instructions for your particular environment. Please note that the Cinnamon New Relic integration uses the New Relic Agent to send information to New Relic Insights, so that agent needs to be enabled and configured.

Note

We recommend using newer versions of the New Relic Agent starting from version 5.1.0 to the latest. Older versions of the New Relic Agent are known to interfere with some of the instrumentations that the Cinnamon Agent does, to Akka and Scala, So if you are using version 5.0.0 and below then these must be disabled in the New Relic Agent.

Instructions on how to disable specific async frameworks and modules can be found on the on the New Relic site.