@@ -2,10 +2,13 @@ package telemetry
2
2
3
3
import (
4
4
"context"
5
+ "os"
5
6
7
+ "github.com/google/uuid"
6
8
"go.opentelemetry.io/contrib/exporters/autoexport"
7
9
"go.opentelemetry.io/contrib/propagators/b3"
8
10
"go.opentelemetry.io/otel"
11
+ "go.opentelemetry.io/otel/attribute"
9
12
"go.opentelemetry.io/otel/propagation"
10
13
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
11
14
"go.opentelemetry.io/otel/sdk/resource"
@@ -14,28 +17,32 @@ import (
14
17
"go.uber.org/zap"
15
18
)
16
19
17
- var Resource = resource .NewWithAttributes (
18
- semconv .SchemaURL ,
19
- semconv .ServiceName ("glide" ),
20
- )
21
-
22
20
type Config struct {
23
- LogConfig * LogConfig `yaml:"logging" validate:"required"`
21
+ LogConfig * LogConfig `yaml:"logging" validate:"required"`
22
+ Resource map [string ]string `yaml:"resource"`
24
23
}
25
24
26
25
type Telemetry struct {
27
26
Config * Config
28
27
Logger * zap.Logger
29
- // TODO: add OTEL meter, tracer
30
28
}
31
29
32
30
func (t Telemetry ) L () * zap.Logger {
33
31
return t .Logger
34
32
}
35
33
36
34
func DefaultConfig () * Config {
35
+ instance := os .Getenv ("POD_NAME" )
36
+ if instance == "" {
37
+ instance = uuid .New ().String ()
38
+ }
39
+
37
40
return & Config {
38
41
LogConfig : DefaultLogConfig (),
42
+ Resource : map [string ]string {
43
+ string (semconv .ServiceNameKey ): "glide" ,
44
+ string (semconv .ServiceInstanceIDKey ): instance ,
45
+ },
39
46
}
40
47
}
41
48
@@ -45,13 +52,24 @@ func NewTelemetry(cfg *Config) (*Telemetry, error) {
45
52
return nil , err
46
53
}
47
54
55
+ resourceAttr := make ([]attribute.KeyValue , 0 , len (cfg .Resource ))
56
+
57
+ for k , v := range cfg .Resource {
58
+ resourceAttr = append (resourceAttr , attribute .String (k , v ))
59
+ }
60
+
61
+ resource := resource .NewWithAttributes (
62
+ semconv .SchemaURL ,
63
+ resourceAttr ... ,
64
+ )
65
+
48
66
spanExporter , err := autoexport .NewSpanExporter (context .Background ())
49
67
if err != nil {
50
68
return nil , err
51
69
}
52
70
53
71
tp := sdktrace .NewTracerProvider (
54
- sdktrace .WithResource (Resource ),
72
+ sdktrace .WithResource (resource ),
55
73
sdktrace .WithSampler (sdktrace .AlwaysSample ()),
56
74
sdktrace .WithBatcher (spanExporter ),
57
75
)
@@ -68,7 +86,7 @@ func NewTelemetry(cfg *Config) (*Telemetry, error) {
68
86
sdkmetric .WithReader (
69
87
metricsReader ,
70
88
),
71
- sdkmetric .WithResource (Resource ),
89
+ sdkmetric .WithResource (resource ),
72
90
)
73
91
74
92
otel .SetMeterProvider (provider )
0 commit comments