| name | collector-component |
| description | Scaffold new OpenTelemetry Collector components (receivers, processors, exporters, connectors, extensions) for use with the OCB (OpenTelemetry Collector Builder). Use when the user wants to create a new OTel Collector component, generate component boilerplate, or scaffold a custom collector component. Targets the latest stable Collector API (go.opentelemetry.io/collector v1.x / v0.14x+). |
OpenTelemetry Collector Component Scaffolding
Scaffold new OTel Collector components following the canonical patterns from the
opentelemetry-collector-contrib repository.
Workflow
- Determine component type: receiver, processor, exporter, connector, or extension
- Determine signal types (traces, metrics, logs); connectors need input+output signals
- Choose a Go module path (e.g.,
github.com/org/repo/receiver/myreceiver)
- Generate the file set below
- Run
go mod tidy to resolve dependencies
File Layout
Every component follows this structure:
mycomponent/
metadata.yaml
doc.go
config.go
config_test.go
factory.go
factory_test.go
<component>.go
<component>_test.go
go.mod
go.sum
README.md
internal/metadata/ # generated by mdatagen
testdata/ # test config fixtures
metadata.yaml
Drives code generation via mdatagen. Generates internal/metadata/ with type constants
and stability levels.
type: mycomponent
status:
class: receiver
stability:
beta: [metrics]
alpha: [traces, logs]
distributions: [contrib]
codeowners:
active: [githubuser]
tests:
config:
doc.go
package mycomponent
config.go Pattern
package mycomponent
import "go.opentelemetry.io/collector/confmap/xconfmap"
var _ xconfmap.Validator = (*Config)(nil)
type Config struct {
Field string `mapstructure:"field"`
}
func (c *Config) Validate() error {
return nil
}
Use mapstructure tags for all fields. Implement xconfmap.Validator for validation.
Factory Patterns Per Component Type
Each component type has a different factory signature. Consult the appropriate reference:
Key API Differences
| Receiver | Processor | Exporter | Connector | Extension |
|---|
| Next consumer in Create? | Yes | Yes | No | Yes | No |
| Embeds consumer? | No | Yes | Yes | Yes | No |
| NewFactory style | Variadic opts | Variadic opts | Variadic opts | Variadic opts | Positional |
| Helper package | receiverhelper | processorhelper | exporterhelper | none | none |
go.mod
Use these module paths (adjust version to latest):
go.opentelemetry.io/collector/component v1.x
go.opentelemetry.io/collector/consumer v1.x
go.opentelemetry.io/collector/confmap v1.x
go.opentelemetry.io/collector/pdata v1.x
go.opentelemetry.io/collector/receiver v0.14x # for receivers
go.opentelemetry.io/collector/processor v0.14x # for processors
go.opentelemetry.io/collector/exporter v0.14x # for exporters
go.opentelemetry.io/collector/connector v0.14x # for connectors
go.opentelemetry.io/collector/extension v0.14x # for extensions
OCB Integration
Once the component module is ready, add it to builder-config.yaml:
receivers:
- gomod: github.com/org/repo/receiver/myreceiver v0.1.0
replaces:
- github.com/org/repo/receiver/myreceiver => ../receiver/myreceiver
Then build: builder --config=builder-config.yaml