【问题标题】:Custom metrics using grok with logstash使用 grok 和 logstash 的自定义指标
【发布时间】:2019-02-14 19:38:17
【问题描述】:

我正在尝试将一些代码集成到现有的 ELK 堆栈中,我们仅限于使用 filebeats + logstash。我想要一种配置 grok 过滤器的方法,它允许不同的开发人员以预定义的格式记录消息,以便他们可以捕获自定义指标,并最终构建 kibana 仪表板。

例如,一个团队可能会记录以下消息:

metric_some.metric=2
metric_some.metric=5
metric_some.metric=3

另一个团队可能会从另一个应用记录以下消息:

metric_another.unrelated.value=17.2
metric_another.unrelated.value=14.2

有没有办法配置一个单独的 grok 过滤器,它将捕获 metric_ 之后的所有内容作为新字段以及值?我读过的所有here 似乎都表明您需要提前知道字段名称,但我的目标是能够开始记录新指标而无需添加/修改 grok 过滤器。

注意:我意识到 Metricsbeat 在这里可能是一个更好的解决方案,但由于我们正在与我们无法控制的现有 ELK 集群集成,所以这不是我的选择。

【问题讨论】:

    标签: logstash logstash-grok


    【解决方案1】:

    由于您的消息似乎是一系列键值对,您可以使用kv 过滤器而不是grok

    使用grok时需要命名目标字段,kv目标字段的名称将与key相同。

    以下配置应该适用于您的情况。

    filter { kv { prefix => "metric_" } }
    

    对于事件metric_another.unrelated.value=17.2,您的输出将类似于{ "another.unrelated.value": "17.2" }

    【讨论】:

    • 谢谢,我确实认为kv 可能更接近我的需要。然而 prefix 参数实际上被添加到每个条目之前:elastic.co/guide/en/logstash/current/…
    • 哦,你说得对,我还以为是反了,不过没问题,我觉得你可以使用kv过滤器中的remove_char_key参数去掉你有的任何前缀以你的领域的名义。
    • 所以这让我非常接近。我最终不得不使用包含mutatekv 的过滤器配置,因为我关心的指标数据隐藏在log4j 消息中。 mutate 过滤器为我提供了一种清晰的方法来解析所有额外的 log4j 内容(线程 ID、类名等),然后直接获取原始指标字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    相关资源
    最近更新 更多