@@ -29,12 +29,13 @@ import (
29
29
"net/http"
30
30
"time"
31
31
32
- "go.opentelemetry.io/otel/exporters/prometheus"
32
+ "github.com/prometheus/client_golang/prometheus"
33
+ "github.com/prometheus/client_golang/prometheus/promhttp"
34
+ exporters "go.opentelemetry.io/otel/exporters/prometheus"
33
35
"go.opentelemetry.io/otel/metric"
34
- controller "go.opentelemetry.io/otel/sdk/metric/controller/basic"
35
- "go.opentelemetry.io/otel/sdk/metric/export/aggregation"
36
- processor "go.opentelemetry.io/otel/sdk/metric/processor/basic"
37
- "go.opentelemetry.io/otel/sdk/resource"
36
+ "go.opentelemetry.io/otel/metric/unit"
37
+ sdkmetrics "go.opentelemetry.io/otel/sdk/metric"
38
+ "go.opentelemetry.io/otel/sdk/metric/aggregation"
38
39
39
40
"go.temporal.io/server/common/log"
40
41
"go.temporal.io/server/common/log/tag"
49
50
}
50
51
51
52
openTelemetryProviderImpl struct {
52
- exporter * prometheus .Exporter
53
+ exporter * exporters .Exporter
53
54
meter metric.Meter
54
55
config * PrometheusConfig
55
56
server * http.Server
@@ -61,27 +62,33 @@ func NewOpenTelemetryProvider(
61
62
prometheusConfig * PrometheusConfig ,
62
63
clientConfig * ClientConfig ,
63
64
) (* openTelemetryProviderImpl , error ) {
64
-
65
- c := controller .New (
66
- processor .NewFactory (
67
- NewOtelAggregatorSelector (
68
- clientConfig .PerUnitHistogramBoundaries ,
69
- ),
70
- aggregation .CumulativeTemporalitySelector (),
71
- processor .WithMemory (true ),
72
- ),
73
- controller .WithResource (resource .Empty ()),
74
- )
75
- exporter , err := prometheus .New (prometheus.Config {}, c )
76
-
65
+ reg := prometheus .NewRegistry ()
66
+ exporter , err := exporters .New (exporters .WithRegisterer (reg ))
77
67
if err != nil {
78
68
logger .Error ("Failed to initialize prometheus exporter." , tag .Error (err ))
79
69
return nil , err
80
70
}
81
71
82
- metricServer := initPrometheusListener (prometheusConfig , logger , exporter )
83
-
84
- meter := c .Meter ("temporal" )
72
+ var views []sdkmetrics.View
73
+ for _ , u := range []string {Dimensionless , Bytes , Milliseconds } {
74
+ views = append (views , sdkmetrics .NewView (
75
+ sdkmetrics.Instrument {
76
+ Kind : sdkmetrics .InstrumentKindSyncHistogram ,
77
+ Unit : unit .Unit (u ),
78
+ },
79
+ sdkmetrics.Stream {
80
+ Aggregation : aggregation.ExplicitBucketHistogram {
81
+ Boundaries : clientConfig .PerUnitHistogramBoundaries [u ],
82
+ },
83
+ },
84
+ ))
85
+ }
86
+ provider := sdkmetrics .NewMeterProvider (
87
+ sdkmetrics .WithReader (exporter ),
88
+ sdkmetrics .WithView (views ... ),
89
+ )
90
+ metricServer := initPrometheusListener (prometheusConfig , reg , logger )
91
+ meter := provider .Meter ("temporal" )
85
92
reporter := & openTelemetryProviderImpl {
86
93
exporter : exporter ,
87
94
meter : meter ,
@@ -92,14 +99,14 @@ func NewOpenTelemetryProvider(
92
99
return reporter , nil
93
100
}
94
101
95
- func initPrometheusListener (config * PrometheusConfig , logger log. Logger , exporter * prometheus. Exporter ) * http.Server {
102
+ func initPrometheusListener (config * PrometheusConfig , reg * prometheus. Registry , logger log. Logger ) * http.Server {
96
103
handlerPath := config .HandlerPath
97
104
if handlerPath == "" {
98
105
handlerPath = "/metrics"
99
106
}
100
107
101
108
handler := http .NewServeMux ()
102
- handler .HandleFunc (handlerPath , exporter .ServeHTTP )
109
+ handler .HandleFunc (handlerPath , promhttp . HandlerFor ( reg , promhttp. HandlerOpts { Registry : reg }) .ServeHTTP )
103
110
104
111
if config .ListenAddress == "" {
105
112
logger .Fatal ("Listen address must be specified." , tag .Address (config .ListenAddress ))
0 commit comments