Skip to content

Latest commit

 

History

History
136 lines (92 loc) · 3.79 KB

README.md

File metadata and controls

136 lines (92 loc) · 3.79 KB

Micrometer calls their metrics "Meter primitives", and they support the following:

None of these track time, so the registry is responsible for synthesizing the times at the moment of export.

All micrometer Meter types may contain "tags", which is a collection of key/value pairs. All of these Tags are converted to New Relic metric Attributes at export time.

Here is how the New Relic registry converts each of these types:

Gauge

We export the micrometer Gauge as a New Relic Gauge.

Attributes:

  • baseUnit: (the gauge's base unit from the id)
  • description: (the gauge's description)

TimeGauge

We export the micrometer TimeGauge as a New Relic Gauge.

Attributes:

  • baseUnit: (the gauge's base unit from the id)
  • description: (the gauge's description)

Counter

We export the micrometer Counter as a New Relic Count.

  • value - delta between current count and previous count (should always be positive)

Attributes:

  • baseUnit: (the counter's base unit from the id)
  • description: (the counter's description)

DistributionSummary

Distribution Summary provides a summary of an event's distribution.

We take a snapshot and marshall it as:

  • Snapshot Summary
    • name: "<name>.summary"
    • count: snapshot.count()
    • total: snapshot.total()
    • min: null
    • max: snapshot.max()

We also generate one Gauge per snapshot percentile:

  • name: "<name>.percentiles"
  • percentile: (the actual percentage number)

The framework also generates a Gauge for each histogram bucket.

FunctionCounter

The FunctionCounter is converted to a New Relic Count object.

Attributes:

  • baseUnit: (the function counter's base unit from the id)
  • description: (the function counter's description)

Timers

There are 3 kinds of timers: Timer, FunctionTimer, and LongTaskTimer. Aside from the basic Meter interface, these three do not share a common interface.

Timer

The micrometer Timer is intended to track a large number of short running events.

We export it as a Summary:

Summary:

  • name: "<name>",
  • count: timer.count() (the total number of times stop() has been called on this timer)
  • total: the total time spent in all occurrences
  • min: null
  • max: timer.max() the maximum time seen for a single event

The summary has these attributes:

  • baseTimeUnit: (the timer's base time unit)
  • description: (the timer's description)

The framework also generates a Gauge for each histogram bucket.

FunctionTimer

The micrometer FunctionTimer is intended to track two monotonically increasing values: count (the number of total invocations) and time (total time spent for all invocations).

We export it a Summary:

Summary:

  • name = "<name>",
  • count: functionTimer.count()
  • total: functionTimer.totalTime()
  • min: null
  • max: null

The summary has these attributes:

  • baseTimeUnit: (the timer's base time unit)
  • description: (the timer's description)

LongTaskTimer

The micrometer LongTaskTimer is intended to track the count and total duration of all in-flight long-running tasks. It is used to time tasks that are still ongoing (because the plain Timer only reports on completion).

We export it as a two gauges:

Gauge 1:

  • name = "<name>.active_tasks",
  • value = number of currently active tasks

Gauge 2:

  • name = "<name>.total_duration",
  • value - The cumulative duration of all active tasks in nanoseconds

Both metrics have these attributes:

  • baseUnit: (the timer's base unit from the id)
  • baseTimeUnit: hard coded to "NANOSECONDS"
  • description: (the timer's description)