模块 ngx_otel_module

配置示例
指令
     otel_exporter
     otel_service_name
     otel_resource_attr
     otel_trace
     otel_trace_context
     otel_span_name
     otel_span_attr
默认 Span 属性
嵌入式变量

ngx_otel_module 模块提供 OpenTelemetry 分布式追踪支持。该模块支持 W3C 上下文传播和 OTLP/gRPC 导出协议。

模块的源代码可在此处获取:此处。下载和安装说明可在此处获取:此处

自 1.25.3 版本起,该模块也提供预构建的 nginx-module-otel ;作为我们 商业订阅 的一部分,自 1.23.4 版本起,该模块也提供 nginx-plus-module-otel 包。

配置示例

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;
        }
    }
}

指令

语法 otel_exporter { ... }
默认值
上下文 http

指定 OTel 数据导出参数

endpoint [(http|https)://]host:port;
接受遥测数据的 OTLP/gRPC 端点。自 0.1.2 版本起支持 TLS。
trusted_certificate path;
用于验证 TLS 端点的 PEM 格式 CA 证书文件(自 0.1.2 版本起)。默认为操作系统提供的 CA 捆绑包。
添加到遥测导出请求的自定义 HTTP 头部(自 0.1.2 版本起)。
interval time;
两次导出之间的最大间隔,默认为 5 秒。
batch_size number;
每个 worker 在一个批次中发送的 Span 的最大数量,默认为 512
batch_count number;
每个 worker 待处理批次的数量,超过限制的 Span 将被丢弃,默认为 4

示例

otel_exporter {
    endpoint https://otel-example.nginx.com:4317;

    header X-API-Token "my-token-value";
}

语法 otel_service_name name;
默认值
otel_service_name unknown_service:nginx;
上下文 http

设置 OTel 资源的 "service.name" 属性。

语法 otel_resource_attr name value;
默认值
上下文 http

此指令出现在 0.1.2 版本中。

设置自定义 OTel 资源属性。

语法 otel_trace on | off | $variable;
默认值
otel_trace off;
上下文 http, server, location

启用或禁用 OpenTelemetry 追踪。也可以通过指定变量来启用此指令。

split_clients "$otel_trace_id" $ratio_sampler {
              10%              on;
              *                off;
}

server {
    location / {
        otel_trace         $ratio_sampler;
        otel_trace_context inject;
        proxy_pass         http://backend;
    }
}

语法 otel_trace_context extract | inject | propagate | ignore;
默认值
otel_trace_context ignore;
上下文 http, server, location

指定如何传播 traceparent/tracestate 头部

extract
使用请求中现有的追踪上下文,以便 追踪 的标识符和 父 Span 的标识符继承自入站请求。
inject
添加一个新的上下文到请求中,如果存在现有头部,则覆盖它们。
propagate
更新现有上下文(结合了 extractinject)。
ignore
跳过上下文头部处理。

语法 otel_span_name name;
默认值
上下文 http, server, location

定义 OTel Span 的名称。默认情况下,它是请求的 location 名称。该名称可以包含变量。

语法 otel_span_attr name value;
默认值
上下文 http, server, location

添加一个自定义 OTel Span 属性。该值可以包含变量。

默认 Span 属性

以下 Span 属性 会被自动添加

嵌入式变量

$otel_trace_id
当前 Span 所属的追踪的标识符,例如 56552bc4daa3bf39c08362527e1dd6c4
$otel_span_id
当前 Span 的标识符,例如 4c0b8531ec38ca59
$otel_parent_id
父 Span 的标识符,例如 dc94d281b0f884ea
$otel_parent_sampled
父 Span 的 "sampled" 标志,可以是 "1" 或 "0"