Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[receiver/apachedruidreceiver] Add Apache Druid receiver #31804

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Expand Up @@ -180,6 +180,7 @@ processor/transformprocessor/ @open-telemetry/collect

receiver/activedirectorydsreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @BinaryFissionGames
receiver/aerospikereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @antonblock
receiver/apachedruidreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @yuanlihan
receiver/apachereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
receiver/apachesparkreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @Caleb-Hurshman @mrsillydog
receiver/awscloudwatchmetricsreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling
Expand Down
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yaml
Expand Up @@ -177,6 +177,7 @@ body:
- receiver/activedirectoryds
- receiver/aerospike
- receiver/apache
- receiver/apachedruid
- receiver/apachespark
- receiver/awscloudwatch
- receiver/awscloudwatchmetrics
Expand Down
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yaml
Expand Up @@ -171,6 +171,7 @@ body:
- receiver/activedirectoryds
- receiver/aerospike
- receiver/apache
- receiver/apachedruid
- receiver/apachespark
- receiver/awscloudwatch
- receiver/awscloudwatchmetrics
Expand Down
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/other.yaml
Expand Up @@ -171,6 +171,7 @@ body:
- receiver/activedirectoryds
- receiver/aerospike
- receiver/apache
- receiver/apachedruid
- receiver/apachespark
- receiver/awscloudwatch
- receiver/awscloudwatchmetrics
Expand Down
1 change: 0 additions & 1 deletion cmd/otelcontribcol/builder-config.yaml
Expand Up @@ -446,4 +446,3 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/sumologicextension => ../../extension/sumologicextension
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/namedpipereceiver => ../../receiver/namedpipereceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/sqlquery => ../../internal/sqlquery

1 change: 1 addition & 0 deletions receiver/apachedruidreceiver/Makefile
@@ -0,0 +1 @@
include ../../Makefile.Common
41 changes: 41 additions & 0 deletions receiver/apachedruidreceiver/README.md
@@ -0,0 +1,41 @@
# Apache Druid Receiver

