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

问题描述

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...