この記事はなに?
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.testsample2@bbb.test
|
num1@aaa.testnum2@bbb.testnum3@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 |