クエリの種類
クエリは実行方式により、大きく4つのタイプに分類されます。
アドホッククエリ
アドホッククエリとは、ユーザーが任意のタイミングで任意のクエリ文を作成し実行するクエリを指します。ログプレッソのWebコンソールのログクエリメニュー、SSH経由で接続したログプレッソターミナル、またはログプレッソクライアントSDKを利用して、プログラム的に任意のタイミングでクエリを実行できます。
長時間実行されるクエリをバックグラウンドに切り替えることで、現在のセッションからログアウトしたり接続が切断された場合でも、クエリは継続して実行されます。その後、該当クエリをフォアグラウンドに戻してクエリ結果を確認することができます。
リアルタイムクエリ
リアルタイムクエリは、実行時点から指定した時間範囲だけ待機し、リアルタイムで受信されるデータを対象に処理を行うクエリです。ロガーでログを収集する際、ストリームクエリの結果が出力される際、テーブルにデータが入力される際など、リアルタイムで該当データを入力として受信しながらクエリを実行できます。これはディスクに全データを保存せず、即座にデータをサンプリングして分析する際に有用です。
リアルタイムクエリコマンドとしては、logger、stream、tableがあります。
ストリームクエリ
ストリームクエリは、システムが終了するまでリアルタイムデータソースに対してバックグラウンドで無限に実行されるクエリです。ストリームクエリは、連続的に入力順序を保証しながらクエリを実行する特徴を持っています。
ストリームクエリは、入力として3種類のストリームタイプをサポートします。
ロガー
ロガー(logger)を通じて収集されたすべてのログがストリームクエリの入力となります。データ収集 > ロガーからロガーを構成できます。
テーブル
ロガーや書き込みコマンドなどがテーブルに新しい行(row)を書き込むたびに、ストリームクエリがその行を入力として受信します。これはリレーショナルデータベース(RDBMS)で使用されるトリガーの進化形として考えることができます。設定 > テーブルからテーブルを構成できます。
ストリームクエリ
他のストリームクエリの出力を入力として利用することができます。例えば、非構造化ログに対してパース処理を行うストリームクエリを前段に配置し、そのストリームクエリを入力として複数の分析用ストリームクエリを配置するシナリオが考えられます。ストリームクエリは、ストリーミングモードとリフレッシュモードに区分されます。
- ストリーミングモード
- データが入力されるとすぐにレコード単位で処理して出力します。クエリを構成するすべてのコマンドがストリーミング可能なコマンドでなければなりません。ストリーミング可能なコマンドとは、レコードを1件ずつ独立して処理できるコマンドで、フィルタリング(
search)、フィールド計算(eval)、パース(rex、parse系)、フィールド選択(fields)、ルックアップ(lookup)などが該当します。 - リフレッシュモード
- 指定した間隔ごとに入力完了シグナルを送信してクエリを再実行します。全入力が完了して初めて動作する集計コマンド(
stats、sort、dedup、topなど)を使用できます。
Sonarでは、2つのモードが検知シナリオの種類として公開されます。リアルタイム検知シナリオはストリーミングモードで、バッチ検知シナリオは60秒間隔のリフレッシュモードで動作します。したがって、シナリオで使用したいクエリに集計コマンドが含まれている場合は、バッチ検知シナリオとして作成する必要があります。
ストリームクエリを利用して、特定時間単位の統計を算出し中間統計テーブルに保存し、このテーブルをクエリして最終的な統計結果を取得するように設計すれば、ディスクをほとんど使用せずに大容量データストリームに対してリアルタイムで統計結果を算出できます。特に、Groovyスクリプトを活用することで、高度に複雑なリアルタイム分析や加工が可能です。
登録済みのストリームクエリの一覧と実行状態は、system-streams コマンドで確認できます。
スケジュールクエリ
スケジュールクエリは、Cron式で定義したスケジュールに従って自動的に実行されるクエリです。クエリの実行結果はオプションで保存でき、アラート条件に一致する結果をメールで送信することも可能です。
分析 > スケジュールクエリからスケジュールクエリを登録・管理できます。詳細な使い方については、スケジュールクエリのドキュメントを参照してください。