久しぶりにSplunkについて考えることがあったのですが、ふと、Splunk に入っているログを検索して、指定したフィールドのみ画面に表示させることができるのか確認したいとおもったので実際にやってみました。
最初は fields というコマンドを利用すればできるんじゃないかなと思いましたが、実はそれでは思ったとおりにはならず、table を使うことで実現できることが分かりました。
1.フィールドの抽出
Splunk に取り込まれているログに対してフィールドを抽出(指定と言ったほうがわかりやすい?)するには、以下の手順で行います。
1-1. 任意のログを検索し、フィールドの抽出を開始
フィールドを抽出したいログを検索し、表示されたログの左端にある”>”のマーク(クリックすると下向きになる)をクリックします。
その後、「イベントアクション」のプルダウンから「フィールドの抽出」を選択します。
1-2. フィールドの抽出方法として「正規表現」を選択
特定の場所だけ抽出したい場合は「正規表現」が良いと思われます。
1-3. フィールドの選択
画面に表示されたサンプルログからフィールドとして抽出したい場所をマウスで選択し、「フィールド名」を設定後、「Add Extraction」ボタンを押します。
1-4. フィールド抽出状況の確認
「Add Extraction」ボタンを押すと各ログに対する抽出結果が表示されます。
通常は問題ないと思いますが、もし適切に抽出されていない場所があれば、抽出結果の右に表示される”×”を押せば、除外してくれるのではないかと思います。
1-5. フィールド抽出設定の保存
最後に設定を確認し「終了」ボタンを押せばフィールドの抽出は完了です。
2.検索結果をfieldsコマンドに渡してみる
それでは先ほど抽出した「dst_ip」フィールドを利用し、検索結果を編集してみます。
まずは、検索結果について”|”を利用して fields コマンドに渡した場合です。
実行したSPL文は以下の通りです。
sourcetype="fgt_traffic" | fields src_ip, dst_ip
そして以下が実行結果です。
見ての通り、ログの表示部分にはすべてのログが表示されたままになっています。
変わったのは、左ペインのフィールド名のリストが fieldsで指定した”src_ip”と”dst_ip”になっただけです。
たしかに fields で指定しないとたくさんのフィールド名が表示されてしまうので、必要はフィールドだけリストに表示したいという場合は便利なコマンドですね。
3.検索結果をtableコマンドに渡してみる
そして次にtableコマンドに渡してみました。実行したSPL文は以下の通りです。
sourcetype="fgt_traffic" | table src_ip, dst_ip
そしてこれが実行結果です。
そう、私がやりたかったのはこれです。指定したフィールドの情報だけSplunkの画面に表示させることができました。
なお、fields と table の実行結果を眺めていてふと気がついたのですが、よくみるとサーチ文の下のメニューが fields の場合は「イベント」、table の場合は「統計情報」となっていますね。
久しぶりにSplunkをさわったら、REST APIを使ったサーチもしてみたいなという欲求が出てきたので、また機会を見つけてやってみたいと思います。
コメントを残す