【问题标题】:Logstash Create an array of values from stringLogstash 从字符串创建一个值数组
【发布时间】:2017-05-03 15:58:54
【问题描述】:

我的日志中有以下一组信息。它是 JSON 格式。

{   
  "someField":"someValue",   
  "columns":"[colName1, colName2, colName3, ... colNameN]", 
  "someField":"someValue" 
}

我希望将其作为数组存储在同一字段 columns 中。

我想展示的用例是有多少用户使用了名为colName1 的特定列以及它的数量。

我正在使用ELK stak 5.x

【问题讨论】:

    标签: elasticsearch logstash logstash-configuration


    【解决方案1】:

    如果你的源码是直接json格式

    使用json插件

    filter {
      json {
        source => "message"
      }
    }
    

    数组字段将自动转换为数组

    https://www.elastic.co/guide/en/logstash/current/plugins-filters-json.html

    【讨论】:

    • 我知道它将自动转换为数组。但在我的情况下,我使用 ThreadContext 来放置值。而 ThreadContext 只支持String vales。因此,尽管我的值以数组格式显示,但它们实际上以字符串格式导出到日志文件中。那么在这种情况下会产生影响吗?
    • ThreadContext 是logstash插件吗?如果不是您提供的 json 格式,默认情况下应该来自消息字段,所以我不知道您的意思是 ThreadContext
    • 不,它不是 logstash 插件,但它是 java 中的一个库,可帮助我将值放入字段并在整个字段中使用。
    • @VishalKinjavdekar 我认为你的数据仍然会通过消息传递,你能检查一下吗?
    • 我检查了...在 kibana 中,即使在使用 json 插件后它也显示为文本字段
    【解决方案2】:

    我通过参考上述两个答案得到了解决方案。 这就是我所做的。

    要从字符串中删除[],我使用了这个:

    mutate {
            gsub => ["columns", "[\[\]]", ""]
        }
    

    然后将其转换为数组:

        mutate {
            split => { "columns" => "," }
        }
    

    【讨论】:

      【解决方案3】:

      在 output.conf 中修改可能会对您有所帮助。

      点击此链接 - https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-replace

      虽然不支持从字符串到数组的直接转换。前段时间我遇到了同样的用例,为此使用了合并功能。我建议有一些虚拟字段并与“列”字段合并以创建新的数组字段。希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-16
        • 1970-01-01
        • 2015-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多