Skip to content

Commit

Permalink
feat(telemetry): add resource attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
gfyrag committed Nov 18, 2022
1 parent 5504055 commit c137790
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 13 deletions.
6 changes: 6 additions & 0 deletions sharedotlp/pkg/sharedotlptraces/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ const (
OtelTracesExporterOTLPModeFlag = "otel-traces-exporter-otlp-mode"
OtelTracesExporterOTLPEndpointFlag = "otel-traces-exporter-otlp-endpoint"
OtelTracesExporterOTLPInsecureFlag = "otel-traces-exporter-otlp-insecure"
OtelResourceAttributes = "otel-resource-attributes"
OtelServiceName = "otel-service-name"
)

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

func CLITracesModule(v *viper.Viper) fx.Option {
Expand Down Expand Up @@ -55,6 +59,8 @@ func CLITracesModule(v *viper.Viper) fx.Option {
Insecure: v.GetBool(OtelTracesExporterOTLPInsecureFlag),
}
}(),
ServiceName: v.GetString(OtelServiceName),
ResourceAttributes: v.GetStringSlice(OtelResourceAttributes),
})
}
return fx.Options()
Expand Down
38 changes: 25 additions & 13 deletions sharedotlp/pkg/sharedotlptraces/traces.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@ package sharedotlptraces

import (
"context"
"fmt"
"strings"

sharedotlp "github.com/formancehq/go-libs/sharedotlp/pkg"
"go.opentelemetry.io/contrib/propagators/b3"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/jaeger"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
Expand Down Expand Up @@ -37,29 +40,38 @@ type OTLPConfig struct {
}

type ModuleConfig struct {
Exporter string
Batch bool
JaegerConfig *JaegerConfig
OTLPConfig *OTLPConfig
Resource *resource.Resource
Exporter string
Batch bool
JaegerConfig *JaegerConfig
OTLPConfig *OTLPConfig
ResourceAttributes []string
ServiceName string
}

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

func loadResource(cfg ModuleConfig) (*resource.Resource, error) {
defaultResource := resource.Default()
attributes := make([]attribute.KeyValue, 0)
attributes = append(attributes, attribute.String("service.name", cfg.ServiceName))
for _, ra := range cfg.ResourceAttributes {
parts := strings.SplitN(ra, "=", 2)
if len(parts) < 2 {
return nil, fmt.Errorf("malformed otlp attribute: %s", ra)
}
attributes = append(attributes, attribute.String(parts[0], parts[1]))
}
return resource.Merge(defaultResource, resource.NewSchemaless(attributes...))
}

func TracesModule(cfg ModuleConfig) fx.Option {
options := make([]fx.Option, 0)
options = append(options,
fx.Provide(func() (*resource.Resource, error) {
defaultResource := resource.Default()
if cfg.Resource == nil {
return defaultResource, nil
}
return resource.Merge(defaultResource, cfg.Resource)
}),
fx.Supply(resource.Default()),
fx.Supply(cfg),
fx.Provide(loadResource),
fx.Provide(func(tp *tracesdk.TracerProvider) trace.TracerProvider { return tp }),
fx.Provide(fx.Annotate(func(options ...tracesdk.TracerProviderOption) *tracesdk.TracerProvider {
return tracesdk.NewTracerProvider(options...)
Expand Down

0 comments on commit c137790

Please sign in to comment.