概要
- この記事ではSplunk 7.xを使っています
- 業務でも、Splunkをログに取り込んで分析することがあると思います
- Splunkでクエリを書くときに、デバッグに役に立つテクニックを紹介します
背景
- Splunkの
makeresults
コマンドを用いると、モックデータ(ダミーデータ)を生成することができます- モックデータを1つつくるには公式ドキュメントの
| makeresults | eval newfield="avalue"
のようにします
- モックデータを1つつくるには公式ドキュメントの
- 正規表現を使って集計しているクエリの動作確認するために、手動で複数件モックデータを作りたいときに、やり方が分からずつまったので、まとめておきます
- 別途、ファイルをアップロードして、それをモックデータとして使うこともできますが、今回は手軽に数件のモックデータを作りたいときのやり方です
例
- 動物の数をログに落としていて、それを種類ごとに集計するクエリを書きたいため、このようなモックデータが欲しい
message:num_dogs=1, num_cats=0, num_humans=2, num_unicorns=0
message:num_dogs=1, num_cats=1, num_humans=0, num_unicorns=0
- そのためのクエリ
-
makeresults
は通常クエリの一番最初にかかないといけませんが、append
コマンドでつなげることができます -> 参考: 公式ドキュメント
-
| makeresults
| eval message_field="message:num_dogs=1, num_cats=0, num_humans=2, num_unicorns=0"
| append
[| makeresults
| eval message_field="message:num_dogs=1, num_cats=1, num_humans=0, num_unicorns=0"]
つくったモックデータを使って動物の数を集計してみる
- クエリ
| makeresults
| eval message_field="message:num_dogs=1, num_cats=0, num_humans=2, num_unicorns=0"
| append
[| makeresults
| eval message_field="message:num_dogs=1, num_cats=1, num_humans=0, num_unicorns=0"]
| rex field=message_field "num_dogs=(?<num_dogs>\d+)"
| rex field=message_field "num_cats=(?<num_cats>\d+)"
| rex field=message_field "num_humans=(?<num_humans>\d+)"
| rex field=message_field "num_unicorns=(?<num_unicorns>\d+)" | bucket _time span=30m
| stats sum(num_dogs) as tot_dogs, sum(num_cats) as tot_cats, sum(num_humans) as tot_humans, sum(num_unicorns) as tot_unicorns by _time
| fields _time, tot_dogs, tot_cats, tot_humans, tot_unicorns