diff --git a/libbeat/outputs/tls_to_otel.go b/libbeat/outputs/tls_to_otel.go index a29a64a10749..eeb5abecb2d8 100644 --- a/libbeat/outputs/tls_to_otel.go +++ b/libbeat/outputs/tls_to_otel.go @@ -33,6 +33,11 @@ import ( func TLSCommonToOTel(tlscfg *tlscommon.Config) (configtls.ClientConfig, error) { logger := logp.L().Named("tls-to-otel") insecureSkipVerify := false + + if tlscfg == nil { + return configtls.ClientConfig{}, nil + } + if tlscfg.VerificationMode == tlscommon.VerifyNone { insecureSkipVerify = true } diff --git a/x-pack/filebeat/cmd/customProvider/beatprovider.go b/x-pack/filebeat/cmd/customProvider/beatprovider.go new file mode 100644 index 000000000000..8327f134e630 --- /dev/null +++ b/x-pack/filebeat/cmd/customProvider/beatprovider.go @@ -0,0 +1,91 @@ +package customProvider + +import ( + "context" + "encoding/json" + "fmt" + "path/filepath" + "strings" + + "github.com/elastic/beats/v7/libbeat/cfgfile" + "github.com/elastic/beats/v7/libbeat/outputs/elasticsearch" + "github.com/elastic/elastic-agent-libs/config" + "github.com/go-viper/mapstructure/v2" + "go.opentelemetry.io/collector/confmap" +) + +const schemeName = "filebeat" + +type provider struct{} + +func NewFactory() confmap.ProviderFactory { + return confmap.NewProviderFactory(newProvider) +} + +func newProvider(confmap.ProviderSettings) confmap.Provider { + return &provider{} +} + +func (fmp *provider) Retrieve(_ context.Context, uri string, _ confmap.WatcherFunc) (*confmap.Retrieved, error) { + if !strings.HasPrefix(uri, schemeName+":") { + return nil, fmt.Errorf("%q uri is not supported by %q provider", uri, schemeName) + } + + cfg, err := cfgfile.Load(filepath.Clean(uri[len(schemeName)+1:]), nil) + if err != nil { + return nil, err + + } + + esCfg, err := elasticsearch.ToOtelConfig(cfg) + if err != nil { + return nil, err + } + + var tempMap map[string]any + err = mapstructure.Decode(esCfg, &tempMap) + if err != nil { + return nil, err + } + + newCfg := config.NewConfig() + newCfg.SetString("otelconsumer", -1, "") + + cfg.SetChild("output", -1, newCfg) + + var receiverMap map[string]any + cfg.Unpack(&receiverMap) + + cfgMap := map[string]any{ + "exporters": map[string]any{ + "elasticsearch": tempMap, + "debug": map[string]any{}, + }, + "receivers": map[string]any{ + "filebeatreceiver": receiverMap, + }, + "service": map[string]any{ + "pipeline": map[string]any{ + "logs": map[string]any{ + "exporters": []string{ + "debug", + }, + "receivers": []string{"filebeatreceiver"}, + }, + }, + }, + } + + s, _ := json.MarshalIndent(cfgMap, "", " ") + + fmt.Println(string(s)) + return confmap.NewRetrieved(cfgMap) +} + +func (*provider) Scheme() string { + return schemeName +} + +func (*provider) Shutdown(context.Context) error { + return nil +} diff --git a/x-pack/filebeat/cmd/customProvider/beatprovider_test.go b/x-pack/filebeat/cmd/customProvider/beatprovider_test.go new file mode 100644 index 000000000000..2c79a6726a4d --- /dev/null +++ b/x-pack/filebeat/cmd/customProvider/beatprovider_test.go @@ -0,0 +1,13 @@ +package customProvider + +import ( + "context" + "fmt" + "testing" +) + +func TestBeatProvider(t *testing.T) { + p := provider{} + fmt.Println(p.Retrieve(context.Background(), "filebeat:/Users/khushijain/Documents/beats/x-pack/filebeat/filebeat.yml", nil)) + +} diff --git a/x-pack/filebeat/cmd/otel.go b/x-pack/filebeat/cmd/otel.go index 819c9ae74a26..b1a08e34b173 100644 --- a/x-pack/filebeat/cmd/otel.go +++ b/x-pack/filebeat/cmd/otel.go @@ -3,6 +3,7 @@ package cmd import ( "context" + "github.com/elastic/beats/v7/x-pack/filebeat/cmd/customProvider" "github.com/elastic/beats/v7/x-pack/filebeat/fbreceiver" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter" "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver" @@ -71,12 +72,13 @@ func OtelCmd() *cobra.Command { Factories: components, ConfigProviderSettings: otelcol.ConfigProviderSettings{ ResolverSettings: confmap.ResolverSettings{ - URIs: []string{"file:/Users/vihasmakwana/Desktop/Vihas/elastic/elastic-agent/otel.yml"}, + URIs: []string{"filebeat:/Users/vihasmakwana/Desktop/Vihas/elastic/elastic-agent/otel.yml"}, ProviderFactories: []confmap.ProviderFactory{ fileprovider.NewFactory(), httpprovider.NewFactory(), httpsprovider.NewFactory(), yamlprovider.NewFactory(), + customProvider.NewFactory(), }, }, },