internal/pkg/otel/components.go (131 lines of code) (raw):

// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one // or more contributor license agreements. Licensed under the Elastic License 2.0; // you may not use this file except in compliance with the Elastic License 2.0. package otel import ( "go.opentelemetry.io/collector/connector" "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/extension" "go.opentelemetry.io/collector/otelcol" "go.opentelemetry.io/collector/processor" "go.opentelemetry.io/collector/receiver" // Receivers: filelogreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver" // for collecting log files hostmetricsreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver" httpcheckreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver" jaegerreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver" jmxreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver" k8sclusterreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver" k8sobjectsreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver" kubeletstatsreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver" nginxreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nginxreceiver" receivercreator "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator" redisreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver" zipkinreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver" nopreceiver "go.opentelemetry.io/collector/receiver/nopreceiver" otlpreceiver "go.opentelemetry.io/collector/receiver/otlpreceiver" fbreceiver "github.com/elastic/beats/v7/x-pack/filebeat/fbreceiver" mbreceiver "github.com/elastic/beats/v7/x-pack/metricbeat/mbreceiver" // Processors: attributesprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor" // for modifying signal attributes "github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor" geoipprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/geoipprocessor" // for adding geographical metadata associated to an IP address k8sattributesprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor" // for adding k8s metadata "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor" resourceprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor" // for modifying resource attributes transformprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor" // for OTTL processing on logs "go.opentelemetry.io/collector/processor/batchprocessor" // for batching events "go.opentelemetry.io/collector/processor/memorylimiterprocessor" "github.com/elastic/opentelemetry-collector-components/processor/elastictraceprocessor" "github.com/elastic/opentelemetry-collector-components/processor/elasticinframetricsprocessor" // Exporters: "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter" fileexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter" // for e2e tests "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter" debugexporter "go.opentelemetry.io/collector/exporter/debugexporter" // for dev nopexporter "go.opentelemetry.io/collector/exporter/nopexporter" "go.opentelemetry.io/collector/exporter/otlpexporter" otlphttpexporter "go.opentelemetry.io/collector/exporter/otlphttpexporter" // Extensions "github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension" k8sobserver "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver" pprofextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension" filestorage "github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage" "go.opentelemetry.io/collector/extension/memorylimiterextension" // for putting backpressure when approach a memory limit // Connectors routingconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector" spanmetricsconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector" elasticapmconnector "github.com/elastic/opentelemetry-collector-components/connector/elasticapmconnector" ) func components(extensionFactories ...extension.Factory) func() (otelcol.Factories, error) { return func() (otelcol.Factories, error) { var err error factories := otelcol.Factories{} // Receivers receivers := []receiver.Factory{ otlpreceiver.NewFactory(), filelogreceiver.NewFactory(), kubeletstatsreceiver.NewFactory(), k8sclusterreceiver.NewFactory(), hostmetricsreceiver.NewFactory(), httpcheckreceiver.NewFactory(), k8sobjectsreceiver.NewFactory(), receivercreator.NewFactory(), redisreceiver.NewFactory(), nginxreceiver.NewFactory(), jaegerreceiver.NewFactory(), zipkinreceiver.NewFactory(), fbreceiver.NewFactory(), mbreceiver.NewFactory(), jmxreceiver.NewFactory(), nopreceiver.NewFactory(), } // some receivers should only be available when // not in fips mode due to restrictions on crypto usage receivers = addNonFipsReceivers(receivers) factories.Receivers, err = otelcol.MakeFactoryMap(receivers...) if err != nil { return otelcol.Factories{}, err } // Processors factories.Processors, err = otelcol.MakeFactoryMap[processor.Factory]( batchprocessor.NewFactory(), resourceprocessor.NewFactory(), attributesprocessor.NewFactory(), transformprocessor.NewFactory(), filterprocessor.NewFactory(), geoipprocessor.NewFactory(), k8sattributesprocessor.NewFactory(), elasticinframetricsprocessor.NewFactory(), resourcedetectionprocessor.NewFactory(), memorylimiterprocessor.NewFactory(), elastictraceprocessor.NewFactory(), ) if err != nil { return otelcol.Factories{}, err } // Exporters exporters := []exporter.Factory{ otlpexporter.NewFactory(), debugexporter.NewFactory(), fileexporter.NewFactory(), elasticsearchexporter.NewFactory(), loadbalancingexporter.NewFactory(), otlphttpexporter.NewFactory(), nopexporter.NewFactory(), } // some exporters should only be available when // not in fips mode due to restrictions on crypto usage exporters = addNonFipsExporters(exporters) factories.Exporters, err = otelcol.MakeFactoryMap(exporters...) if err != nil { return otelcol.Factories{}, err } factories.Connectors, err = otelcol.MakeFactoryMap[connector.Factory]( routingconnector.NewFactory(), spanmetricsconnector.NewFactory(), elasticapmconnector.NewFactory(), ) if err != nil { return otelcol.Factories{}, err } extensions := []extension.Factory{ memorylimiterextension.NewFactory(), filestorage.NewFactory(), healthcheckextension.NewFactory(), pprofextension.NewFactory(), k8sobserver.NewFactory(), } extensions = append(extensions, extensionFactories...) factories.Extensions, err = otelcol.MakeFactoryMap[extension.Factory](extensions...) if err != nil { return otelcol.Factories{}, err } return factories, err } }