SplunkのSearchTutorialでいろいろと調べてみる(sourcetype=access_combined_wcookie)


SearchTutorialのデータを利用して、いろいろと調べてみる。

データについてはこちら

今回はデータをindex=tutorialに取り込んだので、自分の環境に合わせてください。

頻繁にアクセスしているIPアドレスを調べる

many_session.spl
index=tutorial sourcetype="access_combined_wcookie" 
| stats count as counts range(_time) as duration list(action) min(_time) as firsttime max(_time) as endtime by clientip JSESSIONID
| sort 0  clientip firsttime
| streamstats current=f last(endtime) as endtime_p by clientip
| where firsttime - endtime_p < 300
| convert ctime(firsttime) ctime(endtime)
| top clientip

このログにはJSESSIONID毎にアクセスが分かれるので、前回のアクセスから5分以内にアクセスしているIPアドレスを調べてみた。

結果

clientip count percent
87.194.216.51 12 16.666667
211.166.11.101 6 8.333333
107.3.146.207 3 4.166667
97.117.230.183 2 2.777778

87.194.216.51211.166.11.101についてはなんかいろいろとやっていそう

何をやっているか状況をみてみる

access_timechart.spl
index=tutorial sourcetype="access_combined_wcookie" (clientip=87.194.216.51 OR clientip=211.166.11.101)
| stats count as counts range(_time) as duration list(action) min(_time) as firsttime max(_time) as endtime by clientip JSESSIONID
| sort 0  clientip firsttime
| rename firsttime as _time
| xyseries _time clientip counts

timechartは使ってないけどtimechartで表示してみる。

結果

_time 211.166.11.101 87.194.216.51
2020-05-15 19:43:16 1
2020-05-15 20:33:55 2
2020-05-15 20:46:00 3
2020-05-15 21:44:57 2
2020-05-15 22:35:07 4

ショッピングサイトにこんなアクセスをしてくるのはロクでもないことをしてそう。

解説

  • statsの集計はほとんど使っていない。
  • timechartの時間は_timeなので、JSESSIONIDの最初の時刻にしている。
  • statsの後のxyseriesでトレリスが使えるのはいい発見

アクセス状況を調べる。その2

access_state.spl
index=tutorial sourcetype="access_combined_wcookie" (clientip=87.194.216.51 OR clientip=211.166.11.101) status!=200
| stats list(file) as file list(status) as status by clientip

いわゆる目grep用出力

なにやってるかな〜ってときはstats values()とかstats list()でいったん出力してざっとみるとわかりやすい時がある。

結果

access_state_output.spl
index=tutorial sourcetype="access_combined_wcookie" (clientip=87.194.216.51 OR clientip=211.166.11.101) status!=200
| stats list(file) as file list(status) as status by clientip
| eval tmp=mvzip(file,status)
| stats values(clientip) as clientip by tmp
| mvexpand clientip
tmp clientip
anna_nicole.html,404 211.166.11.101
anna_nicole.html,404 87.194.216.51
cart.do,400 211.166.11.101
cart.do,400 87.194.216.51
cart.do,403 87.194.216.51
cart.do,406 211.166.11.101
cart.do,406 87.194.216.51
cart.do,408 211.166.11.101
cart.do,408 87.194.216.51
cart.do,500 211.166.11.101

IPアドレスを変えているけど、同じ人がやってそうな雰囲気がする。

不正なproductIdを調べる

status_invalid.spl
index=tutorial sourcetype="access_combined_wcookie" (clientip=87.194.216.51 OR clientip=211.166.11.101) status!=200

これで調べるとproductIdのフィールドの詳細がSF-BVS-G01と出てくる。

invalid_productId.spl
index=tutorial sourcetype="access_combined_wcookie" (clientip=87.194.216.51 OR clientip=211.166.11.101) productId="SF-BVS-G01"
| reverse

戻って、こちらで検索するとcategoryIdNULLとなっており、なんか設定に問題がありそう。

購買数の多い商品を調べる

must_buy.spl
index=tutorial sourcetype="access_combined_wcookie" action=purchase
| eval prod_cat=categoryId.":".productId
| stats count by clientip prod_cat
| stats sum(count) as total dc(clientip) as clientip by prod_cat
| untable prod_cat type count

今度は指向を変えて、数えてみる
この頃はなんでもトレリス表示

結果

prod_cat type count
ACCESSORIES:WC-SH-A01 clientip 108
ACCESSORIES:WC-SH-A01 total 182
ACCESSORIES:WC-SH-A02 clientip 127
ACCESSORIES:WC-SH-A02 total 205
ARCADE:BS-AG-G09 clientip 106
ARCADE:BS-AG-G09 total 151
ARCADE:FI-AG-G08 clientip 104

stats byの第一引数を動かさなければ、xyseriesuntableしても問題ないとは。

解説

  • 後々の縦横変換のため、一緒にでてくるフィールドはevalでまとめてあげると楽
  • 2つ目のstatsの結果をuntableしてあげると、trellis表示向けになる。
  • 一括で表示する場合はいらない。

まとめ

trellis表示の練習にはちょうどいいと思いました。

Using Subsearhがあんまり良い例文じゃないのは、subsearch自体がチュートリアルじゃないよねってことなんでしょうね。