Splunkクイックガイド:クエリー、SPL、正規表現、コマンド
Tips & Tricks Stephen WattsこのSplunkクイックリファレンスガイドでは、Splunk CloudとSplunk Enterpriseの主要な概念、機能、およびSPL (Splunk Processing Language)の基本としてよく使われるコマンドと関数をご紹介します。
概念
イベント
イベントは、特定のタイムスタンプに関連付けられた一連の値を示します。イベントは単一のデータエントリであり、一つ、もしくは複数の行から構成されます。イベントの形式には、テキストドキュメント、設定ファイル、スタックトレース全体などがあります。次の例は、Webアクティビティログに記録されたイベントです。
173.26.34.223 - - [01/ Mar/2021:12:05:27 -0700] “GET /trade/ app?action=logout HTTP/1.1” 200 2953
理論的に関連があるもののタイムスタンプが異なる複数のイベントをグループ化し、サーチできるようにしたのがトランザクションです。トランザクションを使えば、複数のステップで構成されるビジネス関連のアクティビティを表すことができます。たとえば、オンラインショッピングサイトで1つのユーザーセッションに関連付けられたすべてのイベントをまとめることができます。
メトリクス
メトリクスの各データポイントは、タイムスタンプと1つ以上の測定値で構成されます。ディメンションが含まれることもあります。測定値は、メトリクス名と、対応する数値で構成されます。ディメンションは、測定値に関する追加情報を示します。メトリクスのデータポイントの例を次に示します。
Timestamp: 08-05-2020 16:26:42.025-0700
Measurement: metric_name:os.cpu. user=42.12, metric_name:max.size. kb=345
Dimensions: hq=us-west-1, group=queue, name=azd
メトリクスのデータポイントとイベントは、どちらもサーチ可能で相互に関連付けることができますが、異なるタイプのインデックスに保存されます。
ホストは、イベントの生成元である物理デバイスまたは仮想デバイスを指します。特定のデバイスで生成されたすべてのデータを検索するために使用できます。ソースは、特定のイベントの収集元であるファイル、ディレクトリ、データストリーム、その他の情報源を指します。ソースタイプは、ソースの分類を示し、一般的なフォーマット以外に、ユーザーが定義したフォーマットを使うこともできます。一般的なソースタイプには、HTTP WebサーバーログやWindowsイベントログなどがあります。
ホスト、ソース、ソースタイプ
異なるソースのイベントが同じソースタイプに分類されることもあります。たとえば、次のイベントのソースはファイルです。
source=/var/log/messages
次のイベントのソースはsyslog入力ポートです。
source=UDP:514
これらは同じソースタイプに分類されることがあります。
sourcetype=linux_syslog
フィールド
フィールドは、イベント同士を区別するための、サーチ可能な名前と値の組み合わせです。イベントによって、そのイベントが持つフィールドとフィールド値は異なります。フィールドを使えば、目的のイベントを取得するための独自のサーチを作成できます。Splunkソフトウェアでは、インデックス時やサーチ時にイベントを処理する際、設定ファイルの定義やユーザー定義のパターンに基づいてフィールドが自動的に抽出されます。
フィールド抽出機能を使うと、サーチ時に、正規表現または区切り文字(スペース、カンマなど)に基づいてフィールドが自動的に抽出、検証されます。
タグ
タグは、特定のフィールド値を含むイベントをサーチできるようにするためのナレッジオブジェクトです。イベントタイプ、ホスト、ソース、ソースタイプなど、任意のフィールド/値の組み合わせに1つ以上のタグを割り当てることができます。タグを使えば、関連するフィールド値をグループ化したり、IPアドレスやID番号にわかりやすい名前を付けて、抽象的なフィールド値を追跡したりできます。
Index-TimeとSearch-Time
Index-Timeには、まずホスト上のソースからデータが読み込まれ、適切なソースタイプに分類されます。次に、タイムスタンプが抽出され、データが解析されて個々のイベントにまとめられます。改行ルールが適用され、サーチ結果を表示するためのイベントのセグメント化が行われます。各イベントがディスク上のインデックスに書き込まれ、サーチリクエストに応じて取得できるようになります。
Search-Timeにおいて、サーチが開始されると、インデックスされたイベントがディスクから取得されます。その際に、イベントの生テキストから フィールド が抽出されます。
インデックス
Splunkソフトウェアにデータを追加すると、データが解析されて個々のイベントにまとめられ、タイムスタンプが抽出されて、改行ルールが適用されます。その後、これらのイベントが インデックス に保存されます。入力ごとに新しいインデックスを作成できます。データごとに個別のインデックスを作成することが可能であり、デフォルトでは、データは「メイン」インデックスに保存されます。サーチでは1つ以上のインデックスからイベントが取得されます。
コア機能
サーチ
「サーチ」は、Splunkソフトウェアでユーザーがデータを活用するときに最もよく使われる方法です。サーチを記述してインデックスからイベントを取得する、統計コマンドを使ってメトリクスを計算しレポートを生成する、ローリングタイムウィンドウ内で特定の条件で検索を行う、データのパターンを特定する、今後のトレンドを予測するなどの操作ができます。イベントに対してこれらの操作を実行するときはSplunk Search Process Language (SPL™)を使います。サーチは、レポートとして保存したり、ダッシュボードの強化に使用したりできます。
レポート
「レポート」は、保存済みのサーチです。必要に応じてアドホックで実行することも、スケジュールを指定して定期的に実行することもできます。スケジュールレポートを設定して、結果が特定の条件に合致したときにアラートを生成することもできます。レポートは、ダッシュボードにパネルとして追加できます。
ダッシュボード
「ダッシュボード」は、一連のパネルで構成され、各パネルには、サーチボックス、フィールド、データの視覚オブジェクトなどのモジュールが含まれます。ダッシュボードパネルは通常、保存済みサーチと連携しています。実行済みのサーチの結果を表示することも、リアルタイムサーチのデータを表示することもできます。
アラート
「アラート」は、サーチ結果が特定の条件に合致したときに生成されます。ヒストリカルサーチ(過去データに対するサーチ)とリアルタイムサーチ(リアルタイムで取り込んでいるデータに対するサーチ)のどちらでもアラートを使用できます。アラートが発生したときに、指定したメールアドレスにアラート情報を送信する、Webリソースにアラート情報を投稿するなどのアクションを実行することもできます。
その他の機能
データセット
Splunkでは、さまざまな種類の「データセット」を作成および管理できます。データセットの種類には、ルックアップ、データモデル、テーブルなどがあります。テーブルデータセットでは、特定のビジネス用途に合わせて必要なイベントデータをまとめ、整理して表示できます。テーブルビューを使えば、高度なサーチコマンドをUIエディターでのシンプルな操作に変換して、強力なテーブルデータセットを定義および管理できます。このツールは、Splunk SPLに詳しくなくても簡単に使えます。
データモデル
「データモデル」は、データセットを階層化したものです。サーチでは、データモデル全体を参照することも、データモデル内の特定のデータセットのみを参照することもできます。さらに、データモデルにはデータモデル高速化を適用できるため、サーチのパフォーマンスが大幅に向上します。データモデル高速化がダッシュボードパネルや基本的なオンデマンドレポートを強化するためによく使われるのはそのためです。
App
「App」は、設定、ナレッジオブジェクト、ユーザー設計のビューやダッシュボードを組み合わせたものです。Appを使えば、Unix/Windowsシステム管理者、ネットワークセキュリティ担当者、Webサイト管理者、ビジネスアナリストといった、様々なチームが持つ固有のニーズに合わせてSplunk環境を拡張できます。Splunk EnterpriseまたはSplunk Cloud上で複数のAppを同時に実行できます。
分散サーチ
「分散サーチ」は、サーチの管理/表示層とインデックス/サーチデータ取得層を分離することにより、導入環境をスケールする機能です。水平方向の拡張性を確保することで、パフォーマンスの向上、インデックスされたデータへのアクセス制御、地理的に分散したデータの管理が可能になります。
システムコンポーネント
フォワーダー
データを他のSplunkインスタンスに転送するSplunkインスタンスです。
インデクサー
データをインデックスするSplunkインスタンスです。インデクサーは生データをイベントに変換し、イベントをインデックスに保存します。加えて、サーチリクエストに応じて、インデックスされたデータをサーチする役目も担います。サーチヘッドからの指示でサーチを実行するインデクサーを「サーチピア」と言います。
サーチヘッド
分散サーチ環境で、サーチピアにサーチリクエストを振り分け、結果を結合してユーザーに返す役割を担うSplunkインスタンスです。サーチのみを行い、インデックスを行わない場合は、通常、「専用サーチヘッド」と呼ばれます。
Search Processing Language (SPL)
Splunkサーチは、一連のコマンドと引数で構成されます。パイプ文字「|」で連結することで、コマンドを連続して実行することができます。パイプは、コマンドの出力を次(右側)のコマンドに渡すことを示します。
search | command1 arguments1 | command2 arguments2 | ...
サーチパイプラインの先頭には、インデックスからイベントを取得することを示す「search」コマンドがあります。これは暗黙のコマンドであり、省略可能です。サーチリクエストには、キーワード、引用符で囲んだフレーズ、ブール式、ワイルドカード、フィールド名/値ペア、比較演算子を含めることができます。複数の検索語句の間は暗黙のAND演算子によってつながれます。サーチの例を次に示します。
sourcetype=access_combined error | top 5 uri
このサーチでは、インデックス済みのWebアクティビティイベントの中から、「error」という語が含まれるイベントが取得され、その中で出現頻度が高い上位5件のURI値が返されます。
サーチコマンドでは、不要なイベントのフィルタリング、詳細情報の抽出、値の計算、インデックス済みデータの変換や統計分析などの操作も行えます。インデックスから取得したサーチ結果は、動的に作成されたテーブルのようなものです。各行にはインデックス済みイベントが収められ、各列にはフィールド値が収められます。サーチコマンドを使うたびに、テーブルの内容が再定義されます。たとえば、イベントをフィルタリングするサーチコマンドでは一部の行が取り除かれ、フィールドを抽出するサーチコマンドでは列が追加されます。
時間修飾子
サーチ修飾子「latest」と「earliest」を使って、イベントを取得する時間範囲をサーチ内で指定できます。時間の長さ(整数と単位)とオプションとしてスナップ(丸める)した時間単位を示す文字列を使って、時間を相対的に指定することもできます。その構文は次のとおりです。
[+|-]<integer><unit>@<snap_time_ unit>
次に例を示します。
“error earliest=-1d@d latest=h@h”
このサーチでは、前日の始め(00:00:00)にスナップした時点から、当日の最も近い正時にスナップした時点までの間に発生した、「error」という語を含むイベントを取得しています。
スナップでは、指定した単位で時間が切り捨てられます。たとえば、現在が11:59:00の場合、時間単位(@h)でスナップすると、12:00:00ではなく11:00:00になります。また、特定の曜日にスナップすることもでき、日曜日の場合は「@w0」、月曜日の場合は「@w1」などと指定します。
サブサーチ
「サブサーチ」を使うと、サブサーチ内でのサーチ実行結果を親コマンドに引数として返すことができます。角かっこ([])で囲んだ部分がサブサーチとして先に実行されます。たとえば、次のサーチでは、サブサーチを使って、直近でログインエラーが発生したユーザーのすべてのsyslogイベントを検索しています。
sourcetype=syslog [ search login error | return 1 user ]
サーチの最適化
サーチを高速化するために重要なのは、まず、ディスクから取り出すデータを必要最小限に抑えることです。その後、そのデータをできるだけ早い段階でフィルタリングして、処理する必要のあるデータをできる限り減らします。
まとめてサーチすることが少ない複数のタイプのデータがある場合、個別のインデックスに分離すべきです。たとえば、Webデータを1つのインデックスにまとめ、ファイアウォールデータを別のインデックスにまとめます。
時間範囲を必要最小限にとどめるのも効果的です。たとえば、「-1w」ではなく「-1h」や、「earliest=-1d」と指定します。
サーチの内容は可能な限り具体的に指定するべきです。たとえば、「*error*」ではなく「fatal_error」と指定します。
ダッシュボードのポストプロセスサーチ、サマリーインデックス化、レポート高速化、データモデル高速化などの機能も活用できます。
機械学習機能
Splunkの機械学習機能は、ポートフォリオ全体に統合され、Splunk Machine Learning Toolkit、Streaming MLフレームワーク、Splunk Machine Learning Environmentなどのツールを通じて各種のSplunkソリューションに組み込まれています。
SPL2
一部のSplunk製品では、SPLの新バージョンである「SPL2」が使われています。SPL2では、サーチ言語がより使いやすくなり、ほとんど使われないコマンドが廃止され、コマンド構文の一貫性が向上しています。詳しくは、SPL2サーチリファレンスをご覧ください。
サーチ例
\d\d\d-\d\d-
\d\d\d\d
\d\d\d-?\d\d-
?\d\d\d\d
(?P<var>
...)
(?P<ssn>\d\d\d-
\d\d-\d\d\d\d)
(?: ...
)
関連記事

表の行と列を入れ替えるSPL

Splunkが提供する無料トレーニング:オブザーバビリティ編 (1)
