前回に続いて、Splunkコマンドの紹介です。
コマンド紹介
transaction
一番好きなコマンド。
IPアドレスやユーザー名、ID等をキーとして、関連するイベント(ログ行)をまとめるコマンド。
複数のソースタイプもまとめられるので、トラブルシューティングに便利。
ただ、実際はマシンパワーを食うので、 maxspan
maxpause
startswith
endswith
といったオプションの指定は必須。
例)
sourcetype=apache:access OR sourcetype=tomcat:access:log
| transaction maxspan=3s clientip
ちなみに、maxspan
は1トランザクション内での最大時間、maxpause
はトランザクション間の間隔。
セキュリティ用途でも 「3秒間に同一IPアドレスで1,000件以上のアクセス」 を抽出するときにこれをつかうと便利。
語りだすと長くなるので、また別途。
eventstats
イベントをまたいでの統計を追加するもの。
例えば、stats
コマンドでIPアドレスごとの件数を取得して、その件数の全体の平均値を計算してその差分をとるときとか。
例)
sourcetype=apache:access
| stats count by clientip
| eventstats avg(count) as avg_count
| eval delta = abs(count - avg_count)
| sort - delta
streamstats
2番目に好きなコマンド。
eventstats
と似ているけど、スライディングウィンドウで累積したり計算したりするもの。
例) 時系列データから標準偏差±2範囲外の異常値を見つける。
sourcetype=apache:access
| timechart span=1h count
| streamstats window=12 avg(count) as avg stdev(count) as stdev
| eval lower_bound = avg - stdev * 2
| eval upper_bound = avg + stdev * 2
| eval isOutlier = if(count>upper_bound OR count<lower_bound, 1, 0)
| fields - avg stdev
この場合、12時間(1hスパンが12個)のスライディングウィンドウで平均値と標準偏差を計算して、isOutlierの値が1になっているものは異常値とみなす。
bin
範囲にまとめるコマンド。
例えば、HTTPステータスコードを100単位で集計したい時に使ったり、機械学習用にカテゴリ分類するような用途。
bucket
コマンドと同じ。
例) ステータスコードを200-300、300-400という具合に分類
sourcetype=apache:access
| bin span=100 status
| stats count by status
autoregress
直前のイベントのフィールドの値をそのイベントに入れる。
streamstats
でも同じことはできる。
例)
sourcetype=apache:access
| autoregress src_ip as last_src_ip
concurrency
マイブームなコマンド。
同時実行を累積していく。 同時アクセスを見るのに便利かも。
例)
sourcetype=apache:access
| transaction maxpause=10m user
| concurrency duration=duration start=_time
この場合、Apacheアクセスログから(1行目)、10分間ログ出力されていない場合はアクティブではないとみなしてトランザクションにまとめ(2行目)、transaction
コマンドで出力されるdurationフィールドの間に積み重ねてカウントしていったものがconcurrencyというフィールドに出力される(3行目)。
これを折れ線グラフか棒グラフにするとわかりやすいかも。
ただ、実際ログに吐き出される時間はマチマチなので、間に空白の時間がある場合にはgentimes
コマンドで埋める必要あるかも。
それはまた別途。
最後に
何となく思いつくまま自分の好きなコマンドを紹介しました。
実用的に使えるかどうかはアイデア次第でしょう。
実際の出力イメージ含めた詳細な説明は、気が向いたときにでも。
リンク集
Splunkコマンド集 その1
http://qiita.com/kikeyama/items/3a423de39a02ac2380ed