Skip to content

Commit c137790

Browse files
committed
feat(telemetry): add resource attributes
1 parent 5504055 commit c137790

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

sharedotlp/pkg/sharedotlptraces/cli.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ const (
1616
OtelTracesExporterOTLPModeFlag = "otel-traces-exporter-otlp-mode"
1717
OtelTracesExporterOTLPEndpointFlag = "otel-traces-exporter-otlp-endpoint"
1818
OtelTracesExporterOTLPInsecureFlag = "otel-traces-exporter-otlp-insecure"
19+
OtelResourceAttributes = "otel-resource-attributes"
20+
OtelServiceName = "otel-service-name"
1921
)
2022

2123
func InitOTLPTracesFlags(flags *flag.FlagSet) {
@@ -28,6 +30,8 @@ func InitOTLPTracesFlags(flags *flag.FlagSet) {
2830
flags.String(OtelTracesExporterOTLPModeFlag, "grpc", "OpenTelemetry traces OTLP exporter mode (grpc|http)")
2931
flags.String(OtelTracesExporterOTLPEndpointFlag, "", "OpenTelemetry traces grpc endpoint")
3032
flags.Bool(OtelTracesExporterOTLPInsecureFlag, false, "OpenTelemetry traces grpc insecure")
33+
flags.String(OtelServiceName, "", "OpenTelemetry service name")
34+
flags.StringSlice(OtelResourceAttributes, []string{}, "Additional OTLP resource attributes")
3135
}
3236

3337
func CLITracesModule(v *viper.Viper) fx.Option {
@@ -55,6 +59,8 @@ func CLITracesModule(v *viper.Viper) fx.Option {
5559
Insecure: v.GetBool(OtelTracesExporterOTLPInsecureFlag),
5660
}
5761
}(),
62+
ServiceName: v.GetString(OtelServiceName),
63+
ResourceAttributes: v.GetStringSlice(OtelResourceAttributes),
5864
})
5965
}
6066
return fx.Options()

sharedotlp/pkg/sharedotlptraces/traces.go

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ package sharedotlptraces
22

33
import (
44
"context"
5+
"fmt"
6+
"strings"
57

68
sharedotlp "github.com/formancehq/go-libs/sharedotlp/pkg"
79
"go.opentelemetry.io/contrib/propagators/b3"
810
"go.opentelemetry.io/otel"
11+
"go.opentelemetry.io/otel/attribute"
912
"go.opentelemetry.io/otel/exporters/jaeger"
1013
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
1114
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
@@ -37,29 +40,38 @@ type OTLPConfig struct {
3740
}
3841

3942
type ModuleConfig struct {
40-
Exporter string
41-
Batch bool
42-
JaegerConfig *JaegerConfig
43-
OTLPConfig *OTLPConfig
44-
Resource *resource.Resource
43+
Exporter string
44+
Batch bool
45+
JaegerConfig *JaegerConfig
46+
OTLPConfig *OTLPConfig
47+
ResourceAttributes []string
48+
ServiceName string
4549
}
4650

4751
func ProvideTracerProviderOption(v any, annotations ...fx.Annotation) fx.Option {
4852
annotations = append(annotations, fx.ResultTags(TracerProviderOptionKey))
4953
return fx.Provide(fx.Annotate(v, annotations...))
5054
}
5155

56+
func loadResource(cfg ModuleConfig) (*resource.Resource, error) {
57+
defaultResource := resource.Default()
58+
attributes := make([]attribute.KeyValue, 0)
59+
attributes = append(attributes, attribute.String("service.name", cfg.ServiceName))
60+
for _, ra := range cfg.ResourceAttributes {
61+
parts := strings.SplitN(ra, "=", 2)
62+
if len(parts) < 2 {
63+
return nil, fmt.Errorf("malformed otlp attribute: %s", ra)
64+
}
65+
attributes = append(attributes, attribute.String(parts[0], parts[1]))
66+
}
67+
return resource.Merge(defaultResource, resource.NewSchemaless(attributes...))
68+
}
69+
5270
func TracesModule(cfg ModuleConfig) fx.Option {
5371
options := make([]fx.Option, 0)
5472
options = append(options,
55-
fx.Provide(func() (*resource.Resource, error) {
56-
defaultResource := resource.Default()
57-
if cfg.Resource == nil {
58-
return defaultResource, nil
59-
}
60-
return resource.Merge(defaultResource, cfg.Resource)
61-
}),
62-
fx.Supply(resource.Default()),
73+
fx.Supply(cfg),
74+
fx.Provide(loadResource),
6375
fx.Provide(func(tp *tracesdk.TracerProvider) trace.TracerProvider { return tp }),
6476
fx.Provide(fx.Annotate(func(options ...tracesdk.TracerProviderOption) *tracesdk.TracerProvider {
6577
return tracesdk.NewTracerProvider(options...)

0 commit comments

Comments
 (0)