| Use case | Instrument |
|---|---|
| Count requests, errors, bytes sent, or other monotonic totals | Counter |
| Track active requests, queue depth, or connections that go up and down | UpDownCounter |
| Record latency, payload size, or other distributions | Histogram |
| Record latest temperature, memory use, or other current state | Gauge |
| Read a value owned elsewhere only when metrics are collected | Observable instrument |
///|
fn _metrics_readme_record() -> Unit {
let meter = MeterProvider::noop().meter("example")
let counter = meter
.u64_counter("request.count")
.with_description("Total handled requests")
.build()
let latency = meter.f64_histogram("request.duration").with_unit("ms").build()
counter.add(1UL, attributes=[
@common.KeyValue::new("http.request.method", String("GET")),
])
latency.record(12.5, attributes=[
@common.KeyValue::new("http.route", String("/health")),
])
}///|
fn _metrics_readme_observable() -> Unit {
let meter = MeterProvider::noop().meter("example")
let observable = meter
.i64_observable_up_down_counter("queue.depth")
.with_callback(observer => observer.observe(42L))
.build()
ignore(observable)
}pub struct CounterBuilder[T] {
description : String?
unit : String?
create_fn : (String?, String?) -> Counter[T]
}fn[T] CounterBuilder::from_functions(create_fn : (String?, String?) -> Counter[T]) -> CounterBuilder[T]fn[T] CounterBuilder::with_description(self : CounterBuilder[T], description : StringView) -> CounterBuilder[T]pub struct GaugeBuilder[T] {
description : String?
unit : String?
create_fn : (String?, String?) -> Gauge[T]
}fn[T] GaugeBuilder::with_description(self : GaugeBuilder[T], description : StringView) -> GaugeBuilder[T]pub struct HistogramBuilder[T] {
description : String?
unit : String?
create_fn : (String?, String?) -> Histogram[T]
}fn[T] HistogramBuilder::from_functions(create_fn : (String?, String?) -> Histogram[T]) -> HistogramBuilder[T]fn[T] HistogramBuilder::with_description(self : HistogramBuilder[T], description : StringView) -> HistogramBuilder[T]fn[T] HistogramBuilder::with_unit(self : HistogramBuilder[T], unit : StringView) -> HistogramBuilder[T]pub struct Meter {
u64_counter_fn : (String) -> CounterBuilder[UInt64]
f64_counter_fn : (String) -> CounterBuilder[Double]
i64_up_down_counter_fn : (String) -> UpDownCounterBuilder[Int64]
f64_up_down_counter_fn : (String) -> UpDownCounterBuilder[Double]
u64_histogram_fn : (String) -> HistogramBuilder[UInt64]
f64_histogram_fn : (String) -> HistogramBuilder[Double]
u64_gauge_fn : (String) -> GaugeBuilder[UInt64]
i64_gauge_fn : (String) -> GaugeBuilder[Int64]
f64_gauge_fn : (String) -> GaugeBuilder[Double]
u64_observable_counter_fn : (String) -> ObservableCounterBuilder[UInt64]
f64_observable_counter_fn : (String) -> ObservableCounterBuilder[Double]
i64_observable_up_down_counter_fn : (String) -> ObservableUpDownCounterBuilder[Int64]
f64_observable_up_down_counter_fn : (String) -> ObservableUpDownCounterBuilder[Double]
u64_observable_gauge_fn : (String) -> ObservableGaugeBuilder[UInt64]
i64_observable_gauge_fn : (String) -> ObservableGaugeBuilder[Int64]
f64_observable_gauge_fn : (String) -> ObservableGaugeBuilder[Double]
}fn Meter::f64_observable_counter(self : Meter, name : StringView) -> ObservableCounterBuilder[Double]fn Meter::f64_observable_up_down_counter(self : Meter, name : StringView) -> ObservableUpDownCounterBuilder[Double]fn Meter::from_functions(u64_counter_fn : (String) -> CounterBuilder[UInt64], f64_counter_fn : (String) -> CounterBuilder[Double], i64_up_down_counter_fn : (String) -> UpDownCounterBuilder[Int64], f64_up_down_counter_fn : (String) -> UpDownCounterBuilder[Double], u64_histogram_fn : (String) -> HistogramBuilder[UInt64], f64_histogram_fn : (String) -> HistogramBuilder[Double], u64_gauge_fn : (String) -> GaugeBuilder[UInt64], i64_gauge_fn : (String) -> GaugeBuilder[Int64], f64_gauge_fn : (String) -> GaugeBuilder[Double], u64_observable_counter_fn : (String) -> ObservableCounterBuilder[UInt64], f64_observable_counter_fn : (String) -> ObservableCounterBuilder[Double], i64_observable_up_down_counter_fn : (String) -> ObservableUpDownCounterBuilder[Int64], f64_observable_up_down_counter_fn : (String) -> ObservableUpDownCounterBuilder[Double], u64_observable_gauge_fn : (String) -> ObservableGaugeBuilder[UInt64], i64_observable_gauge_fn : (String) -> ObservableGaugeBuilder[Int64], f64_observable_gauge_fn : (String) -> ObservableGaugeBuilder[Double]) -> Meterfn Meter::i64_observable_up_down_counter(self : Meter, name : StringView) -> ObservableUpDownCounterBuilder[Int64]fn Meter::u64_observable_counter(self : Meter, name : StringView) -> ObservableCounterBuilder[UInt64]fn MeterProvider::from_functions(meter_with_scope_fn : (InstrumentationScope) -> Meter) -> MeterProviderfn[T] ObservableCounter::from_functions(observe_fn : (T, ArrayView[KeyValue]) -> Unit) -> ObservableCounter[T]fn[T] ObservableCounter::observe(self : ObservableCounter[T], value : T, attributes? : ArrayView[KeyValue]) -> Unitpub struct ObservableCounterBuilder[T] {
description : String?
unit : String?
callbacks : Array[(ObservableCounter[T]) -> Unit]
create_fn : (String?, String?, Array[(ObservableCounter[T]) -> Unit]) -> ObservableCounter[T]
}fn[T] ObservableCounterBuilder::from_functions(create_fn : (String?, String?, Array[(ObservableCounter[T]) -> Unit]) -> ObservableCounter[T]) -> ObservableCounterBuilder[T]fn[T] ObservableCounterBuilder::with_callback(self : ObservableCounterBuilder[T], callback : (ObservableCounter[T]) -> Unit) -> ObservableCounterBuilder[T]fn[T] ObservableCounterBuilder::with_description(self : ObservableCounterBuilder[T], description : StringView) -> ObservableCounterBuilder[T]fn[T] ObservableCounterBuilder::with_unit(self : ObservableCounterBuilder[T], unit : StringView) -> ObservableCounterBuilder[T]fn[T] ObservableGauge::from_functions(observe_fn : (T, ArrayView[KeyValue]) -> Unit) -> ObservableGauge[T]fn[T] ObservableGauge::observe(self : ObservableGauge[T], value : T, attributes? : ArrayView[KeyValue]) -> Unitpub struct ObservableGaugeBuilder[T] {
description : String?
unit : String?
callbacks : Array[(ObservableGauge[T]) -> Unit]
create_fn : (String?, String?, Array[(ObservableGauge[T]) -> Unit]) -> ObservableGauge[T]
}fn[T] ObservableGaugeBuilder::from_functions(create_fn : (String?, String?, Array[(ObservableGauge[T]) -> Unit]) -> ObservableGauge[T]) -> ObservableGaugeBuilder[T]fn[T] ObservableGaugeBuilder::with_callback(self : ObservableGaugeBuilder[T], callback : (ObservableGauge[T]) -> Unit) -> ObservableGaugeBuilder[T]fn[T] ObservableGaugeBuilder::with_description(self : ObservableGaugeBuilder[T], description : StringView) -> ObservableGaugeBuilder[T]fn[T] ObservableGaugeBuilder::with_unit(self : ObservableGaugeBuilder[T], unit : StringView) -> ObservableGaugeBuilder[T]fn[T] ObservableUpDownCounter::from_functions(observe_fn : (T, ArrayView[KeyValue]) -> Unit) -> ObservableUpDownCounter[T]fn[T] ObservableUpDownCounter::observe(self : ObservableUpDownCounter[T], value : T, attributes? : ArrayView[KeyValue]) -> Unitpub struct ObservableUpDownCounterBuilder[T] {
description : String?
unit : String?
callbacks : Array[(ObservableUpDownCounter[T]) -> Unit]
create_fn : (String?, String?, Array[(ObservableUpDownCounter[T]) -> Unit]) -> ObservableUpDownCounter[T]
}fn[T] ObservableUpDownCounterBuilder::build(self : ObservableUpDownCounterBuilder[T]) -> ObservableUpDownCounter[T]fn[T] ObservableUpDownCounterBuilder::from_functions(create_fn : (String?, String?, Array[(ObservableUpDownCounter[T]) -> Unit]) -> ObservableUpDownCounter[T]) -> ObservableUpDownCounterBuilder[T]fn[T] ObservableUpDownCounterBuilder::with_callback(self : ObservableUpDownCounterBuilder[T], callback : (ObservableUpDownCounter[T]) -> Unit) -> ObservableUpDownCounterBuilder[T]fn[T] ObservableUpDownCounterBuilder::with_description(self : ObservableUpDownCounterBuilder[T], description : StringView) -> ObservableUpDownCounterBuilder[T]fn[T] ObservableUpDownCounterBuilder::with_unit(self : ObservableUpDownCounterBuilder[T], unit : StringView) -> ObservableUpDownCounterBuilder[T]fn[T] UpDownCounter::add(self : UpDownCounter[T], value : T, attributes? : ArrayView[KeyValue]) -> Unitpub struct UpDownCounterBuilder[T] {
description : String?
unit : String?
create_fn : (String?, String?) -> UpDownCounter[T]
}fn[T] UpDownCounterBuilder::from_functions(create_fn : (String?, String?) -> UpDownCounter[T]) -> UpDownCounterBuilder[T]fn[T] UpDownCounterBuilder::with_description(self : UpDownCounterBuilder[T], description : StringView) -> UpDownCounterBuilder[T]fn[T] UpDownCounterBuilder::with_unit(self : UpDownCounterBuilder[T], unit : StringView) -> UpDownCounterBuilder[T]The MoonBit implementation of OpenTelemetry.
Dependencies