Pulse (Stats)¶
PulseClient¶
Pulse is Envoy Mobile’s stats library, used for capturing client application time series
metrics. Currently the following types of metrics are supported: Counter, Gauge, Timer, and Distribution.
Pulse also supports custom tags (cardinality). For each type of the metrics, there are two ways to add custom tags:
on metrics creation
on metrics reporting
This library (like all of Envoy Mobile) is under active development.
To leverage Pulse, obtain an instance of a PulseClient from an Envoy Mobile Engine
(refer to Starting Envoy for building an engine instance), and use it to
create an instance of the type of metric you desire. The following code examples show how to create
a Counter. Similar approaches can be used to create the rest of the types.
Kotlin example:
pulseClient.counter(Element("foo"), Element("bar"))
Swift example:
pulseClient.counter(elements: ["foo", "bar"])
The counter method from the PulseClient takes a variable number of elements and returns a
Counter instance. The elements provided are used to form a dot(.) delimited string that
serves as the identifier of the counter. The string formed from the example code above is
foo.bar.
Store the instance of the counter, then use it to increment as necessary.
In addition, to attach custom tags on metric creation:
Kotlin example:
pulseClient.counter(
Element("foo"), Element("bar"),
tags = TagsBuilder().add("os", "Android").add("app_type", "rider").build()
)
Swift example:
pulseClient.counter(
elements: ["foo", "bar"],
tags: TagsBuilder().add(name: "os", value: "Android").add(name: "app_type", value: "rider").build()
)
Counter¶
A Counter can be incremented by calling the increment() method when applicable.
The count argument of increment is defaulted with a value of 1.
Example:
// Increment the counter by 1
// Kotlin, Swift
counter.increment()
// Increment the counter by 5
// Kotlin
counter.increment(5)
// Increment the counter by 5
// Swift
counter.increment(count: 5)
A Counter can be incremented with custom tags. To be concise, this doc shows examples of attaching custom tagging for Counter on increment. Similar APIs are available for all metrics types to attach tags on metrics reporting.
Example:
// Increment the counter by 5 with tags
// Kotlin
counter.increment(
tags: TagsBuilder().add("os", "Android").add("app_type", "rider").build(),
count: 5
)
// Increment the counter by 5 with tags
// Swift
counter.increment(
tags: TagsBuilder().add(name: "os", value: "Android").add(name: "app_type", value: "rider").build()
count: 5
)
Gauge¶
The value of a Gauge can be incremented, decremented, or reassigned.
Example:
// Set the gauge to 5
// Kotlin
gauge.set(5)
// Swift
gauge.set(value: 5)
// Add 5 to the gauge
// Kotlin
gauge.add(5)
// Swift
gauge.add(amount: 5)
// Subtract 5 from the gauge
// Kotlin
gauge.sub(5)
// Swift
gauge.sub(amount: 5)
Timer¶
Use Timer to track a distribution of time durations.
You can view the cumulative stats like quantile data (p50/p90/etc.) and average durations.
Example:
// Add a new duration to the underlying timer distribution
// Kotlin
timer.recordDuration(5)
// Swift
timer.recordDuration(durationMs: 5)
Distribution¶
Use Distribution to track a distribution of int values.
You can view the cumulative stats like quantile data (p50/p90/etc.), sum, and averages.
Example:
// Add a new value to the underlying distribution
// Kotlin
distribution.recordValue(5)
// Swift
distribution.recordValue(value: 5)