この記事はなに?
Splunk にて、mult ivalue フィールド(以降 mv)にデータが2件以上あるイベントだけを取得する方法。
- mult ivalue フィールド: 複数の値を取ることができるフィールド。配列のようなもの
活用シーン
- メール送信記録のログ(maillog)から、大量送信しているアカウントを検知する
- stats の list や values で集計した結果から、結果が複数になったフィールドを抜く
SPL
例えば maillog から、複数の宛先に送ったメールが何通あるかを出したい場合。
index="idx_maillog" sourcetype="sendmail_syslog"
| fields to{}
| rename to{} as to
| eval num=mvcount(to)
| search num >= 2
| table to
表示例
to |
---|
sample1@aaa.test sample2@bbb.test
|
num1@aaa.test num2@bbb.test num3@ccc.test
|
解説
- mv の件数は、
eval
でmvcount(mvのフィールド名)
とすることで取得できます - mv のフィールド名をそのまま
eval
で使うとエラーになります({}
が付いているため)。
なので、 rename で{}
の付かない名前に変更します - その後、search や where で mv の件数が2件以上 という判定をすれば、mv が2件以上のイベントだけを取得できます
応用
maillog から、複数の宛先に送ったメールの、出現回数の分布を出す場合
index="idx_maillog" sourcetype="sendmail_syslog"
| fields to{}
| rename to{} as to
| eval num=mvcount(to)
| search num >= 2
| stats count(num) as 通数 by num
表示例
宛先数 | 出現回数(総通数) |
---|---|
2 | 1603 |
3 | 794 |
5 | 25 |
100 | 1 |