我应该如何修改 logstash.conf 以获得我想要的字段?
How should I modify logstash.conf to get the field I want?
我用的是ELK+Filebeat,所有版本都是6.4.3,OS是windows10
我在filebeat.yml中添加自定义字段,键名是log_type,log_type的值是nginx-access
图片为filebeat.yml的一部分。
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
输出为:
问题一:
上面红框里的字段是"requesttime"和"request_time",我要的字段是nginx.access.requesttime和nginx.access.request_time,不是requesttime和request_time 。我应该如何修改logstash.conf来达到我的目的?
问题 2:
当我使用上面的logstash.conf时,kibana管理界面的字段只有"request_time"字段。
图片显示:
如果我想让"nginx.access.requesttime"字段也出现在Kibana管理界面的字段中,应该如何修改logstash.conf?
问题 1:
我相信你要找的是
mutate {
copy => { "[nginx][access][request_time]" => "nginx.access.requesttime" }
}
问题 2:
是否是关键字由Elasticsearch中的模板字段映射决定。尝试上面的选项,看看问题是否已解决。
This issue in elastic forum可能对你有帮助。
我用的是ELK+Filebeat,所有版本都是6.4.3,OS是windows10
我在filebeat.yml中添加自定义字段,键名是log_type,log_type的值是nginx-access
图片为filebeat.yml的一部分。
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
输出为:
问题一:
上面红框里的字段是"requesttime"和"request_time",我要的字段是nginx.access.requesttime和nginx.access.request_time,不是requesttime和request_time 。我应该如何修改logstash.conf来达到我的目的?
问题 2:
当我使用上面的logstash.conf时,kibana管理界面的字段只有"request_time"字段。
图片显示:
如果我想让"nginx.access.requesttime"字段也出现在Kibana管理界面的字段中,应该如何修改logstash.conf?
问题 1:
我相信你要找的是
mutate {
copy => { "[nginx][access][request_time]" => "nginx.access.requesttime" }
}
问题 2:
是否是关键字由Elasticsearch中的模板字段映射决定。尝试上面的选项,看看问题是否已解决。
This issue in elastic forum可能对你有帮助。