Supported pipeline types: traces
The transform processor modifies telemetry based on configuration using the Telemetry Query Language.
It takes a list of queries which are performed in the order specified in the config.
Queries are composed of the following parts
- Path expressions: Fields within the incoming data can be referenced using expressions composed of the names as defined
in the OTLP protobuf definition. e.g.,
status.code
, attributes["http.method"]
. If the path expression begins with
resource.
or instrumentation_library.
, it will reference those values.
- The name
instrumentation_library
within OpenTelemetry is currently under discussion and may be changed in the future.
- Literals: Strings, ints, and floats can be referenced as literal values
- Function invocations: Functions can be invoked with arguments matching the function's expected arguments
- Where clause: Telemetry to modify can be filtered by appending
where a <op> b
, with a
and b
being any of the above.
Supported functions:
-
set(target, value)
- target
is a path expression to a telemetry field to set value
into. value
is any value type.
e.g., set(attributes["http.path"], "/foo")
, set(name, attributes["http.route"])
. If value
resolves to nil
, e.g.
it references an unset map value, there will be no action.
-
keep_keys(target, string...)
- target
is a path expression to a map type field. The map will be mutated to only contain
the fields specified by the list of strings. e.g., keep_keys(attributes, "http.method")
, keep_keys(attributes, "http.method", "http.route")
Supported where operations:
==
- matches telemetry where the values are equal to each other
!=
- matches telemetry where the values are not equal to each other
Example configuration:
receivers:
otlp:
protocols:
grpc:
exporters:
nop
processors:
transform:
traces:
queries:
- set(status.code, 1) where attributes["http.path"] == "/health"
- keep_keys(resource.attributes, "service.name", "service.namespace", "cloud.region")
- set(name, attributes["http.route"])
service:
pipelines:
traces:
receivers: [otlp]
processors: [transform]
exporters: [nop]
This processor will perform the operations in order for all spans
- Set status code to OK for all spans with a path
/health
- Keep only
service.name
, service.namespace
, cloud.region
resource attributes
- Set
name
to the http.route
attribute if it is set