ClickHouse にトレースコンテキストを渡す
--opentelemetry-traceparent および --opentelemetry-tracestate フラグを使用して clickhouse-client に渡せます。
親トレースコンテキストが渡されていない場合、または渡されたトレースコンテキストが上記の W3C 標準に準拠していない場合、ClickHouse は新しいトレースを開始できます。このときの確率は、opentelemetry_start_trace_probability 設定で制御されます。
トレースコンテキストの伝播
- Distributed テーブルエンジンを使用する場合など、リモートの ClickHouse サーバーに対するクエリ。
- url テーブル関数。トレースコンテキスト情報は HTTP ヘッダーで送信されます。
ClickHouse Keeper リクエストのトレーシング
Keeper のトレーシングを有効にする
Keeper スパンの種類
zookeeper.create— 新しいノードを作成zookeeper.get— ノードデータを取得zookeeper.set— ノードデータを設定zookeeper.remove— ノードを削除zookeeper.list— 子ノードを一覧表示zookeeper.exists— ノードが存在するかどうかを確認zookeeper.multi— 複数の操作をアトミックに実行zookeeper.client.requests_queue— 送信前にリクエストがキューで待機した時間
keeper.receive_request— クライアントからのリクエストの受信とパースkeeper.dispatcher.requests_queue— ディスパッチャー内でのリクエストのキュー待ちkeeper.write.pre_commit— Raft commit 前の書き込みリクエストの前処理keeper.write.commit— Raft commit 後の書き込みリクエストの処理keeper.read.wait_for_write— 依存する書き込みの完了待ちとなっている読み取りリクエストkeeper.read.process— 読み取りリクエストの処理keeper.dispatcher.responses_queue— ディスパッチャー内でのレスポンスのキュー待ちkeeper.send_response— クライアントへのレスポンスの送信
サンプリングとパフォーマンス
ClickHouse 自体のトレーシング
trace spans を作成します。
このトレーシング情報を活用するには、Jaeger や Prometheus など、OpenTelemetry をサポートする監視システムにエクスポートする必要があります。ClickHouse は特定の監視システムへの依存を避けるため、トレーシングデータはシステムテーブル経由でのみ提供します。標準で必須とされている OpenTelemetry のトレーススパン情報は、system.opentelemetry_span_log テーブルに格納されます。
このテーブルはサーバー設定で有効にする必要があります。デフォルト設定ファイル config.xml の opentelemetry_span_log 要素を参照してください。これはデフォルトで有効になっています。
タグまたは属性は、キーと値を含む 2 つの並列 Array として保存されます。これらを扱うには ARRAY JOIN を使用してください。
Log-query-settings
監視システムとのインテグレーション
http://localhost:9411 で動作している Zipkin インスタンスに、Zipkin v2 JSON フォーマットで送信するには、次のようにします。