烏克蘭國旗 我們與烏克蘭的朋友和同事站在一起。為了在他們需要時支持烏克蘭,請瀏覽此頁面

部署

版本  1.62最新

另請參閱


主要的 Jaeger 後端元件以 Docker 映像的形式發佈在Docker Hub外部連結Quay外部連結

元件Docker HubQuay
jaeger-all-in-onehub.docker.com/r/jaegertracing/all-in-one/外部連結quay.io/repository/jaegertracing/all-in-one外部連結
jaeger-agenthub.docker.com/r/jaegertracing/jaeger-agent/外部連結quay.io/repository/jaegertracing/jaeger-agent外部連結
jaeger-collectorhub.docker.com/r/jaegertracing/jaeger-collector/外部連結quay.io/repository/jaegertracing/jaeger-collector外部連結
jaeger-queryhub.docker.com/r/jaegertracing/jaeger-query/外部連結quay.io/repository/jaegertracing/jaeger-query外部連結
jaeger-ingesterhub.docker.com/r/jaegertracing/jaeger-ingester/external linkquay.io/repository/jaegertracing/jaeger-ingesterexternal link
jaeger-remote-storagehub.docker.com/r/jaegertracing/jaeger-remote-storage/external linkquay.io/repository/jaegertracing/jaeger-remote-storageexternal link

上面列出的鏡像是主要發布版本。大多數組件都有額外發布的映像

  • ${component}-debug 映像包含 Delve 除錯器
  • ${component}-snapshot 映像是從每個提交的主分支頂端發布的,允許測試未發布的版本
  • ${component}-debug-snapshot 包含 Delve 除錯器的快照映像

有用於使用以下項目執行 Jaeger 的協調範本

組態選項

Jaeger 二進位檔可以使用多種方式配置(依優先順序遞減排列)

  • 命令列引數,
  • 環境變數,
  • JSON、TOML、YAML、HCL 或 Java 屬性格式的組態檔。

若要查看完整選項清單,請使用 help 命令執行二進位檔,或參閱 CLI 旗標頁面以取得更多資訊。只有在 *選取儲存類型時*,才會列出特定於特定儲存後端的選項。例如,若要查看具有 Cassandra 儲存的收集器中的所有可用選項

$ docker run --rm \
    -e SPAN_STORAGE_TYPE=cassandra \
    jaegertracing/jaeger-collector:1.62.0 \
    help

為了透過環境變數提供組態參數,請尋找個別的命令列選項,並將其名稱轉換為 UPPER_SNAKE_CASE,例如

命令列選項環境變數
--cassandra.connections-per-hostCASSANDRA_CONNECTIONS_PER_HOST
--metrics-backendMETRICS_BACKEND

All-in-one

Jaeger all-in-one 是一種特殊的發行版本,它將三個 Jaeger 組件,代理程式收集器查詢服務/UI,組合在單一二進位檔或容器映像中。它適用於單節點部署,其中您的追蹤量很小,足以由單一執行個體處理。依預設,all-in-one 會以 memory 儲存開始,這表示它會在重新啟動時遺失所有資料。所有其他 span 儲存後端 也可以與 all-in-one 搭配使用,但 memorybadger 是 all-in-one 專有的,因為它們無法在執行個體之間共用。

All-in-one 會接聽與它所包含的組件相同的埠(如下所述),但管理埠除外。

通訊協定功能
14269HTTP管理埠:位於 / 的健康狀態檢查和位於 /metrics 的度量
## make sure to expose only the ports you use in your deployment scenario!
docker run -d --name jaeger \
  -e COLLECTOR_OTLP_ENABLED=true \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14250:14250 \
  -p 14268:14268 \
  -p 14269:14269 \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.62.0

您可以瀏覽至 https://127.0.0.1:16686 來存取 Jaeger UI。

代理程式

jaeger-agent棄用external link 。OpenTelemetry 資料可以從 OpenTelemetry SDK(配備 OTLP 匯出器)直接傳送至 jaeger-collector。請參閱 架構 頁面以取得替代的部署選項。

jaeger-agent 設計為透過 UDP 接收 Thrift 格式的追蹤資料,並在本機的每個主機上執行,作為主機代理程式/精靈或應用程式 sidecar。jaeger-agent 會公開下列埠

