GrafanaとClickHouseを使用した可観測性
Grafanaは、ClickHouseの可観測性データのための最適な可視化ツールです。これは、Grafanaの公式ClickHouseプラグインを使用して実現されています。ユーザーは、こちらにあるインストール手順に従うことができます。
プラグインのV4では、ログとトレースが新しいクエリビルダー体験の中で第一級の市民として扱われています。これにより、SREはSQLクエリを書く必要が最小限に抑えられ、SQLベースの可観測性が簡素化され、この新興のパラダイムが前進しています。その一部として、プラグインの中心にはOpenTelemetry (OTel)が据えられており、これが今後数年間のSQLベースの可観測性及びデータ収集の基盤になると考えています。
OpenTelemetry統合
GrafanaでClickHouseのデータソースを設定すると、プラグインはユーザーがログとトレースのためのデフォルトのデータベースとテーブルを指定できるようにし、これらのテーブルがOTelスキーマに準拠しているかどうかを確認します。これにより、プラグインはGrafanaで正しくログとトレースをレンダリングするために必要なカラムを返すことができます。デフォルトのOTelスキーマに変更を加え、自分のカラム名を使用したい場合は、これを指定することが可能です。time(Timestamp
)、log level(SeverityText
)、message body(Body
)などのデフォルトOTelカラム名を使用する場合は、変更する必要はありません。
ユーザーはHTTPまたはネイティブプロトコルを通じてGrafanaをClickHouseに接続できます。後者は、Grafanaユーザーが発行する集計クエリにはあまり顕著ではない性能上の利点を提供します。対照的に、HTTPプロトコルは通常、ユーザーにとってプロキシや内省が簡単です。
ログが正しくレンダリングされるためには、ログ設定に時間、ログレベル、およびメッセージカラムが必要です。
トレース設定はやや複雑です(完全なリストはこちら)。ここで必要なカラムは、完全なトレースプロファイルを構築するための以降のクエリが抽象化できるようにするためです。これらのクエリはデータがOTelに似た構造であることを前提としているため、標準のスキーマから大きく逸脱するユーザーは、この機能を利用するためにビューを使用する必要があります。

設定が完了したら、ユーザーはGrafana Exploreに移動し、ログとトレースを検索し始めることができます。
ログ
Grafanaのログ要件に従う場合、ユーザーはクエリビルダーでQuery Type: Log
を選択し、Run Query
をクリックできます。クエリビルダーは、ログを一覧表示し、レンダリングされることを保証するクエリを作成します。

クエリビルダーは、ユーザーがSQLを書く必要を避けてクエリを修正する簡単な手段を提供します。キーワードを含むログを見つけることなどのフィルタリングは、クエリビルダーから実行できます。より複雑なクエリを書きたいユーザーは、SQLエディタに切り替えることができます。適切なカラムが返され、logs
がクエリタイプとして選択されている場合、結果はログとしてレンダリングされます。ログレンダリングに必要なカラムはこちらにリストされています。
ログからトレースへ
ログにトレースIDが含まれている場合、ユーザーは特定のログ行のトレースに移動することができます。

トレース
上記のログ体験と同様に、Grafanaがトレースをレンダリングするために要求するカラムが満たされている場合(例:OTelスキーマを使用)、クエリビルダーは必要なクエリを自動的に作成できます。Query Type: Traces
を選択し、Run Query
をクリックすると、次のようなクエリが生成され、実行されます(構成されたカラムに応じて - 以下はOTelの使用を前提としています)。
このクエリは、Grafanaが期待するカラム名を返し、以下に示すようにトレースのテーブルをレンダリングします。期間やその他のカラムでのフィルタリングは、SQLを書く必要なく実行できます。

より複雑なクエリを書きたいユーザーは、SQL Editor
に切り替えることができます。
トレース詳細の表示
上記に示すように、トレースIDはクリック可能なリンクとしてレンダリングされます。トレースIDをクリックすると、ユーザーはView Trace
リンクを介して関連するスパンを表示することを選択できます。これにより、必要な構造でスパンを取得するために次のクエリが発行され、結果がウォーターフォールとしてレンダリングされます。
上記のクエリが、トレースIDのルックアップを行うためにマテリアライズドビューotel_traces_trace_id_ts
を使用していることに注意してください。詳細についてはAccelerating Queries - Using Materialized views for lookupsを参照してください。

トレースからログへ
ログにトレースIDが含まれている場合、ユーザーはトレースから関連するログに移動できます。ログを表示するには、トレースIDをクリックし、View Logs
を選択します。これにより、デフォルトのOTelカラムを前提として次のクエリが発行されます。

ダッシュボード
ユーザーは、ClickHouseデータソースを使用してGrafanaでダッシュボードを構築できます。さらに詳しい情報は、GrafanaとClickHouseのデータソースドキュメントを推奨します。特にマクロの概念や変数についてです。
このプラグインは、OTel仕様に準拠したログとトレースデータ用の例示ダッシュボードである「Simple ClickHouse OTel dashboarding」を含む、いくつかの標準ダッシュボードを提供します。これには、ユーザーがOTelのデフォルトカラム名に準拠する必要があり、データソースの設定からインストールできます。

以下に、可視化を構築するための簡単なヒントをいくつか提供します。
時系列
統計と並んで、折れ線グラフは可観測性のユースケースで最も一般的な可視化形式です。ClickHouseプラグインは、クエリがdatetime
という名前のtime
と数値のカラムを返す場合、自動的に折れ線グラフをレンダリングします。例えば:

マルチラインチャート
次の条件を満たす場合、クエリのためにマルチラインチャートが自動的にレンダリングされます。
- フィールド1:エイリアスとしてのtimeを持つdatetimeフィールド
- フィールド2:グループ化のための値。これは文字列である必要があります。
- フィールド3+:メトリック値
例えば:

地理情報データの可視化
以前のセクションで示したように、IP辞書を使用して可観測性データに地理座標を付与することを検討しました。latitude
およびlongitude
のカラムを持っている場合、geohashEncode
関数を使用して可観測性を可視化できます。これにより、GrafanaのGeo Mapチャートに対応したジオハッシュが生成されます。クエリと可視化の例を以下に示します。
