我有一个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
,它们具有相同的内容。
我尝试使用type
- 过滤器删除mutate
- 字段,如下所示:
mutate{
remove_field => [ "type" ]
}
但此过滤器会删除type
个字段。(_type
字段设置为默认值: logs )
如何保留_type
字段并删除type
字段?
答案 0 :(得分:2)
以这种方式对我有用:
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