2015-07-20 190 views
3

我有一个logstash客户端和服务器。
客户端将带有logstash udp输出的日志文件发送到服务器,服务器也运行logstash来获取这些日志。在服务器上,我有一个json过滤器,它在实际日志的字段中提取json格式的消息,以便elasticsearch可以为它们编制索引。Logstash删除类型并保留_type

下面是从服务器我的代码:

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字段设置为默认值:日志)。

如何保留_type字段并删除type字段?

+0

很好的问题.... –

+0

你能给予充分的logstash配置文件... –

+0

@AnilkumarBathula这是所有重要的是,在完整的配置文件中只是更多的输入,一个不同的udp端口和一个与此问题无关的过滤器:'mutate {add_field => {“program”=>“apache”}}' – Klaus

回答

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