Splunkを使ってて面白い最大の理由(個人的な意見ですが)がサーチコマンドです。
いろいろなサーチコマンドを組み合わせてグラフィカルに表現できたときは楽しいですよね。
ということで、今回はSplunkサーチコマンドを紹介します。
はじめに
Splunkには合計約140のサーチコマンドがあります。
とはいえ、実際によく使うのは10〜20くらいのものなので、それらを押さえておけばたいていのことはできます。
Splunkサーチコマンドについて
ログを検索するだけではなく、整形したり集計するのに使います。
基本的な使い方はLinuxコマンドと同じで、パイプ(|)でつなげて、前のコマンドの出力が次のコマンドの入力になるイメージです。
例えば
sourcetype=access_combined | stats count by status | sort - count
という具合です。
コマンド紹介
stats
統計をとるコマンド。
一番よく使うといっても過言ではないコマンド。
count
やavg
、sum
といった関数を使って集計します。
by
句の後には、集計の単位となるフィールドを指定。
例)
... | stats avg(score) as avg_score by user_id
chart
こちらも統計をとるものでstats
と同じように関数を利用可能。
stats
との違いは、行・列の表形式にまとめてくれること。その際、over
句を使います。
over
が行に、by
が列になります。
例)
sourcetype=apache:access | chart count over useragent by http_status
timechart
時系列に統計をとるコマンド。
関数を利用可能。
span=
オプションで時間間隔を指定可能。単位は s(秒) m(分) h(時間) d(日)。
例)
sourcetype=apache:access | timechart span=5m count by http_status
top
頻出値を集計するコマンド。
指定したフィールドの値で件数が多い順に集計してくれる。
limit=
オプションで表示件数を指定可能。
例)
sourcetype=access_combined | top limit=10 useragent
同じことを stats
でやろうとすると、、、
sourcetype=access_combined | stats count by useragent | sort - count | head 10
こう書かなきゃいけないので、 top
の方がラクですね。
rare
topの逆。稀少値を集計。
指定したフィールドの値で件数が少ない順に集計してくれる。
例)
sourcetype=access_combined | rare limit=10 useragent
search
検索するコマンド。
一番最初に sourcetype=... とか書いていますが、これはsearch
を省略した形になります。
当然、パイプの後に書くこともできます。
例)
sourcetype=access_combined | stats count by status | search count>100
where
こちらも検索するコマンド。
search
との違いは、isnull()
やisnotnull()
といった関数を使ったり、フィールド同士の比較ができること。
例)
sourcetype=access_combined | stats count by status | where isnotnull(count)
eval
計算するためのコマンド。evaluationの略か。
例えばログの中のバイトをメガバイトに換算したり、関数を使ってエポック時間を人間が読み取れる形式に変換したりできます。
例)
... | eval human_time=strftime(unix_time, "%Y/%m/%d:%H:%M:%S")
rex
ログの中からフィールドを抽出するコマンド。
正規表現を使ってフィールド抽出します。けっこうコツがいるのですが、思い通りに抽出できると気持ちいいです。
例) User-Agentからデバイスを抽出してみた
sourcetype=apache:access | rex field=http_user_agent "^[\w\-\/\.]+\s\((?P<device>[^\s\/\;]+)"
regex
search
の正規表現版。
正規表現にマッチするイベントのみ表示します。
例) IPアドレスが10.xxx.xxx.xxxのログを検索
sourcetype=linux_secure | regex src_ip="10\.(\d+\.){2}\d+"
dedup
指定したフィールドの値を重複除外するコマンド。
個人的にはあまり使い道ないです。
lookup
外部参照のコマンド。
例えば、ログの中にある製品IDから製品名を取得するためにCSVファイルを参照したり、HTTPステータスコードからステータス概要をCSVファイル参照したりするときなんかに使います。
例)
... | lookup products.csv product_id OUTPUT product_name price
最後に
というわけで、ざっくり基本的なコマンドを紹介しました。
まだまだ使えるコマンドはあるので、その2以降で紹介します。
Splunk使う上では自分がほしい出力に向けてコマンドを使いこなすことが大事なので、いろいろ知っておいて損はないです。
コマンド覚えるの大変、とか、とっつきづらい、という感想を持つかもしれませんが、慣れてくれば簡単に使いこなすことができるようになります。
そうなると楽しいですよね。
リンク集
Splunkコマンド集 その2
http://qiita.com/kikeyama/items/4d5cae888020c247ae3c