Status | |
---|---|
Distributions | contrib |
Issues | |
Code Owners | @jpkrohling, @mwear |
Exporter Pipeline Type | Receiver Pipeline Type | Stability Level |
---|---|---|
traces | traces | alpha |
metrics | metrics | alpha |
logs | logs | alpha |
Routes logs, metrics or traces based on resource attributes to specific pipelines using OpenTelemetry Transformation Language (OTTL) statements as routing conditions.
If you are not already familiar with connectors, you may find it helpful to first visit the Connectors README.
The following settings are available:
table (required)
: the routing table for this connector.table.statement (required)
: the routing condition provided as the OTTL statement.table.pipelines (required)
: the list of pipelines to use when the routing condition is met.default_pipelines (optional)
: contains the list of pipelines to use when a record does not meet any of specified conditions.error_mode (optional)
: determines how errors returned from OTTL statements are handled. Valid values arepropagate
,ignore
andsilent
. Ifignored
orsilent
is used and a statement's condition has an error then the payload will be routed to the default pipelines. Whensilent
is used the error is not logged. If not supplied,propagate
is used.match_once (optional, default: false)
: determines whether the connector matches multiple statements or not. If enabled, the payload will be routed to the first pipeline in thetable
whose routing condition is met.
Example:
receivers:
otlp:
exporters:
jaeger:
endpoint: localhost:14250
jaeger/acme:
endpoint: localhost:24250
jaeger/ecorp:
endpoint: localhost:34250
connectors:
routing:
default_pipelines: [traces/jaeger]
error_mode: ignore
match_once: false
table:
- statement: route() where attributes["X-Tenant"] == "acme"
pipelines: [traces/jaeger-acme]
- statement: delete_key(attributes, "X-Tenant") where IsMatch(attributes["X-Tenant"], ".*corp")
pipelines: [traces/jaeger-ecorp]
routing/match_once:
default_pipelines: [traces/jaeger]
error_mode: ignore
match_once: true
table:
- statement: route() where attributes["X-Tenant"] == "acme"
pipelines: [traces/jaeger-acme]
- statement: route() where attributes["X-Tenant"] == ".*acme"
pipelines: [traces/jaeger-ecorp]
service:
pipelines:
traces/in:
receivers: [otlp]
exporters: [routing]
traces/jaeger:
receivers: [routing]
exporters: [jaeger]
traces/jaeger-acme:
receivers: [routing]
exporters: [jaeger/acme]
traces/jaeger-ecorp:
receivers: [routing]
exporters: [jaeger/ecorp]
A signal may get matched by routing conditions of more than one routing table entry. In this case, the signal will be routed to all pipelines of matching routes. Respectively, if none of the routing conditions met, then a signal is routed to default pipelines.
- The connector will only route using OTTL statements which can only be applied to resource attributes. It does not support matching on context values at this time.
- The connector routes to pipelines, not exporters as the processor does.
- Currently, it is not possible to specify boolean statements without function invocation as the routing condition. It is required to provide the NOOP
route()
or any other supported function as part of the routing statement, see #13545 for more information. - Supported OTTL functions:
The full list of settings exposed for this connector are documented here with detailed sample configuration files: