1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-07-03 00:27:03 +02:00

Golang metrics prototype (#100)

* initial metrics work

* rename cumulative to counter

* rename bidirectional to nonmonotonic

* rename unidirectional to monotonic

* rename nonnegative to signed

this changes the default semantics a bit - before the change measure
could record negative values by default, now it can't.

The specification draft currently specifies both NonNegative and
Signed, but I think it's a mistake.

* rename instrument to descriptor

* license

* rework measurement values

* make measurement value a tagged union

* simplify to one kind of metrics

* add observers

* change some interfaces to match the spec

* keep integral measurement separate from floating ones

* remove duplicated measurement type

* add checking for options

* reorder some fields and functions

* rename a function

to avoid confusion between the Handle type and the Measure type

* drop disabled field from descriptor

* add back typed API for metrics

* make metric options type safe

* merge alternatives into a single bool

* make value kind name less stuttery

* fix observation callback prototype

* drop context parameter from NewHandle

* drop useless parameter names

* make descriptor an opaque struct

* use a store helper

* handle comment fixes

* reword Alternate comment

* drop the "any value" metrics

* make measurement value simpler

* document value stuff

* add tests for values

* docs

* do not panic if there is no span ID in the event
This commit is contained in:
Joshua MacDonald
2019-10-08 15:45:49 -07:00
committed by rghetia
parent c2d5c66990
commit be8fb0b4e2
26 changed files with 1638 additions and 334 deletions

View File

@ -19,7 +19,6 @@ import (
"go.opentelemetry.io/api/key"
"go.opentelemetry.io/api/metric"
"go.opentelemetry.io/api/stats"
"go.opentelemetry.io/api/tag"
"go.opentelemetry.io/api/trace"
)
@ -39,7 +38,7 @@ var (
metric.WithDescription("A gauge set to 1.0"),
)
measureTwo = stats.NewMeasure("ex.com/two")
measureTwo = metric.NewFloat64Measure("ex.com/two")
)
func main() {
@ -50,11 +49,11 @@ func main() {
tag.Insert(barKey.String("bar1")),
)
gauge := meter.GetFloat64Gauge(
ctx,
oneMetric,
lemonsKey.Int(10),
)
commonLabels := meter.DefineLabels(ctx, lemonsKey.Int(10))
gauge := oneMetric.GetHandle(commonLabels)
measure := measureTwo.GetHandle(commonLabels)
err := tracer.WithSpan(ctx, "operation", func(ctx context.Context) error {
@ -64,6 +63,16 @@ func main() {
gauge.Set(ctx, 1)
meter.RecordBatch(
// Note: call-site variables added as context tags:
tag.NewContext(ctx,
tag.Insert(anotherKey.String("xyz"))),
commonLabels,
oneMetric.Measurement(1.0),
measureTwo.Measurement(2.0),
)
return tracer.WithSpan(
ctx,
"Sub operation...",
@ -72,7 +81,7 @@ func main() {
trace.CurrentSpan(ctx).AddEvent(ctx, "Sub span event")
stats.Record(ctx, measureTwo.M(1.3))
measure.Record(ctx, 1.3)
return nil
},