通訊協定功能
6831UDP接受大多數目前 Jaeger 用戶端使用的 compact Thrift 通訊協定中的 jaeger.thriftexternal link
6832UDP接受 Node.js Jaeger 用戶端使用的 binary Thrift 通訊協定中的 jaeger.thriftexternal link(因為 thriftrwexternal link npm 套件不支援 compact 通訊協定)。
5778HTTP提供 SDK 組態,即位於 /sampling 的取樣策略(請參閱 遠端取樣)。
5775UDP接受 compact Thrift 通訊協定中的 zipkin.thriftexternal link(已棄用;僅由非常舊的 Jaeger 用戶端使用,約在 2016 年)。
14271HTTP管理埠:位於 / 的健康狀態檢查和位於 /metrics 的度量。

它可以直接在主機上或透過 Docker 執行,如下所示

## make sure to expose only the ports you use in your deployment scenario!
docker run \
  --rm \
  -p6831:6831/udp \
  -p6832:6832/udp \
  -p5778:5778/tcp \
  -p5775:5775/udp \
  jaegertracing/jaeger-agent:1.62.0

探索系統整合

jaeger-agent 可以點對點連線到單一 jaeger-collector 位址,該位址可以由另一個基礎結構元件(例如 DNS)跨多個 jaeger-collector 進行負載平衡。也可以使用 jaeger-collector 位址的靜態清單來配置 jaeger-agent

在 Docker 上,可以使用如下的命令

docker run \
  --rm \
  -p5775:5775/udp \
  -p6831:6831/udp \
  -p6832:6832/udp \
  -p5778:5778/tcp \
  jaegertracing/jaeger-agent:1.62.0 \
  --reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250

