Edited at

Splunkコマンド集 その1

More than 1 year has passed since last update.

Splunkを使ってて面白い最大の理由(個人的な意見ですが)がサーチコマンドです。

いろいろなサーチコマンドを組み合わせてグラフィカルに表現できたときは楽しいですよね。

ということで、今回はSplunkサーチコマンドを紹介します。


はじめに

Splunkには合計約140のサーチコマンドがあります。

とはいえ、実際によく使うのは10〜20くらいのものなので、それらを押さえておけばたいていのことはできます。


Splunkサーチコマンドについて

ログを検索するだけではなく、整形したり集計するのに使います。

基本的な使い方はLinuxコマンドと同じで、パイプ(|)でつなげて、前のコマンドの出力が次のコマンドの入力になるイメージです。

例えば

sourcetype=access_combined | stats count by status | sort - count

という具合です。


コマンド紹介


stats

統計をとるコマンド。

一番よく使うといっても過言ではないコマンド。

countavgsumといった関数を使って集計します。

by句の後には、集計の単位となるフィールドを指定。

例)

... | stats avg(score) as avg_score by user_id

http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Stats


chart

こちらも統計をとるものでstatsと同じように関数を利用可能。

statsとの違いは、行・列の表形式にまとめてくれること。その際、over句を使います。

overが行に、byが列になります。

例)

sourcetype=apache:access | chart count over useragent by http_status

http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Chart


timechart

時系列に統計をとるコマンド。

関数を利用可能。

span= オプションで時間間隔を指定可能。単位は s(秒) m(分) h(時間) d(日)。

例)

sourcetype=apache:access | timechart span=5m count by http_status

http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Timechart


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

http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Search


where

こちらも検索するコマンド。

searchとの違いは、isnull()isnotnull()といった関数を使ったり、フィールド同士の比較ができること。

例)

sourcetype=access_combined | stats count by status  | where isnotnull(count)

http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Where


eval

計算するためのコマンド。evaluationの略か。

例えばログの中のバイトをメガバイトに換算したり、関数を使ってエポック時間を人間が読み取れる形式に変換したりできます。

例)

... | eval human_time=strftime(unix_time, "%Y/%m/%d:%H:%M:%S")

http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Eval


rex

ログの中からフィールドを抽出するコマンド。

正規表現を使ってフィールド抽出します。けっこうコツがいるのですが、思い通りに抽出できると気持ちいいです。

例) User-Agentからデバイスを抽出してみた

sourcetype=apache:access | rex field=http_user_agent "^[\w\-\/\.]+\s\((?P<device>[^\s\/\;]+)"

http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Rex


regex

searchの正規表現版。

正規表現にマッチするイベントのみ表示します。

例) IPアドレスが10.xxx.xxx.xxxのログを検索

sourcetype=linux_secure | regex src_ip="10\.(\d+\.){2}\d+"

http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Regex


dedup

指定したフィールドの値を重複除外するコマンド。

個人的にはあまり使い道ないです。

http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Dedup


lookup

外部参照のコマンド。

例えば、ログの中にある製品IDから製品名を取得するためにCSVファイルを参照したり、HTTPステータスコードからステータス概要をCSVファイル参照したりするときなんかに使います。

例)

... | lookup products.csv product_id OUTPUT product_name price

http://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Lookup


最後に

というわけで、ざっくり基本的なコマンドを紹介しました。

まだまだ使えるコマンドはあるので、その2以降で紹介します。

Splunk使う上では自分がほしい出力に向けてコマンドを使いこなすことが大事なので、いろいろ知っておいて損はないです。

コマンド覚えるの大変、とか、とっつきづらい、という感想を持つかもしれませんが、慣れてくれば簡単に使いこなすことができるようになります。

そうなると楽しいですよね。


リンク集

Splunkコマンド集 その2

http://qiita.com/kikeyama/items/4d5cae888020c247ae3c