Logstash删除类型并保持_type

时间:2015-07-20 09:15:47

标签: json elasticsearch logstash

我有一个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字段?

1 个答案:

答案 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