【问题标题】:elasticsearch - Tag data with lookup table valueselasticsearch - 使用查找表值标记数据
【发布时间】:2020-09-27 17:20:09
【问题描述】:

我正在尝试根据查找表标记我的数据。 查找表具有以下字段:

Key - 表示我要标记的数据中的字段名称。 在实际数据中,该字段是“Headers”字段的子字段。 “Key”字段的示例: “服务器。 (* 是通配符)

Value- 表示上述字段的所需值。 查找表中的值只是真实数据值中字符串的一部分。 “值”字段的示例: “Avtech”。

供应商- 如果在文档中找到字段值的组合,我想添加到真实数据中的值。

真实数据中的组合示例: “Headers.Server : Linux/2.x UPnP/1.0 Avtech/1.0”

A match with that document in the look up table will be:
Key= Server (with wildcard on both sides).
Value= Avtech(with wildcard on both sides)
Vendor= Avtech

所以基本上我需要在该文档中添加一个字段,其值为“Avtech”。

  • “标题”中的子字段是动态字段,会因文档而异。
  • 找不到匹配项,我需要将值“未知”添加到标记字段。

我尝试使用丰富处理器,使用查找表作为源数据,匹配字段将为“值”,丰富字段将为“供应商”。 在丰富的处理器中,我不知道如何调用该字段,因为它是动态的,我想搜索该值是否在“Headers”子字段中的任何位置。 另外,我不认为查找表中的“Value”和Headers子字段的值会匹配,因为查找表中的“Value”字段是一个两边都有通配符的子字符串。

我可以使用一些帮助来完成我正在尝试做的事情......以及如何在丰富的处理器中使用通配符进行搜索。 或者如果您除了丰富的处理器之外还有其他想法 - 例如父子和查找术语机制。

谢谢! 阿迪。

【问题讨论】:

    标签: elasticsearch kibana lookup lookup-tables


    【解决方案1】:

    有两种方法可以做到这一点:

    1. 结合使用 Logstash 和 Elasticsearch
    2. 使用唯一的 Elastichsearch 摄取节点

    Constrant:您需要知道 Vendor 术语出现在 Header 字段中的位置。

    方法 1 如果是这样,那么您可以使用 GROK 过滤器来提取术语。并根据找到的术语,进行查找以获取相应的值。

    参考

    1. https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html
    2. https://www.elastic.co/guide/en/logstash/current/plugins-filters-kv.html
    3. https://www.elastic.co/guide/en/logstash/current/plugins-filters-jdbc_static.html
    4. https://www.elastic.co/guide/en/logstash/current/plugins-filters-jdbc_streaming.html

    方法 2 创建一个由 KV 对组成的索引。在摄取节点中,创建一个由 Grok 处理器组成的管道,然后对其进行丰富。 Grok 的工作方式与方法 1 中提到的相同。您似乎已经让 Enrich 部分工作了。

    参考

    1. https://www.elastic.co/guide/en/elasticsearch/reference/current/grok-processor.html

    如果您能够在存在感兴趣的术语的标题中隔离子字段,那么这将使您的事情变得更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 2020-02-04
      • 2021-08-21
      • 1970-01-01
      • 2021-10-14
      • 2021-06-27
      • 1970-01-01
      相关资源
      最近更新 更多