diff --git a/README.md b/README.md index 5835526bf..28afad08c 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,7 @@ For more details, see our [quickstart guide](https://docs.odigos.io/intro). | Grafana Cloud | ✅ | ✅ | ✅ | | Groundcover inCloud | ✅ | ✅ | ✅ | | Honeycomb | ✅ | ✅ | ✅ | +| HyperDX | ✅ | ✅ | ✅ | | KloudMate | ✅ | ✅ | ✅ | | Last9 | ✅ | ✅ | | | Lightstep | ✅ | | | diff --git a/common/config/hyperdx.go b/common/config/hyperdx.go new file mode 100644 index 000000000..8068956ea --- /dev/null +++ b/common/config/hyperdx.go @@ -0,0 +1,48 @@ +package config + +import ( + "github.com/odigos-io/odigos/common" +) + +type HyperDX struct{} + +func (j *HyperDX) DestType() common.DestinationType { + return common.HyperDxDestinationType +} + +func (j *HyperDX) ModifyConfig(dest ExporterConfigurer, cfg *Config) error { + uniqueUri := "hdx-" + dest.GetID() + + exporterName := "otlp/" + uniqueUri + exporterConfig := GenericMap{ + "endpoint": "in-otel.hyperdx.io:4317", + "headers": GenericMap{ + "authorization": "${HYPERDX_API_KEY}", + }, + } + + cfg.Exporters[exporterName] = exporterConfig + + if isTracingEnabled(dest) { + pipeName := "traces/" + uniqueUri + cfg.Service.Pipelines[pipeName] = Pipeline{ + Exporters: []string{exporterName}, + } + } + + if isMetricsEnabled(dest) { + pipeName := "metrics/" + uniqueUri + cfg.Service.Pipelines[pipeName] = Pipeline{ + Exporters: []string{exporterName}, + } + } + + if isLoggingEnabled(dest) { + pipeName := "logs/" + uniqueUri + cfg.Service.Pipelines[pipeName] = Pipeline{ + Exporters: []string{exporterName}, + } + } + + return nil +} diff --git a/common/config/root.go b/common/config/root.go index 8193dbbae..c4d98b15d 100644 --- a/common/config/root.go +++ b/common/config/root.go @@ -18,7 +18,7 @@ var availableConfigers = []Configer{ &AppDynamics{}, &Axiom{}, &AWSS3{}, &AzureBlobStorage{}, &BetterStack{}, &Causely{}, &Chronosphere{}, &Clickhouse{}, &Coralogix{}, &Datadog{}, &Debug{}, &Dynatrace{}, &ElasticAPM{}, &Elasticsearch{}, &GenericOTLP{}, &GoogleCloud{}, &GoogleCloudStorage{}, &GrafanaCloudLoki{}, &GrafanaCloudPrometheus{}, &GrafanaCloudTempo{}, &Groundcover{}, - &Honeycomb{}, &Jaeger{}, &KloudMate{}, &Last9{}, &Lightstep{}, &Logzio{}, &Loki{}, &Lumigo{}, &Middleware{}, &Mock{}, &NewRelic{}, + &Honeycomb{}, &HyperDX{}, &Jaeger{}, &KloudMate{}, &Last9{}, &Lightstep{}, &Logzio{}, &Loki{}, &Lumigo{}, &Middleware{}, &Mock{}, &NewRelic{}, &Nop{}, &OpsVerse{}, &OTLPHttp{}, &Prometheus{}, &Qryn{}, &QrynOSS{}, &Quickwit{}, &Sentry{}, &Signoz{}, &Splunk{}, &SumoLogic{}, &Tempo{}, &Uptrace{}, } diff --git a/common/dests.go b/common/dests.go index 469ce8ee0..f43189aac 100644 --- a/common/dests.go +++ b/common/dests.go @@ -25,6 +25,7 @@ const ( GrafanaCloudTempoDestinationType DestinationType = "grafanacloudtempo" GroundcoverDestinationType DestinationType = "groundcover" HoneycombDestinationType DestinationType = "honeycomb" + HyperDxDestinationType DestinationType = "hyperdx" JaegerDestinationType DestinationType = "jaeger" KloudMateDestinationType DestinationType = "kloudmate" Last9DestinationType DestinationType = "last9" diff --git a/destinations/data/hyperdx.yaml b/destinations/data/hyperdx.yaml new file mode 100644 index 000000000..f11c577ed --- /dev/null +++ b/destinations/data/hyperdx.yaml @@ -0,0 +1,23 @@ +apiVersion: internal.odigos.io/v1beta1 +kind: Destination +metadata: + type: hyperdx + displayName: HyperDX + category: managed +spec: + image: hyperdx.svg + signals: + traces: + supported: true + metrics: + supported: true + logs: + supported: true + fields: + - name: HYPERDX_API_KEY + displayName: HyperDX API Key + componentType: input + secret: true + componentProps: + type: password + required: true diff --git a/destinations/logos/hyperdx.svg b/destinations/logos/hyperdx.svg new file mode 100644 index 000000000..1f81e3f20 --- /dev/null +++ b/destinations/logos/hyperdx.svg @@ -0,0 +1,7 @@ + + HyperDX + + + + + \ No newline at end of file diff --git a/docs/backends-overview.mdx b/docs/backends-overview.mdx index 063588a27..69f9c870c 100644 --- a/docs/backends-overview.mdx +++ b/docs/backends-overview.mdx @@ -24,6 +24,7 @@ Odigos has destinations for many observability backends. | Grafana Cloud | Managed | ✅ | ✅ | ✅ | | Groundcover inCloud | Managed | ✅ | ✅ | ✅ | | Honeycomb | Managed | ✅ | ✅ | ✅ | +| HyperDX | Managed | ✅ | ✅ | ✅ | | Jaeger | Self-Hosted | ✅ | | | | KloudMate | Managed | ✅ | ✅ | ✅ | | Last9 | Managed | ✅ | ✅ | | diff --git a/docs/backends/hyperdx.mdx b/docs/backends/hyperdx.mdx new file mode 100644 index 000000000..fdac90ab0 --- /dev/null +++ b/docs/backends/hyperdx.mdx @@ -0,0 +1,60 @@ +--- +title: 'HyperDX' +--- + +## Configuring Backend + +- **HYPERDX_API_KEY** - HyperDX API Key. + +**Note:** +We handle the endpoint internally, so you don't need to provide it. +- The endpoint is `in-otel.hyperdx.io:4317`. + +## Adding a Destination to Odigos + +Odigos makes it simple to add and configure destinations, allowing you to select the specific signals [traces/logs/metrics] that you want to send to each destination. There are two primary methods for configuring destinations in Odigos: + +1. **Using the UI** + +Use the [Odigos CLI](https://docs.odigos.io/cli/odigos_ui) to access the UI: + +```bash +odigos ui +``` + +2. **Using kubernetes manifests** + +Save the YAML below to a file (e.g., `destination.yaml`) and apply it using `kubectl`: + +```bash +kubectl apply -f destination.yaml +``` + + +```yaml +apiVersion: odigos.io/v1alpha1 +kind: Destination +metadata: + name: hyperdx-example + namespace: odigos-system +spec: + data: {} + destinationName: hyperdx + secretRef: + name: hyperdx-secret + signals: + - TRACES + - METRICS + - LOGS + type: hyperdx + +--- +apiVersion: v1 +data: + HYPERDX_API_KEY: +kind: Secret +metadata: + name: hyperdx-secret + namespace: odigos-system +type: Opaque +``` diff --git a/docs/mint.json b/docs/mint.json index 4c7c5fef7..b402dd4aa 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -198,6 +198,7 @@ "backends/grafanacloudtempo", "backends/groundcover", "backends/honeycomb", + "backends/hyperdx", "backends/jaeger", "backends/kloudmate", "backends/last9", diff --git a/docs/quickstart/next-steps.mdx b/docs/quickstart/next-steps.mdx index ef7ccc636..85818cd6a 100644 --- a/docs/quickstart/next-steps.mdx +++ b/docs/quickstart/next-steps.mdx @@ -36,6 +36,7 @@ Select the relevant backend for your use case below to connect it to Odigos. +