<!-- status autogenerated section -->
| Status | |
| ------------- |-----------|
| Stability | [development]: metrics |
| Distributions | [] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Areceiver%2Fapachedruid%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Areceiver%2Fapachedruid) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Areceiver%2Fapachedruid%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Areceiver%2Fapachedruid) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@atoulme](https://www.github.com/atoulme), [@yuanlihan](https://www.github.com/yuanlihan) |

[development]: https://github.com/open-telemetry/opentelemetry-collector#development
<!-- end autogenerated section -->

This receiver accepts [metrics](https://druid.apache.org/docs/latest/operations/metrics) data from the [HTTP Emitter](https://druid.apache.org/docs/latest/configuration/#http-emitter-module) of Apache Druid.

## Prerequisites

Apache Druid cluster needs to be configured to enable metrics, see [Enabling Metrics](https://druid.apache.org/docs/latest/configuration/#enabling-metrics) and the [HTTP Emitter Module](https://druid.apache.org/docs/latest/configuration/#http-emitter-module).

## Configuration

The following configuration options are supported:

- `endpoint` (default = localhost:9000) HTTP service endpoint for the line protocol receiver
- `metrics_path` (default = `/services/collector/metrics`) The path accepting Apache Druid metrics.
- `logs_path` (default = `/services/collector/logs`) The path accepting Apache Druid logs.
- `cluster_name` (default = `default`) The default name of Druid cluster. Note that the [HTTP Emitter](https://druid.apache.org/docs/latest/configuration/#http-emitter-module) of Apache Druid `28.0.0` doesn't include cluster name information in metrics.

The full list of settings exposed for this receiver are documented in [config.go](config.go).

Example:

```yaml
receivers:
apachedruid:
endpoint: localhost:9000
```

## Metrics

Details about the metrics produced by this receiver can be found in [metadata.yaml](./metadata.yaml)
19 changes: 19 additions & 0 deletions receiver/apachedruidreceiver/config.go
@@ -0,0 +1,19 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package apachedruidreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachedruidreceiver"

import (
"go.opentelemetry.io/collector/config/confighttp"
)

// Config defines configuration for the Apache Druid receiver.
type Config struct {
confighttp.ServerConfig `mapstructure:",squash"`

// MetricsPath for metrics data collection, default is '/services/collector/metrics'
MetricsPath string `mapstructure:"metrics_path"`

// The name of Druid cluster
ClusterName string `mapstructure:"cluster_name"`
}
6 changes: 6 additions & 0 deletions receiver/apachedruidreceiver/doc.go
@@ -0,0 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

//go:generate mdatagen metadata.yaml

package apachedruidreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachedruidreceiver"
37 changes: 37 additions & 0 deletions receiver/apachedruidreceiver/factory.go
@@ -0,0 +1,37 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package apachedruidreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachedruidreceiver"

import (
"context"

"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/receiver"

"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachedruidreceiver/internal/metadata"
)

func NewFactory() receiver.Factory {
return receiver.NewFactory(
metadata.Type,
createDefaultConfig,
receiver.WithMetrics(createMetricsReceiver, metadata.MetricsStability))
}

// createDefaultConfig creates the default configuration for receiver.
func createDefaultConfig() component.Config {
return &Config{
HTTPServerSettings: confighttp.ServerConfig{
Endpoint: "localhost:9000",
},
MetricsPath: "/services/collector/metrics",
ClusterName: "default",
}
}

func createMetricsReceiver(_ context.Context, params receiver.CreateSettings, cfg component.Config, nextConsumer consumer.Metrics) (receiver.Metrics, error) {
return newMetricsReceiver(cfg.(*Config), params, nextConsumer)
}
61 changes: 61 additions & 0 deletions receiver/apachedruidreceiver/generated_component_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

70 changes: 70 additions & 0 deletions receiver/apachedruidreceiver/go.mod
@@ -0,0 +1,70 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachedruidreceiver

go 1.21

require (
github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.90.0
github.com/stretchr/testify v1.9.0
go.opentelemetry.io/collector/component v0.90.0
go.opentelemetry.io/collector/config/confighttp v0.90.0
go.opentelemetry.io/collector/confmap v0.90.0
go.opentelemetry.io/collector/consumer v0.90.0
go.opentelemetry.io/collector/pdata v1.0.0
go.opentelemetry.io/collector/receiver v0.90.0
go.opentelemetry.io/otel/metric v1.21.0
go.opentelemetry.io/otel/trace v1.21.0
go.uber.org/goleak v1.3.0
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-logr/logr v1.3.0 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.17.3 // indirect
github.com/knadh/koanf/maps v0.1.1 // indirect
github.com/knadh/koanf/providers/confmap v0.1.0 // indirect
github.com/knadh/koanf/v2 v2.0.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rs/cors v1.10.1 // indirect
go.opentelemetry.io/collector v0.90.0 // indirect
go.opentelemetry.io/collector/config/configauth v0.90.0 // indirect
go.opentelemetry.io/collector/config/configcompression v0.90.0 // indirect
go.opentelemetry.io/collector/config/configopaque v0.90.0 // indirect
go.opentelemetry.io/collector/config/configtelemetry v0.90.0 // indirect
go.opentelemetry.io/collector/config/configtls v0.90.0 // indirect
go.opentelemetry.io/collector/config/internal v0.90.0 // indirect
go.opentelemetry.io/collector/extension v0.90.0 // indirect
go.opentelemetry.io/collector/extension/auth v0.90.0 // indirect
go.opentelemetry.io/collector/featuregate v1.3.1-0.20240315172937-3b5aee0c7a16 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect
go.opentelemetry.io/otel v1.21.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/net v0.18.0 // indirect
golang.org/x/sys v0.14.0 // indirect
golang.org/x/text v0.14.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
google.golang.org/grpc v1.59.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common

retract (
v0.76.2
v0.76.1
v0.65.0
)