Module ngx_otel_module
| Example Configuration Directives otel_exporter otel_service_name otel_trace otel_trace_context otel_span_name otel_span_attr Default span attributes Embedded Variables |
The ngx_otel_module module (1.23.4) provides
OpenTelemetry
distributed tracing support.
The module supports
W3C
context propagation and OTLP/gRPC export protocol.
The source code of the module is available here. Download and install instructions are available here.
The module is also available in a prebuilt
nginx-module-otel
package
since 1.25.3
and in nginx-plus-module-otel package
as part of our
commercial subscription.
Example Configuration
load_module modules/ngx_otel_module.so;
events {
}
http {
otel_exporter {
endpoint localhost:4317;
}
server {
listen 127.0.0.1:8080;
location / {
otel_trace on;
otel_trace_context inject;
proxy_pass http://backend;
}
}
}
Directives
| Syntax: |
otel_exporter { ... } |
|---|---|
| Default: | — |
| Context: |
http |
Specifies OTel data export parameters:
endpoint- the address of OTLP/gRPC endpoint that will accept telemetry data.
interval-
the maximum interval between two exports,
by default is
5seconds. batch_size-
the maximum number of spans to be sent in one batch per worker,
by default is
512. batch_count-
the number of pending batches per worker,
spans exceeding the limit are dropped,
by default is
4.
Example:
otel_exporter {
endpoint localhost:4317;
interval 5s;
batch_size 512;
batch_count 4;
}
| Syntax: |
otel_service_name |
|---|---|
| Default: |
otel_service_name unknown_service:nginx; |
| Context: |
http |
Sets the
“service.name”
attribute of the OTel resource.
| Syntax: |
otel_trace |
|---|---|
| Default: |
otel_trace off; |
| Context: |
http, server, location |
Enables or disables OpenTelemetry tracing. The directive can also be enabled by specifying a variable:
split_clients "$otel_trace_id" $ratio_sampler {
10% on;
* off;
}
server {
location / {
otel_trace $ratio_sampler;
otel_trace_context inject;
proxy_pass http://backend;
}
}
| Syntax: |
otel_trace_context |
|---|---|
| Default: |
otel_trace_context ignore; |
| Context: |
http, server, location |
Specifies how to propagate traceparent/tracestate headers:
extract- uses an existing trace context from the request, so that the identifiers of a trace and the parent span are inherited from the incoming request.
inject- adds a new context to the request, overwriting existing headers, if any.
propagate- updates the existing context (combines extract and inject).
ignore- skips context headers processing.
| Syntax: |
otel_span_name |
|---|---|
| Default: | — |
| Context: |
http, server, location |
Defines the name of the OTel span. By default, it is a name of the location for a request. The name can contain variables.
| Syntax: |
otel_span_attr |
|---|---|
| Default: | — |
| Context: |
http, server, location |
Adds a custom OTel span attribute. The value can contain variables.
Default span attributes
The following span attributes are added automatically:
-
http.method -
http.target -
http.route -
http.scheme -
http.flavor -
http.user_agent -
http.request_content_length -
http.response_content_length -
http.status_code -
net.host.name -
net.host.port -
net.sock.peer.addr -
net.sock.peer.port
Embedded Variables
$otel_trace_id-
the identifier of the trace the current span belongs to,
for example,
56552bc4daa3bf39c08362527e1dd6c4 $otel_span_id-
the identifier of the current span,
for example,
4c0b8531ec38ca59 $otel_parent_id-
the identifier of the parent span,
for example,
dc94d281b0f884ea $otel_parent_sampled-
the “
sampled” flag of the parent span, can be “1” or “0”