首页 > 解决方案 > 在 Logstash 中使用 Elasticsearch 过滤器

问题描述

我正在尝试使用 logstash 上的弹性搜索过滤器来丰富数据。

我有两个索引,我的目标是从其中一个获取一些数据并将其添加到另一个。

我配置了一个 logstash 过滤器,它在我的 elasticsearch 中搜索,如果匹配,则输出到索引。

但是我的过滤器无法正常工作,因为当我测试过滤器时出现此错误

[WARN ] 2020-10-02 19:23:09.536 [[main]>worker2] elasticsearch - Failed to query elasticsearch for previous event {:index=>"logstash-*", :error=>"Unexpected character ('%' (code 37)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')\n

我认为模板中的变量和弹性搜索之间存在一些问题

我的logstash是7.3.2,我的ES是7.4.2

这是我的设置


       Logstash.conf
        
       input {
               http{ }
       }
        
       filter {
               elasticsearch {
                 hosts => ["127.0.0.1:9200"]
                 index => "logstash-*"
                 query_template => "search-by-ip.json"
                 fields => {
                         "id"  => "[suscriberid]"
                 }
               }
         }
        
        
       output {
         stdout { codec => rubydebug }
       }
        
       -----------------
       search-by-ip.json
        
       {
         "size": 1,
         "query": { "match":{"IP": %{[ip]} } }
       }
       -------------------
       testcase.sh
        
       curl -XPOST "localhost:8080" -H "Content-Type: application/json" -d '{
         "size": 1,
         "query": { "match":{"ip": "192.168.1.4" }}
       }'
        
      ```  



Thanks!

标签: elasticsearchlogstashnetflowlogstash-filter

解决方案


如果您曾经处理过没有 [ip] 字段的事件,那么 sprintf 引用将不会被替换,您将收到该错误。

请注意,ip 和 IP 是不同的字段。不确定 %{[ip]} 是否需要双引号。


推荐阅读