There are tens if not hundreds of different observability destinations. Odigos’s goal is to provide a seamless and easy way to ship observability data to any one of them.
mydest
.
Creating a new destination involves these steps:
Add Logo
destinations/logos/
directory and add your logo.mydest.svg
Add Destination Metadata
destinations/data/
directory and create a new YAML file.mydest.yaml
Allowed properties
Key | Example | Required | Description | Docs |
---|---|---|---|---|
metadata.type | mydest | ✅ | unique identifier for the destination | ✅ |
metadata.displayName | My Destination | ✅ | display name of the destination | ✅ |
metadata.category | managed | ✅ | one-of: managed self hosted | ✅ |
spec.image | mydest.svg | ✅ | logo of the destination | ✅ |
spec.signals.traces.supported | true | ✅ | is tracing supported? | ✅ |
spec.signals.metrics.supported | true | ✅ | is metrics supported? | ✅ |
spec.signals.logs.supported | false | ✅ | is logging supported? | ✅ |
spec.note.type | Note | ❌ | type of callout box to display one-of: Note Info Warning Tip Check | ✅ |
spec.note.content | We handle the endpoint internally, so you don't need to provide it. | ❌ | content of the callout box | ✅ |
spec.fields | - | ✅ | list of fields to be configured, see specification here | ✅ |
Allowed properties for spec.fields[]
Key | Example | Required | Description | Docs |
---|---|---|---|---|
name | MYDEST_API_KEY | ✅ | key name of the field | ✅ |
displayName | API Key | ✅ | display name of the field | ✅ |
secret | true | ❌ | is the field a secret? (e.g. password, token, etc.) | ❌ |
initialValue | - | ❌ | default value for the field | ✅ |
componentType | input | ✅ | one-of: input textarea dropdown checkbox multiInput keyValuePairs | ✅ |
componentProps.type | password | ❌ | the type of value (e.g. string, number, password, etc.) | ✅ |
componentProps.required | true | ❌ | is the field required? | ✅ |
componentProps.values | - | ❌ | list of options for dropdown | ❌ |
componentProps.placeholder | glc_eyJvIj... | ❌ | placeholder text for input | ✅ |
componentProps.tooltip | Obtained from your "My Dest" account | ❌ | tooltip text for input | ✅ |
renderCondition | ["MYDEST_URL", "!=", ""] | ❌ | hide/show the field in the UI (form only) one-of: [boolean] [string, operator, any] where string is the key name of the dependancy field, and operator is one-of: != == >= <= > < | ❌ |
hideFromReadData | ["MYDEST_URL", "==", ""] | ❌ | hide/show the field in the UI (read only) one-of: [boolean] [string, operator, any] where string is the key name of the dependancy field, and operator is one-of: != == >= <= > < | ❌ |
customReadDataLabels | - | ❌ | custom labels for the UI (read only) | ❌ |
Add Destination Type
common/dests.go
and add your new destination to the DestinationType
enum.type
property in mydest.yaml
Add Collector Config
common/config
directory and create a new GO file.mydest.go
Explain Config
common/dests.go
in step 1.dest
object which holds the data received from the UI and the currentConfig
object. The currentConfig
object contains the current configuration of the gateway collector. Modify this object to include the OpenTelemetry configuration needed by your destination. You can assume a basic configuration is already provided in the currentConfig
object, for details see getBasicConfig
method in common/config/root.go
file.
otlp/<dest-name>-<dest.GetID()>
for OTel gRPC exportersotlphttp/<dest-name>-<dest.GetID()>
for OTel HTTP exporterstraces/<dest-name>-<dest.GetID()>
for traces pipelinesmetrics/<dest-name>-<dest.GetID()>
for metrics pipelineslogs/<dest-name>-<dest.GetID()>
for logs pipelinesisTracingEnabled
, isMetricsEnabled
and isLoggingEnabled
to determine which signals are selected by the user for the destination, and configure the collector accordingly.Add Available Config
common/config/root.go
and add the new destination to the availableConfigers
list.&MyDest{}
Install Python
Generate Documentation
docs
directory, and run:Edit Documentation
docs/backends
directory. Feel free to add any additional content to the generated file.!! START CUSTOM EDIT !!
and !! END CUSTOM EDIT !!
commentsmydest.mdx
Update README.md
README.md
and add your new destination to the list of destinations.