Splunk 从数组字段中提取所有值

Splunk extract all values from array field

我有包含每个国家/地区计数的日志条目,格式为:

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

效果很好,给了我们两列:

  1. 时间
  2. 每个国家/地区的计数 - 格式为“美国 -> 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