第5章 Web コンソールからの Jaeger ストリーミングストラテジーのデプロイ
streaming デプロイメントストラテジーは、実稼働環境向けのストラテジーであり、トレースデータの長期の保存が重要となり、より拡張性および高可用性のあるアーキテクチャーも必要になります。
streaming ストラテジーは、Collector とストレージ (Elasticsearch) 間に配置されるストリーミング機能を提供します。これにより、負荷の高い状況でストレージに加わる圧力を軽減し、他のトレースの後処理機能がストリーミングプラットフォーム (Kafka) から直接リアルタイムのスパンデータを利用できるようにします。
ストリーミングストラテジーには、AMQ Streams 用の追加の Red Hat サブスクリプションが必要です。AMQ Streams サブスクリプションをお持ちでない場合は、営業担当者にお問い合わせください。
前提条件
- AMQ Streams Operator がインストールされている必要があります。バージョン 1.4.0 以降を使用している場合は、セルフプロビジョニングを使用できます。それ以外の場合は、Kafka インスタンスを作成する必要があります。
- Jaeger Operator がインストールされている必要があります。
- Jaeger インストールのカスタマイズ方法についての手順を確認します。
-
cluster-adminロールを持つアカウントが必要です。
手順
-
cluster-adminロールを持つユーザーとして OpenShift Container Platform Web コンソールにログインします。 新規プロジェクト (例:
jaeger-system) を作成します。-
Home
Projects に移動します。 - Create Project をクリックします。
-
Name フィールドに
jaeger-systemを入力します。 - Create をクリックします。
-
Home
-
Operators
Installed Operators に移動します。 -
必要な場合は、Project メニューから
jaeger-systemを選択します。Operator が新規プロジェクトにコピーされるまでに数分待機する必要がある場合があります。 - Jaeger Operator をクリックします。Overview タブの Provided APIs で、Operator は単一リンクを提供します。
- Jaeger で Create Instance をクリックします。
-
Create Jaeger ページで、デフォルトの
all-in-oneyaml テキストをストリーミング用の YAML 設定に置き換えます。以下は例になります。
例: jaeger-streaming.yaml ファイル
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: jaeger-streaming
spec:
strategy: streaming
collector:
options:
kafka:
producer:
topic: jaeger-spans
#Note: If brokers are not defined,AMQStreams 1.4.0+ will self-provision Kafka.
brokers: my-cluster-kafka-brokers.kafka:9092
storage:
type: elasticsearch
ingester:
options:
kafka:
consumer:
topic: jaeger-spans
brokers: my-cluster-kafka-brokers.kafka:9092
- Create をクリックして Jaeger インスタンスを作成します。
-
Jaegers ページで、 Jaeger インスタンスの名前 (例:
jaeger-streaming) をクリックします。 - Jaeger Details ページで、Resources タブをクリックします。すべての Pod のステータスが Running になるまで待機してから続行します。
5.1. CLI からの Jaeger ストリーミングのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
以下の手順に従って、コマンドラインから Jaeger のインスタンスを作成します。
前提条件
- OpenShift Jaeger Operator がインストールされ、検証済みです。
-
OpenShift CLI (
oc) へのアクセスが可能です。 -
cluster-adminロールを持つアカウントが必要です。
手順
cluster-adminロールを持つユーザーとして OpenShift Container Platform CLI にログインします。$ oc login https://{HOSTNAME}:8443jaeger-systemという名前の新規プロジェクトを作成します。$ oc new-project jaeger-system-
直前の手順のサンプルファイルのテキストが含まれる
jaeger-streaming.yamlという名前のカスタムリソースファイルを作成します。 以下のコマンドを実行して Jaeger をデプロイします。
$ oc create -n jaeger-system -f jaeger-streaming.yaml以下のコマンドを実行して、インストールプロセス時の Pod の進捗を確認します。
$ oc get pods -n jaeger-system -wインストールプロセスが完了すると、以下のような出力が表示されるはずです。
NAME READY STATUS RESTARTS AGE elasticsearch-cdm-jaegersystemjaegerstreaming-1-697b66d6fcztcnn 2/2 Running 0 5m40s elasticsearch-cdm-jaegersystemjaegerstreaming-2-5f4b95c78b9gckz 2/2 Running 0 5m37s elasticsearch-cdm-jaegersystemjaegerstreaming-3-7b6d964576nnz97 2/2 Running 0 5m5s jaeger-streaming-collector-6f6db7f99f-rtcfm 1/1 Running 0 80s jaeger-streaming-entity-operator-6b6d67cc99-4lm9q 3/3 Running 2 2m18s jaeger-streaming-ingester-7d479847f8-5h8kc 1/1 Running 0 80s jaeger-streaming-kafka-0 2/2 Running 0 3m1s jaeger-streaming-query-65bf5bb854-ncnc7 3/3 Running 0 80s jaeger-streaming-zookeeper-0 2/2 Running 0 3m39s
5.1.1. Jaeger デプロイメントのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
5.1.1.1. Jaeger のデフォルト設定オプション リンクのコピーリンクがクリップボードにコピーされました!
Jaeger カスタムリソース (CR) は、Jaeger リソースの作成時に使用されるアーキテクチャーおよび設定を定義します。これらのパラメーターを変更して、Jaeger 実装をビジネスニーズに合わせてカスタマイズできます。
Jaeger 汎用 YAML の例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: name
spec:
strategy: <deployment_strategy>
allInOne:
options: {}
resources: {}
agent:
options: {}
resources: {}
collector:
options: {}
resources: {}
sampling:
options: {}
storage:
type:
options: {}
query:
options: {}
resources: {}
ingester:
options: {}
resources: {}
options: {}
| パラメーター | 説明 | 値 | デフォルト値 |
|---|---|---|---|
|
| オブジェクトの作成時に使用する Application Program Interface のバージョン。 |
|
|
|
| 作成する Kubernetes オブジェクトの種類を定義します。 |
| |
|
|
|
OpenShift は | |
|
| オブジェクトの名前。 | Jaeger インスタンスの名前。 |
|
|
| 作成するオブジェクトの仕様。 | Jaeger インスタンスのすべての設定パラメーターが含まれます。(Jaeger コンポーネントすべてに) 共通する定義が必要な場合、これは仕様ノードで定義されます。定義が個別のコンポーネントに関連する場合、これは spec/<component> ノードの下に配置されます。 | 該当なし |
|
| Jaeger デプロイメントストラテジー |
|
|
|
| allInOne イメージはエージェント、Collector、Query、Ingester, Jaeger UI を単一 Pod にデプロイするため、このデプロイメントの設定は、コンポーネント設定を allInOne パラメーターの下でネストする必要があります。 | ||
|
| Jaeger エージェントを定義する設定オプション。 | ||
|
| Jaeger Collector を定義する設定オプション。 | ||
|
| トレース用のサンプリングストラテジーを定義する設定オプション。 | ||
|
|
ストレージを定義する設定オプション。すべてのストレージ関連のオプションは、 | ||
|
| Query サービスを定義する設定オプション。 | ||
|
| Ingester サービスを定義する設定オプション。 |
以下の YAML サンプルは、デフォルト設定を使用して Jaeger インスタンスを作成するための最小要件です。
最小要件の jaeger-all-in-one.yaml の例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: jaeger-all-in-one-inmemory
5.1.1.2. Jaeger Collector 設定オプション リンクのコピーリンクがクリップボードにコピーされました!
Jaeger Collector は、トレーサーによってキャプチャーされたスパンを受信し、production ストラテジーを使用する場合はそれらを永続ストレージ (Elasticsearch) に書き込み、streaming ストラテジーを使用する場合は AMQ Streams に書き込むコンポーネントです。
コレクターはステートレスであるため、Jaeger Collector のインスタンスの多くは並行して実行できます。Elasticsearch クラスターの場所を除き、Collector では設定がほとんど必要ありません。
| パラメーター | 説明 | 値 |
|---|---|---|
| キューからプルするワーカーの数。 |
整数 (例: |
| Collector キューのサイズ。 |
整数 (例: |
| 作成する Collector レプリカの数を指定します。 |
整数 (例: |
| パラメーター | 説明 | 値 |
|---|---|---|
| Jaeger Collector を定義する設定オプション。 | |
|
| プロデューサーのラベル |
| メッセージを生成するために Collector によって使用される Kafka 設定を特定します。ブローカーが指定されていない場合で、AMQ Streams 1.4.0+ がインストールされている場合、Jaeger は Kafka をセルフプロビジョニングします。 | |
| コレクターのロギングレベル。 |
|
5.1.1.3. Jaeger サンプリング設定オプション リンクのコピーリンクがクリップボードにコピーされました!
この Operator は、リモートサンプラーを使用するように設定されているトレーサーに提供されるサンプリングストラテジーを定義するために使用できます。
すべてのトレースが生成される間に、それらの一部のみがサンプリングされます。トレースをサンプリングすると、追加の処理や保存のためにトレースにマークが付けられます。
これは、トレースがサンプリングの意思決定が行われる際に Istio プロキシーによって開始されている場合には関連がありません。Jaeger サンプリングの意思決定は、トレースが Jaeger トレーサーを使用してアプリケーションによって開始される場合にのみ関連します。
サービスがトレースコンテキストが含まれていない要求を受信すると、Jaeger トレーサーは新しいトレースを開始し、これにランダムなトレース ID を割り当て、現在インストールされているサンプリングストラテジーに基づいてサンプリングの意思決定を行います。サンプリングの意思決定はトレース内の後続のすべての要求に伝播され、他のサービスが再度サンプリングの意思決定を行わないようにします。
Jaeger ライブラリーは以下のサンプラーをサポートします。
- Constant: サンプラーは、すべてのトレースについて常に同じ意思決定を行います。これは、すべてのトレースをサンプリングするか (sampling.param=1)、またはそれらのいずれもサンプリングしません (sampling.param=0)。
-
Probabilistic: サンプラーは、
sampling.paramプロパティーの値と等しいサンプリングの確率で、ランダムなサンプリングの意思決定を行います。たとえば、sampling.param=0.1 の場合に、約 10 の内 1 のトレースがサンプリングされます。 - Rate Limiting: サンプラーは、リーキーバケット (leaky bucket) レートリミッターを使用して、トレースが一定のレートでサンプリングされるようにします。たとえば、sampling.param=2.0 の場合、1 秒あたり 2 トレースの割合で要求がサンプリングされます。
- Remote: サンプラーは Jaeger エージェントで現在のサービスで使用する適切なサンプリングストラテジーを参照します。これにより、Jaeger バックエンドの中央設定からサービス内のサンプリングストラテジーを制御できます。
| パラメーター | 説明 | 値 | デフォルト値 |
|---|---|---|---|
| トレース用のサンプリングストラテジーを定義する設定オプション。 | ||
| 使用するサンプリングストラテジー。(上記の説明を参照してください。) |
有効な値は |
|
| 選択したサンプリングストラテジーのパラメーター(上記の例を参照してください。) | 10 進値および整数値 (0、.1、1、10) | 該当なし |
この例では、トレースインスタンスをサンプリングする確率が 50% の、確率的なデフォルトサンプリングストラテジーを定義します。
確率的なサンプリングの例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: with-sampling
spec:
strategy: allInOne
sampling:
options:
default_strategy:
type: probabilistic
param: 50
5.1.1.4. Jaeger ストレージ設定オプション リンクのコピーリンクがクリップボードにコピーされました!
spec:storage の下で Collector、Ingester、および Query サービスのストレージを設定します。これらの各コンポーネントの複数のインスタンスは、パフォーマンスと回復性を確保するために、必要に応じてプロビジョニングできます。
制限
- namespace ごとにセルフプロビジョニングされた Elasticsearch インスタンスを持つ 1 つの Jaeger のみを使用できます。
- namespace ごとに 1 つの Elasticsearch のみを使用できます。
- Jaeger で OpenShift Jaeger ロギング Elasticsearch インスタンスを共有したり、再利用したりすることはできません。Elasticsearch クラスターは単一の Jaeger インスタンスの専用のクラスターになります。
Elasticsearch を OpenShift ロギングの一部としてインストールしている場合、Jaeger Operator はインストールされた Elasticsearch Operator を使用してストレージをプロビジョニングできます。
| パラメーター | 説明 | 値 | デフォルト値 |
|---|---|---|---|
| ストレージを定義する設定オプション。 | ||
| デプロイメントに使用するストレージのタイプ。 |
|
|
| パラメーター | 説明 | 値 | デフォルト値 |
|---|---|---|---|
| |||
| Elasticsearch インスタンスの URL。 |
Elasticsearch サーバーの完全修飾ドメイン名。 | |
| Elasticsearch のクエリーごとに 1 度に取得するスパンの最大数。 | 10000 | |
| Elasticsearch のスパンについての最大ルックバック。 | 72h0m0s | |
|
シークレットの名前 (例: | 該当なし | |
| Elasticsearch のスニファー設定。クライアントはスニッフィングプロセスを使用してすべてのノードを自動的に検索します。デフォルトでは無効にされています。 |
|
|
| クエリーに使用されるタイムアウト。ゼロに設定するとタイムアウトはありません。 | 0s | |
|
Elasticsearch で必要なユーザー名。Basic 認証は、指定されている場合に CA も読み込みます。 | ||
|
Elasticsearch で必要なパスワード。 | ||
| 主要な Elasticsearch バージョン。指定されていない場合、値は Elasticsearch から自動検出されます。 | 0 | |
| |||
| Elasticsearch ノードの数。高可用性を確保するには、少なくとも 3 つのノードを使用します。スプリットブレインの問題が生じる可能性があるため、2 つのノードを使用しないでください。 | 整数値。例: 概念実証用 = 1、最小デプロイメント = 3 | 3 |
| ご使用の環境設定に基づく、要求に対する中央処理単位の数。 | コアまたはミリコアで指定されます (例: 200m、0.5、1)。例: 概念実証用 = 500m、最小デプロイメント = 1 | 1 |
| ご使用の環境設定に基づく、要求に使用できるメモリー。 | バイト単位で指定されます (例: 200Ki、50Mi、5Gi)。例: 概念実証用 = 1Gi、最小デプロイメント = 16Gi* | 16Gi |
| ご使用の環境設定に基づく、中央処理単位数の制限。 | コアまたはミリコアで指定されます (例: 200m、0.5、1)。例: 概念実証用 = 500m、最小デプロイメント = 1 | |
| ご使用の環境設定に基づく、利用可能なメモリー制限。 | バイト単位で指定されます (例: 200Ki、50Mi、5Gi)。例: 概念実証用 = 1Gi、最小デプロイメント = 16Gi* | |
| 各 Elasticsearch ノードはこれより低い値のメモリー設定でも動作しますが、これは実稼働環境でのデプロイメントには推奨されません。実稼働環境で使用する場合、デフォルトで各 Pod に割り当てる設定を 16Gi 未満にすることはできず、Pod ごとに最大 64Gi を割り当てることを推奨します。 | ||
| |||
| データレプリケーションポリシーは、Elasticsearch シャードをクラスター内のデータノードにレプリケートする方法を定義します。指定されていない場合、Jaeger Operator はノード数に基づいて最も適切なレプリケーションを自動的に判別します。 |
| |
| Elasticsearch のインデックスごとのレプリカ数。 | 1 | |
| Elasticsearch のインデックスごとのシャード数。 | 5 | |
| |||
|
|
|
|
| Jaeger インデックスのオプションの接頭辞。たとえば、これを production に設定すると、production-jaeger-*という名前のインデックスが作成されます。 | ||
| Elasticsearch ストレージを使用する場合、デフォルトでジョブが作成され、古いトレースをインデックスからクリーンアップします。このパラメーターは、インデックスクリーナージョブを有効または無効にします。 |
|
|
| インデックスの削除を待機する日数。 | 整数値 |
|
| Elasticsearch インデックスを消去する頻度についてのスケジュールを定義します。 | cron 式 | "55 23 * * *" |
| 新規 Elasticsearch インデックスにロールオーバーする頻度についてのスケジュールを定義します。 | cron 式 | '*/30 * * * *' |
| |||
| バルクプロセッサーがディスクへの更新のコミットを決定する前にキューに追加できる要求の数。 | 1000 | |
|
| 200ms | |
| バルクプロセッサーがディスクへの更新をコミットするまでに一括要求が発生する可能性のあるバイト数。 | 5000000 | |
| 一括要求を受信し、Elasticsearch にコミットできるワーカーの数。 | 1 | |
| |||
| リモートサーバーの検証に使用される TLS 認証局 (CA) ファイルへのパス。 | デフォルトではシステムトラストストアを使用します。 | |
| リモートサーバーに対するこのプロセスの特定に使用される TLS 証明書ファイルへのパス。 | ||
| リモートサーバーと通信する際に、トランスポート層セキュリティー (TLS) を有効にします。デフォルトでは無効にされています。 |
|
|
| リモートサーバーに対するこのプロセスの特定に使用される TLS 秘密鍵ファイルへのパス。 | ||
| リモートサーバーの証明書の予想される TLS サーバー名を上書きします。 | ||
| ベアラートークンが含まれるファイルへのパス。このフラグは、指定されている場合は認証局 (CA) ファイルも読み込みます。 | ||
| |||
| バルクプロセッサーがディスクへの更新のコミットを決定する前にキューに追加できる要求の数。 | 0 | |
|
| 0s | |
| バルクプロセッサーがディスクへの更新をコミットするまでに一括要求が発生する可能性のあるバイト数。 | 0 | |
| 一括要求を受信し、Elasticsearch にコミットできるワーカーの数。 | 0 | |
|
|
|
|
| 追加ストレージを有効にします。 |
|
|
| Jaeger インデックスのオプションの接頭辞。たとえば、これを production に設定すると、production-jaeger-*という名前のインデックスが作成されます。 | ||
| Elasticsearch のクエリーごとに 1 度に取得するスパンの最大数。 | 0 | |
| Elasticsearch のスパンについての最大ルックバック。 | 0s | |
| Elasticsearch のインデックスごとのレプリカ数。 | 0 | |
| Elasticsearch のインデックスごとのシャード数。 | 0 | |
|
Elasticsearch で必要なパスワード。 | ||
|
Elasticsearch サーバーのコンマ区切りの一覧。完全修飾 URL(例: | ||
| Elasticsearch のスニファー設定。クライアントはスニッフィングプロセスを使用してすべてのノードを自動的に検索します。デフォルトでは無効にされています。 |
|
|
| クエリーに使用されるタイムアウト。ゼロに設定するとタイムアウトはありません。 | 0s | |
| リモートサーバーの検証に使用される TLS 認証局 (CA) ファイルへのパス。 | デフォルトではシステムトラストストアを使用します。 | |
| リモートサーバーに対するこのプロセスの特定に使用される TLS 証明書ファイルへのパス。 | ||
| リモートサーバーと通信する際に、トランスポート層セキュリティー (TLS) を有効にします。デフォルトでは無効にされています。 |
|
|
| リモートサーバーに対するこのプロセスの特定に使用される TLS 秘密鍵ファイルへのパス。 | ||
| リモートサーバーの証明書の予想される TLS サーバー名を上書きします。 | ||
| ベアラートークンが含まれるファイルへのパス。このフラグは、指定されている場合は認証局 (CA) ファイルも読み込みます。 | ||
|
Elasticsearch で必要なユーザー名。Basic 認証は、指定されている場合に CA も読み込みます。 | ||
| 主要な Elasticsearch バージョン。指定されていない場合、値は Elasticsearch から自動検出されます。 | 0 | |
実稼働ストレージの例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-prod
spec:
strategy: production
storage:
type: elasticsearch
elasticsearch:
nodeCount: 3
resources:
requests:
cpu: 1
memory: 16Gi
limits:
memory: 16Gi
ボリュームマウントを含むストレージの例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-prod
spec:
strategy: production
storage:
type: elasticsearch
options:
es:
server-urls: https://quickstart-es-http.default.svc:9200
index-prefix: my-prefix
tls:
ca: /es/certificates/ca.crt
secretName: jaeger-secret
volumeMounts:
- name: certificates
mountPath: /es/certificates/
readOnly: true
volumes:
- name: certificates
secret:
secretName: quickstart-es-http-certs-public
永続ストレージを含むストレージの例:
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-prod
spec:
strategy: production
storage:
type: elasticsearch
elasticsearch:
nodeCount: 1
storage:
storageClassName: gp2
size: 5Gi
resources:
requests:
cpu: 200m
memory: 4Gi
limits:
memory: 4Gi
redundancyPolicy: ZeroRedundancy
- 1
- 永続ストレージの設定。この場合、AWS
gp2のサイズは5Giです。値の指定がない場合、Jaeger はemptyDirを使用します。Elasticsearch Operator は、Jaeger インスタンスで削除されないPersistentVolumeClaimおよびPersistentVolumeをプロビジョニングします。同じ名前および namespace で Jaeger インスタンスを作成する場合は、同じボリュームをマウントできます。
5.1.1.5. Jaeger Query 設定オプション リンクのコピーリンクがクリップボードにコピーされました!
Query とは、ストレージからトレースを取得し、ユーザーインターフェイスをホストしてそれらを表示するサービスです。
| パラメーター | 説明 | 値 | デフォルト値 |
|---|---|---|---|
| Query サービスを定義する設定オプション。 | ||
| 追加の HTTP 応答ヘッダー。複数回指定できます。 | 形式: "Key: Value" | |
|
すべての jaeger-query HTTP ルートのベースパスは、root 以外の値に設定できます。たとえば、 | /{path} | |
| クエリーサービスのポート。 | 16686 | |
| Query のロギングレベル。 |
使用できる値は、 |
Query 設定の例
apiVersion: jaegertracing.io/v1
kind: "Jaeger"
metadata:
name: "my-jaeger"
spec:
strategy: allInOne
allInOne:
options:
log-level: debug
query:
base-path: /jaeger
5.1.1.6. Jaeger Ingester 設定オプション リンクのコピーリンクがクリップボードにコピーされました!
Ingester は、Kafka トピックから読み取り、別のストレージバックエンド (Elasticsearch) に書き込むサービスです。allInOne または production デプロイメントストラテジーを使用している場合は、Ingester サービスを設定する必要はありません。
| パラメーター | 説明 | 値 |
|---|---|---|
| Ingester が終了するまでメッセージを待機する間隔 (秒単位または分単位) を指定します。システムの初期化中にメッセージが到達されない場合に Ingester が終了しないようにするため、デッドロック間隔はデフォルトで無効に (0 に設定) されます。 |
分と秒 (例: |
| パラメーター | 説明 | 値 |
|---|---|---|
| Ingester サービスを定義する設定オプション。 | |
|
|
コンシューマーのラベル例: |
| メッセージを消費するために Ingester によって使用される Kafka 設定を特定します。 |
ブローカーのラベル (例: |
| Ingester のロギングレベル。 |
使用できる値は、 |
ストリーミング Collector および Ingester の例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simple-streaming
spec:
strategy: streaming
collector:
options:
kafka:
producer:
topic: jaeger-spans
brokers: my-cluster-kafka-brokers.kafka:9092
ingester:
options:
kafka:
consumer:
topic: jaeger-spans
brokers: my-cluster-kafka-brokers.kafka:9092
ingester:
deadlockInterval: 5
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
5.1.2. サイドカーコンテナーの挿入 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Jaeger は、アプリケーションの Pod 内のプロキシーサイドカーコンテナーを使用してエージェントを提供します。Jaeger Operator は Jaeger Agent サイドカーを Deployment ワークロードに挿入できます。自動のサイドカーコンテナー挿入を有効にしたり、手動で管理したりできます。