mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-02-09 13:37:12 +02:00
Add resource support
This commit is contained in:
parent
c829d3ea67
commit
196d7740bd
@ -24,6 +24,7 @@ import (
|
|||||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/api/global"
|
"go.opentelemetry.io/otel/api/global"
|
||||||
|
"go.opentelemetry.io/otel/api/label"
|
||||||
"go.opentelemetry.io/otel/api/metric"
|
"go.opentelemetry.io/otel/api/metric"
|
||||||
export "go.opentelemetry.io/otel/sdk/export/metric"
|
export "go.opentelemetry.io/otel/sdk/export/metric"
|
||||||
"go.opentelemetry.io/otel/sdk/export/metric/aggregator"
|
"go.opentelemetry.io/otel/sdk/export/metric/aggregator"
|
||||||
@ -201,7 +202,9 @@ func (c *collector) Describe(ch chan<- *prometheus.Desc) {
|
|||||||
defer c.exp.lock.RUnlock()
|
defer c.exp.lock.RUnlock()
|
||||||
|
|
||||||
_ = c.exp.Controller().ForEach(func(record export.Record) error {
|
_ = c.exp.Controller().ForEach(func(record export.Record) error {
|
||||||
ch <- c.toDesc(record)
|
var labelKeys []string
|
||||||
|
mergeLabels(record, &labelKeys, nil)
|
||||||
|
ch <- c.toDesc(record, labelKeys)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -220,8 +223,11 @@ func (c *collector) Collect(ch chan<- prometheus.Metric) {
|
|||||||
err := ctrl.ForEach(func(record export.Record) error {
|
err := ctrl.ForEach(func(record export.Record) error {
|
||||||
agg := record.Aggregator()
|
agg := record.Aggregator()
|
||||||
numberKind := record.Descriptor().NumberKind()
|
numberKind := record.Descriptor().NumberKind()
|
||||||
labels := labelValues(record)
|
|
||||||
desc := c.toDesc(record)
|
var labelKeys, labels []string
|
||||||
|
mergeLabels(record, &labelKeys, &labels)
|
||||||
|
|
||||||
|
desc := c.toDesc(record, labelKeys)
|
||||||
|
|
||||||
if hist, ok := agg.(aggregator.Histogram); ok {
|
if hist, ok := agg.(aggregator.Histogram); ok {
|
||||||
if err := c.exportHistogram(ch, hist, numberKind, desc, labels); err != nil {
|
if err := c.exportHistogram(ch, hist, numberKind, desc, labels); err != nil {
|
||||||
@ -343,35 +349,29 @@ func (c *collector) exportHistogram(ch chan<- prometheus.Metric, hist aggregator
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *collector) toDesc(record export.Record) *prometheus.Desc {
|
func (c *collector) toDesc(record export.Record, labelKeys []string) *prometheus.Desc {
|
||||||
desc := record.Descriptor()
|
desc := record.Descriptor()
|
||||||
labels := labelsKeys(record)
|
return prometheus.NewDesc(sanitize(desc.Name()), desc.Description(), labelKeys, nil)
|
||||||
return prometheus.NewDesc(sanitize(desc.Name()), desc.Description(), labels, nil)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func labelsKeys(record export.Record) []string {
|
func mergeLabels(record export.Record, keys, values *[]string) {
|
||||||
iter1 := record.Resource().Iter()
|
if keys != nil {
|
||||||
iter2 := record.Labels().Iter()
|
*keys = make([]string, 0, record.Labels().Len()+record.Resource().Len())
|
||||||
keys := make([]string, 0, iter1.Len()+iter2.Len())
|
|
||||||
for iter1.Next() {
|
|
||||||
keys = append(keys, sanitize(string(iter1.Label().Key)))
|
|
||||||
}
|
}
|
||||||
for iter2.Next() {
|
if values != nil {
|
||||||
keys = append(keys, sanitize(string(iter2.Label().Key)))
|
*values = make([]string, 0, record.Labels().Len()+record.Resource().Len())
|
||||||
}
|
|
||||||
return keys
|
|
||||||
}
|
|
||||||
|
|
||||||
func labelValues(record export.Record) []string {
|
|
||||||
iter1 := record.Resource().Iter()
|
|
||||||
iter2 := record.Labels().Iter()
|
|
||||||
values := make([]string, 0, iter1.Len()+iter2.Len())
|
|
||||||
for iter1.Next() {
|
|
||||||
values = append(values, iter1.Label().Value.Emit())
|
|
||||||
}
|
|
||||||
for iter2.Next() {
|
|
||||||
values = append(values, iter2.Label().Value.Emit())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return values
|
// Duplicate keys are resolved by taking the record label value over
|
||||||
|
// the resource value.
|
||||||
|
mi := label.NewMergeIterator(record.Labels(), record.Resource().LabelSet())
|
||||||
|
for mi.Next() {
|
||||||
|
label := mi.Label()
|
||||||
|
if keys != nil {
|
||||||
|
*keys = append(*keys, sanitize(string(label.Key)))
|
||||||
|
}
|
||||||
|
if values != nil {
|
||||||
|
*values = append(*values, label.Value.Emit())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user