【问题标题】:Splunk extract all values from array fieldSplunk 从数组字段中提取所有值
【发布时间】:2020-08-14 05:40:48
【问题描述】:

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

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. 每个国家/地区的计数 - 格式为“USA -> 1234”的条目数组

然后我尝试创建一个时间表,我替换了:

| table _time countries

与:

| rex field=countries (?<country>[A-Z]+)\ ->\ (?<count>\d+) | timechart count by country limit=0

但结果是所有计数都取自列表中的最后一个国家/地区。

如何提取数组中所有项目的每个国家/地区的计数?

【问题讨论】:

    标签: logging charts splunk data-extraction


    【解决方案1】:

    以下rexs 应该足以提取国家名称和计数

    | 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
    

    【讨论】:

    • 我如何从提取的数据中创建时间表?
    • eval {country}=count 表示有新字段“USA”、“CAN”……但是如何将它们全部添加为 timechart 命令的参数?
    • 删除最后 2 行(eval {country}=count 和 | fields...),然后按国家/地区进行时间图 sum(count)。您可能需要根据您的数据将 sum 更改为 first 或 latest
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多