OpenTelemetryを使用したClickHouseのトレース
OpenTelemetry は、分散アプリケーションからトレースやメトリクスを収集するためのオープンスタンダードです。ClickHouseはOpenTelemetryに対していくつかのサポートを提供しています。
ClickHouseへのトレースコンテキストの供給
ClickHouseは、W3Cの推奨事項 に記載されているトレースコンテキストHTTPヘッダーを受け付けます。また、ClickHouseサーバー間やクライアントとサーバー間の通信に使用されるネイティブプロトコルを通じてトレースコンテキストを受け取ります。手動テストの場合、トレースコンテキストヘッダーがTrace Contextの推奨に準拠している場合、clickhouse-client
に対して--opentelemetry-traceparent
および--opentelemetry-tracestate
フラグを使用して供給することができます。
親トレースコンテキストが供給されないか、提供されたトレースコンテキストが上記のW3C標準に準拠していない場合、ClickHouseは新しいトレースを開始できます。この確率は、opentelemetry_start_trace_probability設定によって制御されます。
トレースコンテキストの伝播
トレースコンテキストは、次のケースで下流のサービスに伝播されます:
-
Distributed テーブルエンジンを使用する際のリモートClickHouseサーバーへのクエリ。
-
url テーブル関数。トレースコンテキスト情報はHTTPヘッダーで送信されます。
ClickHouse自体のトレース
ClickHouseは、各クエリおよびクエリ実行のいくつかの段階(クエリの計画や分散クエリなど)に対して trace spans
を作成します。
有用となるためには、トレース情報はOpenTelemetryをサポートする監視システム(Jaeger や Prometheus など)にエクスポートされる必要があります。ClickHouseは特定の監視システムへの依存を避け、システムテーブルを通じてトレースデータのみを提供します。OpenTelemetryが標準で要求しているトレーススパン情報は、system.opentelemetry_span_logテーブルに保存されます。
このテーブルはサーバー構成で有効にする必要があります。デフォルトの設定ファイル config.xml
における opentelemetry_span_log
要素を参照してください。デフォルトで有効になっています。
タグや属性は、キーと値を含む2つの並列配列として保存されます。これらを操作するには ARRAY JOIN を使用してください。
クエリ設定のログ
log_query_settings 設定を有効にすると、クエリ実行中のクエリ設定の変更をログに記録できます。これが有効化されると、クエリ設定に対して行われた変更はすべてOpenTelemetryスパンログに記録されます。この機能は、本番環境においてクエリのパフォーマンスに影響を与える可能性のある設定変更を追跡するのに特に役立ちます。
監視システムとの統合
現時点では、ClickHouseから監視システムにトレースデータをエクスポートするための準備されたツールはありません。
テストのために、system.opentelemetry_span_log テーブル上にURLエンジンを使用したマテリアライズドビューを設定することでエクスポートを行うことができます。これにより、到着したログデータをトレースコレクターのHTTPエンドポイントにプッシュできます。例えば、最小限のスパンデータを http://localhost:9411
で動作しているZipkinインスタンスにZipkin v2 JSON形式でプッシュするには、次のようにします:
エラーが発生した場合、エラーが発生したログデータの一部分が静かに失われます。データが届かない場合は、サーバーログをチェックしてエラーメッセージを確認してください。