Status | |
---|---|
Stability | alpha: traces, metrics, logs |
Issues | |
Code Owners | @TylerHelmuth, @kentquirk, @bogdandrutu, @evan-bradley | Seeking more code owners! |
The OpenTelemetry Transformation Language is a language for transforming open telemetry data based on the OpenTelemetry Collector Processing Exploration.
This package reads in OTTL statements and converts them to invokable functions/booleans based on the OTTL's grammar.
If you're looking to write OTTL statements for a component's configuration check out these resources.
See OTTL Functions for a list of functions available for use in the OTTL statements of most components.
OTTL Contexts define how you access the fields on a piece of telemetry. See the table to find the exact list of available fields:
Telemetry | OTTL Context |
---|---|
Resource |
Resource |
Instrumentation Scope |
Instrumentation Scope |
Span |
Span |
Span Event |
SpanEvent |
Metric |
Metric |
Datapoint |
DataPoint |
Log |
Log |
If you're looking to use OTTL in your component, check out the OTTL grammar.
These examples contain a SQL-like declarative language. Applied statements interact with only one signal, but statements can be declared across multiple signals. Functions used in examples are indicative of what could be useful.
traces:
delete(attributes["http.request.header.authorization"])
metrics:
delete(attributes["http.request.header.authorization"])
logs:
delete(attributes["http.request.header.authorization"])
traces:
keep_keys(attributes, ["http.method", "http.status_code"])
metrics:
keep_keys(attributes, ["http.method", "http.status_code"])
logs:
keep_keys(attributes, ["http.method", "http.status_code"])
traces:
replace_match(attributes["http.target"], "/user/*/list/*", "/user/{userId}/list/{listId}")
traces:
replace_match(name, "GET /user/*/list/*", "GET /user/{userId}/list/{listId}")
traces:
replace_all_matches(attributes, "/user/*/list/*", "/user/{userId}/list/{listId}")
traces:
delete(resource.attributes["process.command_line"])
metrics:
delete(resource.attributes["process.command_line"])
logs:
delete(resource.attributes["process.command_line"])
metrics:
set(attributes["k8s_pod"], resource.attributes["k8s.pod.name"])
traces:
set(attributes["whose_fault"], "theirs") where attributes["http.status"] == 400 or attributes["http.status"] == 404
set(attributes["whose_fault"], "ours") where attributes["http.status"] == 500
logs:
set(span_id, SpanID(0x0000000000000000))
traces:
set(span_id, SpanID(0x0000000000000000))
metrics:
set(metric.name, ConvertCase(metric.name, "snake"))
traces:
set(attributes["test-passed"], true) where attributes["target-attribute"] != nil