63 lines
2.9 KiB
Markdown
63 lines
2.9 KiB
Markdown
# OpenTelemetry Collector
|
|
|
|
**Status**: [Beta](https://github.com/open-telemetry/opentelemetry-specification/blob/main/oteps/0232-maturity-of-otel.md#beta)
|
|
|
|
The OpenTelemetry Collector consists of the following components:
|
|
|
|
* A mechanism that _MUST_ be able to load and parse an [OpenTelemetry Collector configuration
|
|
file](#configuration-file).
|
|
* A mechanism that _MUST_ be able to include compatible
|
|
[Collector components](#opentelemetry-collector-components) that
|
|
the user wishes to include.
|
|
|
|
These combined provide users the ability to easily switch between
|
|
[OpenTelemetry Collector Distributions](#opentelemetry-collector-distribution) while also ensuring that components produced by
|
|
the OpenTelemetry Collector SIG are able to work with any vendor who claims
|
|
support for an OpenTelemetry Collector.
|
|
|
|
## Configuration file
|
|
|
|
An OpenTelemetry Collector configuration file is defined as YAML and _MUST_ support
|
|
the following [minimum structure](https://pkg.go.dev/go.opentelemetry.io/collector/otelcol#Config):
|
|
|
|
```yaml
|
|
receivers:
|
|
processors:
|
|
exporters:
|
|
connectors:
|
|
extensions:
|
|
service:
|
|
telemetry:
|
|
pipelines:
|
|
```
|
|
|
|
## OpenTelemetry Collector components
|
|
|
|
For a library to be considered an OpenTelemetry Collector component, it _MUST_
|
|
implement a [Component interface](https://pkg.go.dev/go.opentelemetry.io/collector/component#Component)
|
|
defined by the OpenTelemetry Collector SIG.
|
|
|
|
Components require a [unique identifier](https://pkg.go.dev/go.opentelemetry.io/collector/component#ID)
|
|
to be included in an OpenTelemetry Collector. In the event of a name collision,
|
|
the components resulting in the collision cannot be used simultaneously in a single OpenTelemetry
|
|
Collector. In order to resolve this, the clashing components must use different identifiers.
|
|
|
|
### Compatibility requirements
|
|
|
|
A component is defined as compatible with an OpenTelemetry Collector when its dependencies are
|
|
source- and version-compatible with the Component interfaces of that Collector.
|
|
|
|
For example, a Collector derived from version tag v0.100.0 of the [OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector) _MUST_ support all components that
|
|
are version-compatible with the Golang Component API defined in the `github.com/open-telemetry/opentelemetry-collector/component` module found in that repository for that version tag.
|
|
|
|
## OpenTelemetry Collector Distribution
|
|
|
|
An OpenTelemetry Collector Distribution (Distro) is a compiled instance
|
|
of an OpenTelemetry Collector with a specific set of components and features. A
|
|
Distribution author _MAY_ choose to produce a distribution by utilizing tools
|
|
and/or documentation supported by the OpenTelemetry project. Alternatively, a
|
|
Distribution author _MUST_ provide end users with the capability for adding
|
|
their own components to the Distribution's components. Note that the resulting
|
|
binary from updating a Distribution to include new components
|
|
is a different Distribution.
|