1. パイプ「|」でコマンドをつなぐ
SPL(Search Processing Language)の基本的な仕組みは、
パイプ(|)で複数のコマンドをつなぐことです。
これはUNIX/Linuxのシェルでコマンドをパイプでつなぐ発想とよく似ています。
あるコマンドが処理した結果を、次のコマンドが受け取って、さらに加工する ― この連結によって「絞り込む → 集計する → 並べ替える」といった一連の処理を1行で表現できます。
index=web status=404 | stats count by clientip | sort -count
この例は、(1)「webインデックスのステータス404」を絞り込み、
(2) それをstatsでクライアントIPごとに件数を数え、
(3) sortで件数の多い順に並べ替える、という3段階の処理を表しています。
2. 最初のsearchは省略できる
先ほどの例で、いきなりindex=web status=404と書き始めましたが、
これは本来searchというコマンドの処理です。
SPLでは、先頭のsearchコマンドは省略できるルールになっています。
つまり、次の2つはまったく同じ意味です。
index=web status=404
| search index=web status=404
普段は上の書き方(先頭のsearchを省略)で構いません。
この「暗黙のsearch」を知っておくと、SPLの構造が
「最初にsearchでデータを取り出し、以降のコマンドで加工していく」ものだと理解しやすくなります。
なお、パイプより後ろでもsearchコマンドは使えます。
集計した後の結果をさらに条件で絞り込みたいときなどに登場します。
3. データは左から右へ流れる
SPLを読むコツは、「左から右へデータが流れていく」とイメージすることです。 左端のsearchで取り出したイベントが、パイプを通るたびに絞り込まれたり、 件数や表の形に集計されたりしながら、次のコマンドへ渡されていきます。
index=web status>=400
| stats count by status, host
| sort -count
| head 10
このように改行してパイプごとに縦に並べると、処理の流れが読みやすくなります。 上から順に「エラー系のイベントを取り出す → ステータスとホストの組み合わせで数える → 多い順に並べる → 上位10件だけ残す」と、日本語に訳しながら読んでいくとよいでしょう。
4. コマンドの大分類
SPLのコマンドは数多くありますが、動作の性質でいくつかの種類に分けられます。 細かい分類は今は覚えなくて構いませんが、代表的な2種類だけ押さえておきましょう。
| 種類 | ざっくりした動き | 代表的なコマンド |
|---|---|---|
| Streaming(ストリーミング) | イベントを1件ずつ順番に処理する。件数はほぼ変わらない | search / eval / where |
| Transforming(変換) | イベント全体を集計し、表(統計)の形に作り変える | stats / top / timechart |
特にTransformingコマンドは、 個々のログを「グラフや表にできる集計結果」へと変える重要な役割を持ちます。 次の節でこのTransformingコマンドを具体的に学びます。
グラフや表を作るには、原則としてどこかで Transformingコマンドを通す必要があります。「searchだけではグラフにならない」と覚えておきましょう。
5. まとめ
- SPLはパイプ
|でコマンドを連結して処理を組み立てる - 先頭の
searchコマンドは省略できる(暗黙のsearch) - データは左から右へ流れる ― この順で読むと理解しやすい
- コマンドにはStreaming系とTransforming系があり、集計・可視化にはTransforming系が要となる