elasticsearch Elasticsearch Logstash文件节拍映射,elasticsearch,logstash,elastic-stack,filebeat,elasticsearch,Logstash,Elastic Stack,Filebeat" /> elasticsearch Elasticsearch Logstash文件节拍映射,elasticsearch,logstash,elastic-stack,filebeat,elasticsearch,Logstash,Elastic Stack,Filebeat" />

elasticsearch Elasticsearch Logstash文件节拍映射

elasticsearch Elasticsearch Logstash文件节拍映射,elasticsearch,logstash,elastic-stack,filebeat,elasticsearch,Logstash,Elastic Stack,Filebeat,我有一个问题与麋鹿堆栈+文件节拍 Filebeat正在向Logstash发送类似apache的日志,Logstash应该正在解析这些行。Elasticsearch应该将分割的数据存储在字段中,这样我就可以使用Kibana将它们可视化 问题: Elasticsearch接收日志,但将其存储在单个“消息”字段中 理想的解决方案: 输入: 10.0.0.1 some.hostname.at-[27/Jun/2017:23:59:59+0200] ES: “ip”:“10.0.0.1” “主机名”:“s

我有一个问题与麋鹿堆栈+文件节拍

Filebeat正在向Logstash发送类似apache的日志,Logstash应该正在解析这些行。Elasticsearch应该将分割的数据存储在字段中,这样我就可以使用Kibana将它们可视化

问题: Elasticsearch接收日志,但将其存储在单个“消息”字段中

理想的解决方案:

输入:

10.0.0.1 some.hostname.at-[27/Jun/2017:23:59:59+0200]

ES:

“ip”:“10.0.0.1”

“主机名”:“some.hostname.at”

“时间戳”:“2017年6月27日:23:59:59+0200”

我的日志存储配置:

    input {

  beats {
    port => 5044
  }



}

filter { 


  if [type] == "web-apache" {
        grok {
            patterns_dir => ["./patterns"]
            match => { "message" => "IP: %{IPV4:client_ip}, Hostname: %{HOSTNAME:hostname}, - \[timestamp: %{HTTPDATE:timestamp}\]" }
            break_on_match => false
            remove_field => [ "message" ]
        }

        date {
            locale => "en"
            timezone => "Europe/Vienna"
            match =>  [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
        }

        useragent {
            source => "agent"
            prefix => "browser_"
        }
    }

    }

output {

    stdout {
       codec => rubydebug
    }

    elasticsearch {
             hosts => ["localhost:9200"]
         index => "test1"
             document_type => "accessAPI"
           }
}
我的Elasticsearch发现输出:

我希望周围有麋鹿专家能帮助我。 提前谢谢大家,,
Matthias

您所说的grok过滤器在这里不起作用

尝试使用:

%{IPV4:client_ip} %{HOSTNAME:hostname} - \[%{HTTPDATE:timestamp}\]

不需要在字段名前面单独指定所需的名称(此处您不尝试格式化消息,而是提取单独的字段),只需在“:”后面的括号中说明字段名,即可得到所需的结果

此外,使用覆盖功能,而不是删除消息的\u字段。 更多信息请点击此处:

它最终看起来将类似于:

filter {
  grok {
    match => { "message" => "%{IPV4:client_ip} %{HOSTNAME:hostname} - \[%{HTTPDATE:timestamp}\]" }
    overwrite => [ "message" ]
  }
}
您可以在此处测试grok筛选器: