opentelemetry-collector/service/telemetry/sdk.go

51 lines
1.3 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package telemetry // import "go.opentelemetry.io/collector/service/telemetry"
import (
"context"
config "go.opentelemetry.io/contrib/otelconf/v0.3.0"
"go.opentelemetry.io/otel/sdk/resource"
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
"go.opentelemetry.io/collector/config/configtelemetry"
)
// NewSDK creates a new OpenTelemetry SDK with the provided configuration.
func NewSDK(ctx context.Context, cfg *Config, res *resource.Resource) (*config.SDK, error) {
mpConfig := cfg.Metrics.MeterProvider
if cfg.Metrics.Level == configtelemetry.LevelNone {
mpConfig.Readers = nil
}
var resourceAttrs []config.AttributeNameValue
for _, r := range res.Attributes() {
resourceAttrs = append(resourceAttrs, config.AttributeNameValue{
Name: string(r.Key), Value: r.Value.AsString(),
})
}
sdk, err := config.NewSDK(
config.WithContext(ctx),
config.WithOpenTelemetryConfiguration(
config.OpenTelemetryConfiguration{
LoggerProvider: &config.LoggerProvider{
Processors: cfg.Logs.Processors,
},
MeterProvider: &mpConfig,
TracerProvider: &cfg.Traces.TracerProvider,
Resource: &config.Resource{
SchemaUrl: ptr(semconv.SchemaURL),
Attributes: resourceAttrs,
},
},
),
)
if err != nil {
return nil, err
}
return &sdk, nil
}