问题描述
我有一些日志条目,其中包含每个国家/地区的计数,格式为:
Map(USA -> 1234,CAN -> 5678,GBR -> 9012,FRA -> 3456)
Map(USA -> 1238,CAN -> 5692,GBR -> 9024,FRA -> 3478)
...
我想在Splunk中制作一个时间表,每个国家一个系列。
这是我尝试过的:
| rex "Map\((?<countries>([A-Z]+\ ->\ \d+(,\ )?)*)\)" | rex field=countries max_match=50 "(?<countries>[A-Z]+\ ->\ \d+)(,\ )?" | table _time countries
效果很好,并为我们提供了两列:
- 时间
- 每个国家/地区的计数-格式为“美国-> 1234”的条目数组
然后我尝试创建时间表,我将其替换为:
| table _time countries
具有:
| rex field=countries (?<country>[A-Z]+)\ ->\ (?<count>\d+) | timechart count by country limit=0
但是结果是所有计数均来自列表中的最后一个国家。
如何提取数组中所有项目的每个国家/地区的计数?
解决方法
下面的rex
应该足以提取国家/地区名称和计数
| makeresults
| eval m="Map(USA -> 1234,CAN -> 5678,GBR -> 9012,FRA -> 3456)"
| rex field=m max_match=0 "(?<cc>\w+\s+->\s+\d+)"
| mvexpand cc
| rex field=cc "(?<country>\w+) -> (?<count>\d+)"
| fields country,count
| eval {country}=count
| fields - country,count