opentelemetry-collector/internal/telemetry/telemetry.go

61 lines
2.4 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package telemetry // import "go.opentelemetry.io/collector/internal/telemetry"
import (
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/metric"
"go.opentelemetry.io/otel/trace"
"go.uber.org/zap"
"go.opentelemetry.io/collector/featuregate"
"go.opentelemetry.io/collector/internal/telemetry/componentattribute"
"go.opentelemetry.io/collector/pdata/pcommon"
)
var NewPipelineTelemetryGate = featuregate.GlobalRegistry().MustRegister(
"telemetry.newPipelineTelemetry",
featuregate.StageAlpha,
featuregate.WithRegisterFromVersion("v0.123.0"),
featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/rfcs/component-universal-telemetry.md"),
featuregate.WithRegisterDescription("Injects component-identifying scope attributes in internal Collector metrics"),
)
// IMPORTANT: This struct is reexported as part of the public API of
// go.opentelemetry.io/collector/component, a stable module.
// DO NOT MAKE BREAKING CHANGES TO EXPORTED FIELDS.
type TelemetrySettings struct {
// Logger that the factory can use during creation and can pass to the created
// component to be used later as well.
Logger *zap.Logger
// TracerProvider that the factory can pass to other instrumented third-party libraries.
TracerProvider trace.TracerProvider
// MeterProvider that the factory can pass to other instrumented third-party libraries.
MeterProvider metric.MeterProvider
// Resource contains the resource attributes for the collector's telemetry.
Resource pcommon.Resource
// Extra attributes added to instrumentation scopes
extraAttributes attribute.Set
}
// The publicization of this API is tracked in https://github.com/open-telemetry/opentelemetry-collector/issues/12405
func WithoutAttributes(ts TelemetrySettings, fields ...string) TelemetrySettings {
return WithAttributeSet(ts, componentattribute.RemoveAttributes(ts.extraAttributes, fields...))
}
func WithAttributeSet(ts TelemetrySettings, attrs attribute.Set) TelemetrySettings {
ts.extraAttributes = attrs
ts.Logger = componentattribute.ZapLoggerWithAttributes(ts.Logger, ts.extraAttributes)
ts.TracerProvider = componentattribute.TracerProviderWithAttributes(ts.TracerProvider, ts.extraAttributes)
if NewPipelineTelemetryGate.IsEnabled() {
ts.MeterProvider = componentattribute.MeterProviderWithAttributes(ts.MeterProvider, ts.extraAttributes)
}
return ts
}