elasticsearch输出插件的Logstash sprintf格式不起作用

时间:2018-12-02 05:25:19

标签: indexing logstash elastic-stack elasticsearch-plugin logstash-configuration

我在使用sprintf来引用elasticsearch输出插件中的事件字段时遇到了麻烦,我不确定为什么。以下是从Filebeat接收到并在过滤完成后发送给Elasticsearch的事件:

{
          "beat" => {
        "hostname" => "ca86fed16953",
            "name" => "ca86fed16953",
         "version" => "6.5.1"
    },
    "@timestamp" => 2018-12-02T05:13:21.879Z,
          "host" => {
        "name" => "ca86fed16953"
    },
          "tags" => [
        [0] "beats_input_codec_plain_applied",
        [1] "_grokparsefailure"
    ],
        "fields" => {
        "env" => "DEV"
    },
        "source" => "/usr/share/filebeat/dockerlogs/logstash_DEV.log",
      "@version" => "1",
    "prospector" => {
        "type" => "log"
    },
        "bgp_id" => "42313900",
       "message" => "{<some message here>}",
        "offset" => 1440990627,
         "input" => {
        "type" => "log"
    },
        "docker" => {
        "container" => {
            "id" => "logstash_DEV.log"
        }
    }
}

我正在尝试根据filebeat的环境为文件编制索引。这是我的配置文件:

input {
  http { }
  beats {
    port => 5044
  }
}

filter {
  grok {
    patterns_dir => ["/usr/share/logstash/pipeline/patterns"]
    break_on_match => false
    match => { "message" => ["%{RUBY_LOGGER}"]
             }
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "%{[fields][env]}-%{+yyyy.MM.dd}"
  }
  stdout { codec => rubydebug }
}

我认为所引用的事件字段在到达Elasticsearch输出插件时已经被填充了。但是,在kibana端,它不注册格式化索引。相反,其原因如下:

enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分:1)

在Elasticsearch Output插件文档中:
https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-manage_template

  

是需要其他索引名称的支持,还是想要   通常,更改模板中的映射,自定义模板可以   通过将template设置为模板文件的路径来指定。

     

将manage_template设置为false将禁用此功能。如果您需要   更好地控制模板创建(例如创建索引)   动态地基于字段名称),您应该将manage_template设置为   并使用REST API手动应用模板。

默认情况下,如果使用除logstash-%{+ YYYY.MM.dd}以外的其他索引名称,elasticsearch要求您指定自定义模板。要禁用此功能,我们需要添加 manage_template => false 键。

因此,通过这套新的信息,有效的配置应为:

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "%{[fields][env]}-%{+yyyy.MM.dd}"
    manage_template => false
  }
  stdout { codec => rubydebug }
}