分散式追蹤
Solr 包含一個基於 OpenTracing 的通用追蹤框架,可用於追蹤請求的生命週期以進行效能監控。
追蹤資料可以設定為傳送至各種後端,可以直接傳送或透過代理程式傳送。Solr 可以直接傳送 OTLP/gRPC 和 Jaeger/Thrift 格式的追蹤資料。您可以在每個節點上安裝代理程式,並將追蹤資料傳送至 localhost,來支援許多其他目的地和雲端供應商。
在 Jaeger UI 中顯示的取樣分散式追蹤查詢請求如下所示

永遠開啟的追蹤 ID 產生
Solr 包含一個永遠開啟的追蹤 ID 產生器。這將為每個 Solr 請求注入追蹤 ID 標頭,傳播用戶端提供的值或根據需要產生新的 ID,並取代現有的 rid
機制。
它用於傳播的標頭名稱為 X-Trace-Id
,可以透過更新系統屬性 solr.traceIdHeader
來變更。
如果透過 Solr 設定設定了另一個追蹤機制,則不會啟用此外掛程式。可以將系統屬性 solr.alwaysOnTraceId
設定為 false
來停用此外掛程式。
模組與設定
TracerConfigurator
是一個類別,用於根據 solr.xml
中的設定提供 io.opentracing.Tracer
的執行個體。這些是可插拔的,每個外掛程式都以 Solr 模組 的形式提供
opentelemetry:opentelemetry
模組支援透過 gRPC 或 HTTP 的 OTLP。
jaegertracer-configurator:jaegertracer-configurator
模組支援透過 Thrift 傳輸的 Jaeger 格式。
solr.xml
中 TracerConfigurator
的設定如下所示
<solr>
<tracerConfig name="tracerConfig" class="org.apache.solr.opentelemetry.OtelTracerConfigurator" />
</solr>
如果缺少 <tracerConfig>
,TracerConfigurator
將嘗試擷取在 io.opentracing.util.GlobalTracer
中註冊的 Tracer
執行個體。透過這樣做,某些後端(例如 DataDog)開箱即用,因為 datadog-java-agent 使用 Javaagent 在 io.opentracing.util.GlobalTracer
中註冊 Tracer
。
開放遙測模組
此模組支援業界標準的 OpenTelemetry (簡稱 "OTEL") 追蹤,並公開一個追蹤器設定器,可以在 solr.xml
的 <tracerConfig>
標籤中啟用,如下所示:
<tracerConfig name="tracerConfig" class="org.apache.solr.opentelemetry.OtelTracerConfigurator"/>
除了修改 solr.xml
檔案外,如果存在系統屬性 otel.service.name
或環境變數 OTEL_SERVICE_NAME
,也會啟用 OTEL
追蹤器。追蹤器要運作,仍然需要啟用 opentelemetry
模組。
使用系統屬性 -Dsolr.modules=opentelemetry
或環境變數 SOLR_MODULES=opentelemetry
來啟用模組。
設定
追蹤器可以透過環境變數或 Java 系統屬性進行設定,請參閱 OTEL SDK 環境變數 和 Java SDK 自動設定。
預設設定會使用 gRPC 將追蹤傳送到在 localhost 上執行的收集器,並使用 W3C TraceContext 來傳播追蹤 ID。以下是預設啟用的環境設定:
OTEL_SDK_DISABLED=false
OTEL_SERVICE_NAME=solr
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=localhost:4317
OTEL_TRACES_SAMPLER=parentbased_always_on
OTEL_PROPAGATORS=tracecontext,baggage
假設您想將追蹤傳送到遠端的 OTEL 收集器,並使用 10% 的取樣率。可以使用以下設定完成:
OTEL_EXPORTER_OTLP_ENDPOINT=my-remote-collector:4317
OTEL_TRACES_SAMPLER=parentbased_traceidratio
OTEL_TRACES_SAMPLER_ARG=0.1
使用系統屬性的等效設定如下:
SOLR_OPTS=-Dotel.exporter.otlp.endpoint=my-remote-collector:4317 -Dotel.traces.sampler=parentbased_traceidratio -Dotel.traces.sampler.arg=0.1
若要將自訂標籤新增至追蹤,請使用 OTEL_RESOURCE_ATTRIBUTES
。
OTEL_RESOURCE_ATTRIBUTES="application=OnlineBanking,exampleKey=exampleValue"
有關所有設定選項的詳細資訊,請參閱 OTEL 文件。此版本的 Solr 使用 OpenTelemetry SDK v1.40.0。
Jaeger 追蹤器模組
此模組自 Solr 9.2 起已棄用,並將在 10 版中移除。使用者應遷移至 OpenTelemetry。 |
模組 jagertracer-configurator
提供設定 Jaeger 追蹤器的預設實作。使用系統屬性 -Dsolr.modules=jaegertracer-configurator
或環境變數 SOLR_MODULES=jaegertracer-configurator
來啟用模組。
如需更多關於可用的取樣器的資訊,請參閱 https://jaeger.dev.org.tw/docs/sampling/#client-sampling-configuration。
然後在 solr.xml
中設定 Jaeger 追蹤器,如下所示:
<tracerConfig name="tracerConfig" class="org.apache.solr.jaeger.JaegerTracerConfigurator" />
XML 中沒有設定元素;相反地,這個第三方系統是使用系統屬性或環境變數來設定的。完整清單請參閱 Jaeger-README。
例如,若要使用機率取樣器,您可以設定以下環境變數:
export JAEGER_SAMPLER_TYPE=probabilistic
或系統屬性:
bin/solr start -DJAEGER_SAMPLER_TYPE=probabilistic