我应该如何修改logstash.conf以获取我想要的字段?

时间:2018-11-19 13:30:49

标签: nginx logstash-configuration

我使用ELK + Filebeat,所有版本为6.4.3,操作系统为Windows 10

我在filebeat.yml中添加了自定义字段,键名是log_type,log_type的值是nginx-access

图片显示了filebeat.yml的一部分。

enter image description here

logstash.conf的内容为:

input {
    beats { 
       host => "0.0.0.0"
       port => "5544"
  } 
} 

filter {

mutate { 
  rename => { "[host][name]" => "host" } 
}   

if [fields][log_type] == "nginx-access" {
    grok {
                  match => { "message" => ["%{IPORHOST:[nginx][access][remote_ip]} - %{DATA:[nginx][access][user_name]} \[%{HTTPDATE:[nginx][access][time]}\] \"%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}\" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} \"%{DATA:[nginx][access][referrer]}\" \"%{DATA:[nginx][access][agent]}\" \"%{DATA:[nginx][access][x_forwarded_for]}\" %{NUMBER:[nginx][access][request_time]}"] }
            }

mutate {
     copy => { "[nginx][access][request_time]" => "[nginx][access][requesttime]" }
  }

mutate {
      convert => {
      "[nginx][access][requesttime]" => "float"
    }
  }
}
}

output {
      stdout { 
       codec => rubydebug { metadata => true }
      }

      elasticsearch { 
        hosts => ["localhost:9200"] 
      } 
    }

当我使用命令时:

logstash.bat  -f  logstash.conf

输出为:

enter image description here

问题1:

上方红色框中的字段是“ requesttime”和“ request_time”,我想要的字段是nginx.access.requesttime和nginx.access.request_time,而不是requesttime和request_time。我该如何将logstash.conf修改为实现我的目标?

问题2:

当我使用上面的logstash.conf时,kibana管理界面的字段只是“ request_time”字段。

图片显示如下: enter image description here

如果我希望“ nginx.access.requesttime”字段也出现在Kibana管理界面的字段中,我该如何修改logstash.conf?

1 个答案:

答案 0 :(得分:1)

问题1:

我相信您正在寻找的是

mutate {
   copy => { "[nginx][access][request_time]" => "nginx.access.requesttime" }
}

问题2:

其中什么是关键字由Elasticsearch中的模板字段映射确定。尝试上面的选项,看看问题是否解决。

This issue in elastic forum可能会对您有所帮助。