什么用于Elasticsearch的logstash过滤器插件?

时间:2018-11-05 16:18:01

标签: json elasticsearch logstash

我在使用logstash将以下原始数据引入elasticsearch时遇到麻烦。提取了下面的原始数据,希望JSON插件可以工作,但目前不行。我没有看过其他有关json的帖子。

{
    "offset": "stuff",
    "results": [
        {
            "key": "value",
            "key1": null,
            "key2": null,
            "key3": "true",
            "key4": "value4",
            "key4": [],
            "key5": value5,
            "key6": "value6",
            "key7": "value7",
            "key8": value8,
            "key9": "value9",
            "key10": null,
            "key11": null,
            "key12": "value12",
            "key13": "value13",
            "key14": [],
            "key15": "key15",
            "key16": "value16",
            "key17": "value17",
            "key18": "value18",
            "key19": "value19"
        },
        {
            "key20": "value20",
            "key21": null,
            "key22": null,
            "key23": "value23",
            "key24": "value24",

<etc.>

我当前的conf文件:

input {
  file {
    codec => multiline
    {
      pattern => '^\{'
      negate => true
      what => previous
    }
    #type => "json"
    path => <my path>
    sincedb_path => "/dev/null"
    start_position => "beginning"
  }

}

#filter 
#{
#        json {
#        source => message
#        remove_field => message
#        }
#}

filter 
{
    mutate
    {
        replace => [ "message", "%{message}}" ]
        gsub => [ 'message','\n','']
    }
    if [message] =~ /^{.*}$/ 
    {
        json { source => message }
    }

}

output {
   #stdout { codec => rubydebug }
   stdout { codec => json }
}

我收到了一个无法读取的长错误,因为它充满了 “ \” key10 \“:null,\ r \” key11 \“:\” value11 \“,\ r

有人知道我在做什么错或者如何更好地看到我的错误吗?这是有效的json,但也许我在多行编解码器中使用正则表达式错误。

1 个答案:

答案 0 :(得分:0)

可以使用与文件不同的输入插件吗?将JSON文件解析为多行可能会出现问题。如果可能,请使用带有JSON编解码器的插件。

在文件输入中,您可以设置一个真正的sincedb_path,logstash可以在其中写入

在您替换邮件的行中,您有一个大括号}

replace => [ "message", "%{message}}" ]

我会将输出写到elasticsearch而不是stdout,但是当然不必进行测试,但是当您将输出写到elasticsearch时,您可以看到正在创建的索引并使用kibana来发现它们的内容是否根据您的喜好。

output {
    elasticsearch {
        hosts => "localhost"
        index => "stuff-%{+xxxx.ww}"
    }
}

我使用这些curl命令从elasticsearch中读取

curl -s -XGET 'http://localhost:9200/_cat/indices?v&pretty'

curl -s -XGET 'http://localhost:9200/stuff*/_search?pretty=true'