对在搜索字符串中传递字段的csv文件的每一行运行子查询

时间:2019-01-25 09:33:45

标签: splunk splunk-query

我想对csv文件中的所有值运行splunk查询,并将该值替换为csv文件中的字段。我已经将文件导入到splunk中作为输入查找表,并能够使用inputlookup查询查看字段,但是我想在所有子查询中运行该查询,以获取每小时,每天,每周和每月的最大计数基础

输入文件是ids.csv,它大约有800行,只有一列,如下所示:

1234,
2345
2346
4567
...

使用即时通讯查询

| inputlookup ids.csv | fields ids as id |  [search index="abc" id "search string here" |bin _time span="1hour" | stats count as maxHour by _time | sort - count | head 1]  |appendcols[search
 index="abc" id "search string here" |bin _time span="1day" | stats count as maxDay by _time | sort - count |head 1 ]|appendcols[search
 index="abc" id "search string here" |bin _time span="1week" | stats count as maxWeek by _time | sort - count | head 1 ]|appendcols[search
 index="abc" id "search string here" |bin _time span="1month" | stats count as maxMonth by _time | sort - count | head 1]

我没有得到预期的结果,我期望以表格格式显示,其中通过在搜索子查询中传递id字段来获取具有特定id的每个时间范围的计数。

我该如何解决?

谢谢

1 个答案:

答案 0 :(得分:0)

在我面前没有活动的实例来玩时,我觉得更有效的方法可能是:

^(?=^\w{3,20}$)[a-z0-9]+_?[a-z0-9]+$
|     |            |    |     | End with any alphanumeric
|     |            |    | 
|     |            |   Optional underscore in middle
|     |            |    
|     |      Start with any alphanumeric
|     |
|  Any accepted chars
|  between 3 and 20 chars.
|
Start of string

首先,我们在查找中获取每个ID的所有数据,然后使用统计信息获得每天每小时的最大计数,并使用bin和stats得出每天的计数。

接下来,我们使用(未记录)multireport命令将结果集从每日统计信息中转换出来,并添加每周和每月的统计信息。最后,我们使用输入查找中的每个ID来获取每个计数的最大值,以小时,天,周和月的最大计数结束。


现在,由于multireport没有记录,并且有时它的先前使用已被证明有些问题……我实际上建议像这样使用eventstats

index="abc" [inputlookup ids.csv | fields ids as id]
| bin _time span=1h | stats count by id _time
| bin _time span=1d | stats max(count) as countHour sum(count) as countDay by id _time
| multireport 
   [ noop ]
   [ bin _time span=1week | stats sum(countDay) as countWeek by id _time ]
   [ bin _time span=1mon | stats sum(countDay) as countMonth by id _time ]
| stats max(count*) as max* by id

类似于之前,我们获得了每日统计信息,但是随后我们可以使用as syntax of the bin command来计算每天的星期和月份,并在列上添加每天的每周和每月计数。然后,它与以前的max函数相同。