使用 gRPC 時,您有數個負載平衡和名稱解析選項

  • 單一連線且無負載平衡。如果您指定單一 host:port,這會是預設值。(範例:--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250
  • 主機名稱的靜態清單和循環配置資源負載平衡。這是您使用逗號分隔的位址清單所取得的。(範例:reporter.grpc.host-port=jaeger-collector1:14250,jaeger-collector2:14250,jaeger-collector3:14250
  • 動態 DNS 解析和循環式負載平衡。若要取得此行為,請在位址前加上 dns:///,gRPC 將嘗試使用 SRV 記錄(用於外部負載平衡外部連結)、TXT 記錄(用於服務設定外部連結)和 A 記錄來解析主機名稱。請參閱gRPC 名稱解析文件外部連結dns_resolver.go 實作外部連結 以取得更多資訊。(範例:--reporter.grpc.host-port=dns:///jaeger-collector.jaeger-infra.svc:14250

代理程式層級標籤

Jaeger 支援代理程式層級標籤,這些標籤可以新增到通過 jaeger-agent 的所有 span 的程序標籤中。此功能透過命令列旗標 --agent.tags=key1=value1,key2=value2,...,keyn=valuen 支援。標籤也可以透過環境旗標設定,例如 - --agent.tags=key=${envFlag:defaultValue} - 如果未設定,標籤值將設定為 envFlag 環境金鑰的值和 defaultValue

收集器

jaeger-collector 是無狀態的,因此可以平行執行多個 jaeger-collector 執行個體。jaeger-collector 幾乎不需要任何組態,除了儲存位置(例如 --cassandra.keyspace--cassandra.servers 選項)或 Elasticsearch 叢集的位置(透過 --es.server-urls),具體取決於指定的儲存類型。請參閱CLI 旗標以取得所有命令列選項。

在預設設定中,jaeger-collector 會公開下列埠

通訊協定端點功能
4317gRPC不適用接受 OpenTelemetry OTLP 格式外部連結 (Protobuf) 的追蹤。
4318HTTP/v1/traces接受 OpenTelemetry OTLP 格式外部連結 (Protobuf 和 JSON) 的追蹤。
14268HTTP/api/sampling提供取樣原則(請參閱遠端取樣)。
/api/traces接受使用 binary thrift 協定的 jaeger.thrift外部連結 格式的 span (POST)。
14269HTTP/管理埠:健康檢查 (GET)。
/metricsPrometheus 樣式度量 (GET)。
9411HTTP/api/v1/spans/api/v2/spans接受 Thrift、JSON 和 Proto 格式的 Zipkin span(預設停用)。
14250gRPC不適用jaeger-agent 使用,以 model.proto外部連結 Protobuf 格式傳送 span。

Ingester

jaeger-ingester 是一項服務,可從 Kafka 主題讀取 span 資料,並將其寫入另一個儲存後端(Elasticsearch 或 Cassandra)。

通訊協定功能
14270HTTP管理埠:位於 / 的健康狀態檢查和位於 /metrics 的度量

若要檢視所有公開的組態選項,請執行下列命令

docker run \
  -e SPAN_STORAGE_TYPE=cassandra \
  jaegertracing/jaeger-ingester:1.62.0
  --help

查詢服務與 UI

jaeger-query 提供 API 端點和 React/Javascript UI。此服務是無狀態的,通常會在負載平衡器(例如 NGINX外部連結)後方執行。

在預設設定中,jaeger-query 服務會公開下列埠

通訊協定功能
16685gRPCProtobuf/gRPC QueryService外部連結
16686HTTP/api/* 端點和位於 / 的 Jaeger UI
16687HTTP管理埠:位於 / 的健康狀態檢查和位於 /metrics 的度量

最小部署範例 (Elasticsearch 後端)

docker run -d --rm \
  -p 16685:16685 \
  -p 16686:16686 \
  -p 16687:16687 \
  -e SPAN_STORAGE_TYPE=elasticsearch \
  -e ES_SERVER_URLS=http://<ES_SERVER_IP>:<ES_SERVER_PORT> \
  jaegertracing/jaeger-query:1.62.0

時鐘偏差調整

Jaeger 後端會合併通常在不同主機上執行的應用程式的追蹤資料。主機上的硬體時鐘通常會發生相對漂移,稱為時鐘偏差效應外部連結。時鐘偏差可能會讓追蹤難以理解,例如,當伺服器 span 的開始時間可能早於用戶端 span 時,這是不可能的。jaeger-query 服務實作了時鐘偏差調整演算法(程式碼外部連結)來修正時鐘漂移,使用有關 span 之間因果關係的知識。所有調整過的 span 在 UI 中都會顯示警告,其中提供套用至其時間戳記的確切時鐘偏差 delta。

有時,這些調整本身會使追蹤難以理解。例如,當在父 span 的範圍內重新定位伺服器 span 時,Jaeger 不知道請求和回應延遲之間的確切關係,因此它會假設它們相等,並將子 span 放置在父 span 的中間(請參閱問題 #961外部連結)。

jaeger-query 服務支援組態旗標 --query.max-clock-skew-adjustment,以控制允許的時鐘偏差調整量。將此參數設定為零 (0s) 會完全停用時鐘偏差調整。此設定適用於從指定查詢服務擷取的所有追蹤。有一個開放的工單 #197外部連結,以支援直接在 UI 中切換調整的開關。

UI 基底路徑

所有 jaeger-query HTTP 路徑的基本路徑可以設定為非根值,例如 /jaeger 會導致所有 UI URL 都以 /jaeger 開頭。當在反向代理後方執行 jaeger-query 時,這會很有用。

基本路徑可以透過 --query.base-path 命令列參數或 QUERY_BASE_PATH 環境變數進行設定。

UI 自訂與嵌入

請參閱專用的前端/UI 頁面

遠端儲存 (元件)

jaeger-remote-storage 實作了 遠端儲存 gRPC API外部連結 並將其代理到其中一個常規的 Jaeger 後端。當我們想要執行 Jaeger 元件的完整部署時(例如,分離的收集器和查詢服務),但使用單節點的儲存後端(如記憶體儲存或 Badger)時,它會很有用。如果沒有遠端儲存,單節點後端只能與 all-in-one 一起使用,因為它們無法在多個進程之間共享。

在預設設定下,此服務會監聽下列連接埠

通訊協定功能
17271gRPC遠端儲存 API外部連結
17270HTTP管理埠:位於 / 的健康狀態檢查和位於 /metrics 的度量

Span 儲存後端

Jaeger 需要永久的儲存後端。Cassandra 和 Elasticsearch/OpenSearch 是主要支援的分散式儲存後端。其他後端在這裡討論外部連結

儲存類型可以透過 SPAN_STORAGE_TYPE 環境變數傳遞。有效值為 cassandraelasticsearchkafka(僅作為緩衝區)、badgermemory

從 1.6.0 版本開始,可以同時使用多個儲存類型,方法是將有效的類型以逗號分隔的清單提供給 SPAN_STORAGE_TYPE 環境變數。請務必注意,所有列出的儲存類型都用於寫入,但只有清單中的第一個類型會用於讀取和封存。

對於大規模的生產部署,Jaeger 團隊建議使用 OpenSearch 後端而不是 Cassandra

記憶體

記憶體內儲存不適用於生產工作負載。它旨在作為快速入門的簡單解決方案,一旦進程退出,資料就會遺失。

預設情況下,記憶體中儲存的追蹤數量沒有限制,但可以透過 --memory.max-traces 傳遞整數值來建立限制。

Badger - 本機儲存

  • 自 Jaeger v1.9 起

Badger外部連結 是一個嵌入式的本機儲存,僅適用於 all-in-one 發行版。預設情況下,它會使用暫存檔案系統作為臨時儲存。可以使用 --badger.ephemeral=false 選項覆寫此行為。

docker run \
  -e SPAN_STORAGE_TYPE=badger \
  -e BADGER_EPHEMERAL=false \
  -e BADGER_DIRECTORY_VALUE=/badger/data \
  -e BADGER_DIRECTORY_KEY=/badger/key \
  -v <storage_dir_on_host>:/badger \
  -p 16686:16686 \
  jaegertracing/all-in-one:1.62.0

Cassandra

  • 支援的版本:4.x、5.x

部署 Cassandra 本身不在我們的文件範圍內。一個良好的文件來源是 Apache Cassandra 文件外部連結

設定

最小設定
docker run \
  -e SPAN_STORAGE_TYPE=cassandra \
  -e CASSANDRA_SERVERS=<...> \
  jaegertracing/jaeger-collector:1.62.0

注意:允許在 CASSANDRA_SERVERS 中使用空白字元。例如:為了更好的可讀性,伺服器可以作為 `CASSANDRA_SERVERS=“1.2.3.4, 5.6.7.8”` 傳遞。

所有選項

若要檢視完整設定選項清單,您可以執行下列命令

docker run \
  -e SPAN_STORAGE_TYPE=cassandra  \
  jaegertracing/jaeger-collector:1.62.0 \
  --help

Schema 指令碼

提供了一個指令碼,用於使用 Cassandra 的互動式 Shell cqlsh外部連結 初始化 Cassandra keyspace 和 schema

MODE=test sh ./plugin/storage/cassandra/schema/create.sh | cqlsh

或使用已發佈的 Docker 映像檔 (請確保提供正確的 IP 位址)

docker run \
  -e CQLSH_HOST={server IP address}  \
  jaegertracing/jaeger-cassandra-schema:1.62.0

對於生產部署,請將 MODE=prod DATACENTER={datacenter} 引數傳遞給指令碼,其中 {datacenter} 是 Cassandra 設定/網路拓撲中使用的名稱。

指令碼也允許覆寫 TTL、keyspace 名稱、複製因子等等。執行不帶引數的指令碼,以檢視完整辨識的參數清單。

注意:請參閱 README外部連結 以取得有關 Cassandra schema 管理的更多詳細資訊。

TLS 支援

只要您已正確設定 Cassandra 叢集,Jaeger 就支援 TLS 用戶端到節點連線。在例如使用 cqlsh 驗證之後,您可以像這樣設定收集器和查詢

docker run \
  -e CASSANDRA_SERVERS=<...> \
  -e CASSANDRA_TLS=true \
  -e CASSANDRA_TLS_SERVER_NAME="CN-in-certificate" \
  -e CASSANDRA_TLS_KEY=<path to client key file> \
  -e CASSANDRA_TLS_CERT=<path to client cert file> \
  -e CASSANDRA_TLS_CA=<path to your CA cert file> \
  jaegertracing/jaeger-collector:1.62.0

Schema 工具也支援 TLS。您需要建立一個自訂的 cqlshrc 檔案,如下所示

# Creating schema in a cassandra cluster requiring client TLS certificates.
#
# Create a volume for the schema docker container containing four files:
# cqlshrc: this file
# ca-cert: the cert authority for your keys
# client-key: the keyfile for your client
# client-cert: the cert file matching client-key
#
# if there is any sort of DNS mismatch and you want to ignore server validation
# issues, then uncomment validate = false below.
#
# When running the container, map this volume to /root/.cassandra and set the
# environment variable CQLSH_SSL=--ssl
[ssl]
certfile = ~/.cassandra/ca-cert
userkey = ~/.cassandra/client-key
usercert = ~/.cassandra/client-cert
# validate = false

相容的後端

Elasticsearch

  • 自 Jaeger v0.6.0 起支援
  • 支援的 ES 版本:7.x、8.x (自 Jaeger v1.52.0 起)

Elasticsearch 版本會從根/ping 端點自動擷取。根據此版本,Jaeger 會使用相容的索引對應和 Elasticsearch REST API。可以透過 --es.version= 旗標明確提供版本。

Elasticsearch 除了安裝並執行 Elasticsearch外部連結 之外,不需要其他初始化步驟。一旦它開始執行,請將正確的組態值傳遞給 jaeger-collectorjaeger-query

設定

最小設定
docker run \
  -e SPAN_STORAGE_TYPE=elasticsearch \
  -e ES_SERVER_URLS=<...> \
  jaegertracing/jaeger-collector:1.62.0
所有選項

若要檢視完整設定選項清單,您可以執行下列命令

docker run \
  -e SPAN_STORAGE_TYPE=elasticsearch \
  jaegertracing/jaeger-collector:1.62.0 \
  --help

Elasticsearch 索引的分片和複本

分片和複本是需要特別注意的組態值,因為這是於索引建立時決定的。 這篇文章外部連結 提供了更多關於如何選擇分片數量以進行最佳化的資訊。

Elasticsearch 輪換

Elasticsearch 輪換外部連結 是一種索引管理策略,可最佳化分配給索引的資源使用。例如,不包含任何資料的索引仍然會分配分片,反之,單一索引可能包含比其他索引多得多的資料。Jaeger 預設將資料儲存在每日索引中,這可能無法最佳化資源利用。可以透過 --es.use-aliases=true 啟用輪換功能。

輪換可讓您根據以下一個或多個條件設定何時輪換至新的索引

輪換索引管理策略比使用預設的每日索引更複雜,並且需要一個初始化作業來準備儲存空間,以及兩個 cron 作業來管理索引。

若要深入了解 Jaeger 中的輪換索引管理,請參閱此文章外部連結

如需自動輪換,請參閱Elasticsearch ILM 支援

初始化

下列命令透過建立索引別名、索引和索引範本,為輪換部署準備 Elasticsearch

docker run -it --rm --net=host jaegertracing/jaeger-es-rollover:latest init https://127.0.0.1:9200 # <1>

如果您需要初始化封存儲存空間,請新增 -e ARCHIVE=true

初始化後,可以使用 --es.use-aliases=true 部署 Jaeger。

輪換至新的索引

下一步是定期執行輪換 API,它會根據提供的條件將寫入別名輪換至新的索引。此命令還會將新的索引新增至讀取別名,以使新資料可供搜尋。

docker run -it --rm --net=host -e CONDITIONS='{"max_age": "2d"}' jaegertracing/jaeger-es-rollover:latest rollover  https://127.0.0.1:9200 # <1>

<1> 如果目前寫入索引的存留時間超過 2 天,則此命令會將別名輪換至新的索引。如需更多條件,請參閱 Elasticsearch 文件外部連結

下一步是從讀取別名中移除舊索引。這表示舊資料將無法用於搜尋。這模擬了預設每日索引部署中使用的 --es.max-span-age 旗標的行為。此步驟可能是選用的,而且舊索引可以簡單地在下一步中由索引清理器移除。

docker run -it --rm --net=host -e UNIT=days -e UNIT_COUNT=7 jaegertracing/jaeger-es-rollover:latest lookback  https://127.0.0.1:9200 # <1>

<1> 從讀取別名中移除存留時間超過 7 天的索引。

移除舊資料

可以使用 jaeger-es-index-cleaner 移除歷史資料,這也用於每日索引。

docker run -it --rm --net=host -e ROLLOVER=true jaegertracing/jaeger-es-index-cleaner:latest 14 https://127.0.0.1:9200 # <1>

<1> 移除存留時間超過 14 天的索引。

Elasticsearch ILM 支援

Elasticsearch ILM外部連結 根據效能、復原能力和保留需求自動管理索引。

例如

  • 依大小(位元組或文件數)或存留時間輪換至新的索引、封存先前的索引
  • 刪除過時的索引以強制執行資料保留標準
啟用 ILM 支援
  • 在 elasticsearch 中建立一個名為 jaeger-ilm-policy 的 ILM 原則。

    例如,下列原則會在「active」索引超過 1 分鐘時輪換,並刪除存留時間超過 2 分鐘的索引。

    curl -X PUT https://127.0.0.1:9200/_ilm/policy/jaeger-ilm-policy \
    -H 'Content-Type: application/json; charset=utf-8' \
    --data-binary @- << EOF
    {
      "policy": {
        "phases": {
          "hot": {
            "min_age": "0ms",
            "actions": {
              "rollover": {
                "max_age": "1m"
              },
              "set_priority": {
                "priority": 100
              }
            }
          },
          "delete": {
            "min_age": "2m",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }
    EOF
    
  • 執行帶有 ES_USE_ILM=true 的 elasticsearch 初始化工具

    docker run -it --rm --net=host -e ES_USE_ILM=true jaegertracing/jaeger-es-rollover:latest init https://127.0.0.1:9200 # <1>
    

    <1> 如果您需要初始化封存儲存空間,請新增 -e ARCHIVE=true

    使用 ILM 支援進行初始化時,請確保預先在 Elasticsearch 中建立了一個名為 jaeger-ilm-policy 的 ILM 原則(請參閱上一個步驟),否則將顯示以下錯誤訊息

    「Elasticsearch 中不存在 ILM 原則 jaeger-ilm-policy。請建立它並重新執行初始化」

    初始化後,使用 --es.use-ilm=true--es.use-aliases=true 部署 Jaeger。

升級 Elasticsearch 版本

Elasticsearch 定義了線路和索引相容性版本。索引相容性定義了節點可以讀取資料的最低版本。例如,Elasticsearch 8 可以讀取由 Elasticsearch 7 建立的索引,但即使它們使用相同的索引對應,它也無法讀取由 Elasticsearch 6 建立的索引。因此,從 Elasticsearch 7 升級到 8 不需要任何資料移轉。但是,從 Elasticsearch 6 升級到 8 必須透過 Elasticsearch 7 完成,並等待移除或明確地重新索引 ES 6.x 建立的索引。

請參閱 Elasticsearch 文件外部連結,以了解線路和索引相容性版本。一般而言,此資訊可以從 root/ping REST 端點取得。

重新索引

當從 Elasticsearch 6 升級到 8(通過 Elasticsearch 7)時,可以使用手動重新索引,而無需等待 Elasticsearch 6 建立的索引被移除。

  1. 將所有 span 索引重新索引到帶有 -1 後綴的新索引。

    curl -ivX POST -H "Content-Type: application/json" https://127.0.0.1:9200/_reindex -d @reindex.json
    {
      "source": {
        "index": "jaeger-span-*"
      },
      "dest": {
        "index": "jaeger-span"
      },
      "script": {
        "lang": "painless",
        "source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length())) + '-1'"
      }
    }
    
  2. 刪除具有舊映射的索引。

    curl -ivX DELETE -H "Content-Type: application/json" https://127.0.0.1:9200/jaeger-span-\*,-\*-1
    
  3. 建立不帶 -1 後綴的索引。

    curl -ivX POST -H "Content-Type: application/json" https://127.0.0.1:9200/_reindex -d @reindex.json
    {
      "source": {
        "index": "jaeger-span-*"
      },
      "dest": {
        "index": "jaeger-span"
      },
      "script": {
        "lang": "painless",
        "source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length() - 2))"
      }
    }
    
  4. 移除帶後綴的索引。

    curl -ivX DELETE -H "Content-Type: application/json" https://127.0.0.1:9200/jaeger-span-\*-1
    

針對其他 Jaeger 索引,類似地執行上述指令。

可能存在更有效的遷移程序。請與社群分享任何發現。

Kafka

  • 自 Jaeger 1.6.0 版本起支援
  • 支援的 Kafka 版本:0.9+

Kafka 可以作為收集器和實際儲存之間的中介緩衝區。jaeger-collector 配置了 SPAN_STORAGE_TYPE=kafka,使其將所有收到的 spans 寫入 Kafka 主題。 jaeger-ingester 用於從 Kafka 讀取並將 spans 儲存到另一個儲存後端(Elasticsearch 或 Cassandra)。

寫入 Kafka 對於建立後處理資料管線特別有用。

設定

最小設定
docker run \
  -e SPAN_STORAGE_TYPE=kafka \
  -e KAFKA_PRODUCER_BROKERS=<...> \
  -e KAFKA_TOPIC=<...> \
  jaegertracing/jaeger-collector:1.62.0
所有選項

若要檢視完整設定選項清單,您可以執行下列命令

docker run \
  -e SPAN_STORAGE_TYPE=kafka \
  jaegertracing/jaeger-collector:1.62.0 \
  --help

主題 & 分區

除非您的 Kafka 叢集設定為自動建立主題,否則您需要提前建立它。您可以參考 Kafka 快速入門文件外部連結 來了解如何建立。

您可以在 官方文件外部連結 中找到有關主題和分區的更多資訊。這篇文章外部連結 提供了有關如何選擇分區數量的更多詳細資訊。

遠端儲存

Jaeger 支援基於 gRPC 的 遠端儲存 API外部連結,允許使用專案不直接支援的自訂儲存後端來擴展 Jaeger 生態系統。這些儲存後端可以部署為遠端 gRPC 伺服器(自 Jaeger v1.30 起)。從 v1.58 開始,將不再支援作為 sidecar 外掛程式的較舊部署模式。

要將遠端儲存作為 Jaeger 儲存後端使用,請使用 grpc 作為儲存類型並指定遠端 gRPC 伺服器位址。有關更多資訊,請參閱 jaeger/plugin/storage/grpc外部連結

範例

docker run \
  -e SPAN_STORAGE_TYPE=grpc \
  -e GRPC_STORAGE_SERVER=<...> \
  jaegertracing/all-in-one:1.62.0

已知的遠端儲存後端

指標儲存後端

Jaeger Query 能夠從儲存後端查詢匯總的 R.E.D 指標,並在 監控標籤 上視覺化這些指標。應該強調的是,所設定的指標儲存類型僅用於讀取,因此僅適用於 Jaeger Query 元件(以及包含 Jaeger Query 的 All In One)。

儲存類型可以通過 METRICS_STORAGE_TYPE 環境變數傳遞。有效值為:prometheus

Prometheus

Jaeger Query 支援任何與 PromQL 相容的後端。Julius Volz 在以下網址編譯了這些後端的列表:https://promlabs.com/blog/2020/11/26/an-update-on-promql-compatibility-across-vendors外部連結

設定

最小設定
docker run \
  -e METRICS_STORAGE_TYPE=prometheus \
  jaegertracing/jaeger-query:1.62.0
所有選項

若要檢視完整設定選項清單,您可以執行下列命令

docker run \
  -e METRICS_STORAGE_TYPE=prometheus \
  jaegertracing/jaeger-query:1.62.0 \
  --help

TLS 支援

只要您已正確 設定您的 Prometheus 伺服器外部連結,Jaeger 就支援 TLS 用戶端到 Prometheus 伺服器的連線。您可以像這樣設定 jaeger-query

docker run \
  -e METRICS_STORAGE_TYPE=prometheus \
  -e PROMETHEUS_SERVER_URL=<...> \
  -e PROMETHEUS_TLS_ENABLED=true \
  -e PROMETHEUS_TLS_CA=<path to your CA cert file> \
  jaegertracing/jaeger-query:1.62.0

用於服務相依性的匯總任務

生產部署需要一個外部程序來匯總資料並建立服務之間的相依性連結。專案 spark-dependencies外部連結 是一個 Spark 任務,它會推導出相依性連結並將其直接寫入儲存中。