elasticsearch Logstash从字符串创建一个值数组,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration" /> elasticsearch Logstash从字符串创建一个值数组,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration" />

elasticsearch Logstash从字符串创建一个值数组

elasticsearch Logstash从字符串创建一个值数组,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration,我的日志中有以下一组信息。它是JSON格式的 { "someField":"someValue", "columns":"[colName1, colName2, colName3, ... colNameN]", "someField":"someValue" } 我希望将其作为数组存储在同一字段列中 我想展示的用例是有多少用户使用了名为colName1的特定列,以及该列的数量 我在output.conf中使用了elkstak5.xMutate.conf可能会对您

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

{   
  "someField":"someValue",   
  "columns":"[colName1, colName2, colName3, ... colNameN]", 
  "someField":"someValue" 
}
我希望将其作为数组存储在同一字段
列中

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


我在output.conf中使用了
elkstak5.x
Mutate.conf可能会对您有所帮助

请点击此链接-


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

如果您的源代码是直接json格式的

使用json插件

filter {
  json {
    source => "message"
  }
}
数组字段将自动转换为数组


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

要从字符串中删除
[
]
,我使用以下方法:

mutate {
        gsub => ["columns", "[\[\]]", ""]
    }
然后将其转换为数组:

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

我知道它将自动转换为数组。但在我的例子中,我使用ThreadContext来放置值。ThreadContext仅支持
String
vales。因此,尽管我的值看起来是数组格式,但它们实际上是以字符串格式导出到日志文件中的。那么在这种情况下这会影响吗?ThreadContext是logstash插件吗?如果不是,默认情况下,您提供的json格式应该来自消息字段,所以我不知道您指的是ThreadContextNo,它不是logstash插件,但它是一个java库,可以帮助我在字段中输入值并跨字段使用。@VishalKinjavdekar我想您的数据仍然会通过消息传递,您可以检查吗?我检查了。。。在kibana中,即使使用了json插件,它也会显示为文本字段