我有一个 logstash 客户端和服务器。
客户端将带有 logstash udp 输出的日志文件发送到服务器,服务器也运行 logstash 来获取这些日志。在服务器上,我有一个 json 过滤器,它在实际日志的字段中提取 json 格式的消息,以便 elasticsearch 可以对它们进行索引。
这是我从服务器获取的代码:
input{
udp{}
}
filter{
json {
source => "message"
}
}
output{
elasticsearch{
}
}
来自客户:
input{
file{
type => "apache-access"
path => "/var/log/apache2/access.log"
}
}
output{
udp{
host => "192.168.0.3"
}
}
除了一件事,这段代码工作正常:
以某种方式,我得到字段 type
两次,一次作为 type
,一次作为 _type
,它们具有相同的内容。
我试过使用 mutate
-filter 删除 type
字段,如下所示:
mutate{
remove_field => [ "type" ]
}
但此过滤器会删除两个 type
字段。(_type
字段设置为默认值:logs)
如何保留 _type
字段并删除 type
字段?
最佳答案
它以这种方式对我有用:
input {
file {
add_field => { "[@metadata][type]" => "apache-access" }
path => "/var/log/apache2/access.log"
}
}
filter {
......
if [@metadata][type] == "xxx" {
}
......
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
@metadata 和 document_type
关于json - Logstash 删除类型并保留 _type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31512764/