Skip to content

opentelemetry-collector

Tracing

A vendor‑agnostic telemetry collector that receives, processes, and exports traces, metrics, and logs to multiple back‑ends.

Go Latest v0.153.0 · 9d ago Security brief →

Features

  • Supports OpenTelemetry Protocol (OTLP) for traces, metrics, and logs
  • Runs as an agent or collector with reasonable defaults out of the box
  • Highly performant and stable under varying loads
  • Observable: provides internal telemetry to monitor itself
  • Extensible without modifying core code

Recent releases

View all 29 releases →
Review required
v0.153.0 Breaking risk
Breaking upgrade Auth

Feature-gate stabilization + reaggregation default + memory fix

Review required
v0.152.1 Mixed
Auth RBAC Dependencies

xconfmap deprecation + metrics + bug fixes

v0.152.0 New feature
Notable features
  • Added `otelcol_exporter_in_flight_requests` UpDownCounter to track concurrent export requests per exporter
Full changelog

Images and binaries here: https://github.com/open-telemetry/opentelemetry-collector-releases/releases/tag/v0.152.0

End User Changelog

💡 Enhancements 💡

  • pkg/exporterhelper: Add otelcol_exporter_in_flight_requests metric to track the number of export requests currently in-flight per exporter. (#15009)
    This UpDownCounter increments in startOp and decrements in endOp, allowing operators to monitor
    concurrent export activity and detect when an exporter is saturating its worker pool.

🧰 Bug fixes 🧰

  • pkg/confighttp: Close the original request body after reading block-format Content-Encoding: snappy requests. (#15262)

  • pkg/confighttp: Recover from panics in decompression libraries, return HTTP 400 instead of 500. (#13228)

  • pkg/confighttp: Enforce max_request_body_size on Content-Encoding: snappy requests before the decoded buffer is allocated. (#15252)

  • pkg/otelcol: Stop emitting verbose gRPC transport messages at WARN during normal client disconnect. (#5169)
    grpc-go gates chatty per-RPC notices (e.g. "HandleStreams failed to read frame:
    connection reset by peer") behind LoggerV2.V(2). zapgrpc.Logger.V conflates
    grpclog verbosity with zap severity, so V(2) returns true whenever WARN is
    enabled and these messages emit at WARN. Wrap the installed grpclog.LoggerV2
    with a corrected V() that compares against a fixed verbosity threshold,
    matching grpclog's intended semantics. See uber-go/zap#1544.

  • pkg/pdata: pcommon.Value.AsString no longer HTML-escapes <, >, and & inside ValueTypeMap and ValueTypeSlice values, matching the behavior already used for ValueTypeStr. (#14662)

  • pkg/service: Fix Prometheus config defaults mismatch when host is explicitly set in telemetry configuration. (#13867)
    When users explicitly configured the telemetry metrics section (e.g. to change the host),
    the Prometheus exporter boolean fields (WithoutScopeInfo, WithoutUnits, WithoutTypeSuffix)
    defaulted to nil/false instead of true, causing metric name format changes compared to the
    implicit default configuration. This fix applies the correct defaults during config unmarshaling.

  • pkg/service: Return noop tracer provider when no trace processors are defined (#15135)

API Changelog

🚩 Deprecations 🚩

  • pkg/xconfmap: Deprecate xconfmap.Validator and confmap.Validate in favor of confmap.Validator and confmap.Validate. (#15142)

💡 Enhancements 💡

  • cmd/mdatagen: Add go_struct.ignore_default flag to suppress default value generation for individual config fields. (#15156)
    Setting go_struct.ignore_default: true on a config field causes mdatagen to omit that field's default
    from the generated createDefaultConfig function, emitting nil for pointer fields
    and configoptional.None for optional fields.

  • pkg/confmap: Add the confmap.Validator interface and confmap.Validate function for configuration validation. (#15142)
    Config structs should generally implement the interface to provide validation
    of their fields. The confmap.Validate function can be used to validate
    config structs in testing, but is only meant to be called at runtime by the
    Collector itself.

🧰 Bug fixes 🧰

  • pkg/pdata: pcommon.Value.AsString no longer HTML-escapes <, >, and & inside ValueTypeMap and ValueTypeSlice values, matching the behavior already used for ValueTypeStr. (#14662)
v0.151.0 Breaking risk
⚠ Upgrade required
  • Deprecation: `cmd/mdatagen.DefaultMetricsBuilderConfig` is deprecated; use `NewDefaultMetricsBuilderConfig`.
  • `pkg/confignet`: Added support for Windows Named Pipe (npipe) transport.
Breaking changes
  • cmd/builder: `replace` statements in generated Go module now use relative paths by default; set `dist::use_absolute_replace_paths` to revert to absolute paths.
  • receiver/otlp: `Config.Protocols` field renamed from anonymous embedded struct; access via `cfg.Protocols.GRPC` and `cfg.Protocols.HTTP`.
Notable features
  • Add declarative schema support for service telemetry resource configuration with explicit name/value pairs
  • Add `UserAgent` field to `ClientConfig` allowing override of gRPC user-agent string
Full changelog

Images and binaries here: https://github.com/open-telemetry/opentelemetry-collector-releases/releases/tag/v0.151.0

End User Changelog

🛑 Breaking changes 🛑

  • cmd/builder: In the generated Collector source, the replace statements in the Go module will now use relative paths by default. (#15097)
    We expect that this will not break existing use-cases where the generated collector is only used in an interim manner for builds. It enables the possibility of tracking the generated Collector code as a longer living artifact, allowing it to be run on any machine (whereas absolute paths will be different depending on the machine the Collector source is generated on.) We have added dist::use_absolute_replace_paths to go back to the absolute path behaviour in the case where there is an unforeseen use-case that requires absolute paths.

  • pkg/confighttp: Stabilize framedSnappy feature gate. (#15096)

💡 Enhancements 💡

  • all: Add declarative schema support for service telemetry resource configuration. (#14411)
    The service::telemetry::resource configuration now accepts the declarative schema with explicit name/value pairs:

    service:
      telemetry:
        resource:
          schema_url: https://opentelemetry.io/schemas/1.38.0
          attributes:
            - name: service.name
              value: my-collector
            - name: host.name
              value: collector-host
    

    The legacy inline attribute map format is still supported for backward compatibility:

    service:
      telemetry:
        resource:
          service.name: my-collector
          host.name: collector-host
    

    Note: resource.detectors is accepted for forward compatibility but is not yet applied by the collector.

  • exporter/otlp_grpc: Added the server.address and url.path attributes to metrics generated by the otlp exporter. (#14998)

  • exporter/otlp_http: Added the server.address and url.path attributes to metrics generated by the otlp_http exporter. (#14998)

  • pkg/config/configgrpc: Add UserAgent field to ClientConfig to allow overriding the default gRPC user-agent string. (#14686)
    The otlp gRPC exporter was unconditionally setting the User-Agent via
    grpc.WithUserAgent() at dial time, which takes precedence over per-call
    metadata, causing any user-configured User-Agent to be silently discarded.
    A dedicated UserAgent field has been added to ClientConfig which, when
    set, is used in the dial option directly instead of the default BuildInfo-derived string.

  • pkg/config/configgrpc: Accept gRPC resolver scheme URIs in client endpoint (e.g. passthrough:///host:port) to allow control over name resolution (#14990)
    After the migration to grpc.NewClient, some gRPC client components such as the OTLP
    exporter experienced connection issues in dual-stack DNS environments. This can now be
    fixed by using the passthrough:/// gRPC resolver scheme in the endpoint field.

  • pkg/config/confignet: Add support for Windows Named Pipe (npipe) transport (#15085)

  • pkg/service: Emit a warning when using the old v0.2.0 declarative config format (#15088)

🧰 Bug fixes 🧰

  • pkg/otelcol: Print components exactly once in the otelcol components command (#14682)
    This resolves an issue where aliased components were skipped.

  • pkg/otelcol: Synchronize Collector Run and Shutdown lifecycles so that Shutdown blocks until Run completes all cleanup. (#4947)
    Shutdown now blocks until Run finishes cleanup, matching http.Server semantics.
    If Shutdown is called before Run, the next Run call returns nil after cleaning up
    the config provider.

  • pkg/pdata: Use spec-compliant string representation for NaN, Infinity, and -Infinity in Value.AsString(). (#14487)

  • pkg/pprofile: Fix data corruption of resource and scope attributes after marshal-unmarshal-merge round-trip. (#15084)

  • pkg/service: Non-string resource attributes in telemetry configuration now return an error instead of panicking (#15171)

  • pkg/xscraperhelper: fix the merge of profiles in the profiling scraper helpers (#14790)

  • receiver/otlp: Fix profiles receiver reporting its samples as spans (#15089)

API Changelog

🛑 Breaking changes 🛑

  • receiver/otlp: Config.Protocols is now a named field instead of an anonymous embedded field. (#15178)
    Access to cfg.GRPC and cfg.HTTP must be updated to cfg.Protocols.GRPC and cfg.Protocols.HTTP.

🚩 Deprecations 🚩

  • cmd/mdatagen: The DefaultMetricsBuilderConfig function is deprecated. Use NewDefaultMetricsBuilderConfig instead. (#15165)
    The generated DefaultMetricsBuilderConfig function has been renamed to NewDefaultMetricsBuilderConfig
    to follow Go naming conventions. The old function is kept as a deprecated wrapper and will be removed
    in a future release.

💡 Enhancements 💡

  • cmd/mdatagen: Handle default values for configuration fields in generated code in mdatagen. (#14560)

  • cmd/mdatagen: Add opt-in override_value support for resource_attributes config via override_value_enabled flag (#15109)
    Components can opt in by setting override_value_enabled: true in their metadata.yaml.
    When enabled, per-attribute config types are generated with typed override_value fields
    that let users override resource attribute values in the collector configuration.
    Components without the flag continue to use the shared ResourceAttributeConfig type.

  • cmd/mdatagen: Extend mdatagen config code generation to correctly handle default values for allOf embedded references (#14560)

  • cmd/mdatagen: Handle string validators in generated config structs (#14807)
    Supported validators include minLength, maxLength and pattern.

  • pkg/config/configgrpc: Add a DefaultBalancerName constant for the name of the default load balancer (#15139)
    This replaces the BalancerName function.

  • pkg/config/configgrpc: Accept gRPC resolver scheme URIs in client endpoint (e.g. passthrough:///host:port) to allow control over name resolution (#14990)
    After the migration to grpc.NewClient, some gRPC client components such as the OTLP
    exporter experienced connection issues in dual-stack DNS environments. This can now be
    fixed by using the passthrough:/// gRPC resolver scheme in the endpoint field.

  • pkg/exporterhelper: Added the WithAttrs option to allow custom attributes on exporter metrics (#14998)

🧰 Bug fixes 🧰

  • cmd/mdatagen: Fix a bug in mdatagen where the allOf field was not being properly handled, resulting in incorrect generation of data models. (#15153)

  • pkg/otelcol: Synchronize Collector Run and Shutdown lifecycles so that Shutdown blocks until Run completes all cleanup. (#4947)
    Shutdown now blocks until Run finishes cleanup, matching http.Server semantics.
    If Shutdown is called before Run, the next Run call returns nil after cleaning up
    the config provider.

  • pkg/pdata: Use pool-aware constructors in gRPC service handlers so top-level request structs participate in the sync.Pool lifecycle. (#14763)
    The gRPC service handlers for all signal types allocated the top-level
    ExportXxxServiceRequest with bare new(), bypassing the sync.Pool when
    pdata.useProtoPooling is enabled. This caused objects returned to the pool
    via Delete to never be retrieved. The handlers now use the pool-aware
    New*() constructors.

v0.150.0 Breaking risk
Notable features
  • cmd/mdatagen: custom validation support for Go config structs
Full changelog

Images and binaries here: https://github.com/open-telemetry/opentelemetry-collector-releases/releases/tag/v0.150.0

End User Changelog

💡 Enhancements 💡

  • all: Update semconv package from 1.38.0 to 1.40.0 (#15095)
  • cmd/mdatagen: Only allow the ToVersion feature flag attribute to be set for the Stable and Deprecated stages. (#15040)
    To better match the feature flag README
    (https://github.com/open-telemetry/opentelemetry-collector/blob/main/featuregate/README.md#feature-lifecycle).

🧰 Bug fixes 🧰

  • exporter/debug: Guard from out of bounds profiles dictionary indices (#14803)

  • pdata/pprofile: create a copy when the input is marked as read-only (#15080)

  • pkg/otelcol: Fix missing default values in unredacted print-config command by introducing confmap.WithUnredacted MarshalOption. (#14750)
    Resolves an issue where the unredacted mode output omitted all default-valued options. By introducing a new MarshalOption to disable redaction directly at the confmap encoding level, the unredacted mode now preserves all component defaults natively without requiring post-processing.

  • pkg/service: Headers on the internal telemetry OTLP exporter are now redacted when the configuration is marshaled (#14756)

API Changelog

💡 Enhancements 💡

  • cmd/mdatagen: Add custom validation support for Go config structs (#14563)

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

About

Stars
7,087
Forks
2,093
Languages
Go Go Template Makefile

Community & Support

Beta — feedback welcome: [email protected]