【问题标题】:Logstash delete type and keep _typeLogstash 删除类型并保留 _type
【发布时间】:2015-10-09 08:31:44
【问题描述】:

我有一个 logstash 客户端和服务器。
客户端将带有logstash的udp输出的日志文件发送到服务器,服务器也运行logstash来获取这些日志。在服务器上,我有一个 json 过滤器,它在实际日志的字段中提取 json 格式的消息,以便弹性搜索可以索引它们。

这是我的服务器代码:

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-过滤器删除type-字段,如下所示:

mutate{
  remove_field => [ "type" ]
}

但此过滤器会删除两个 type 字段。(_type 字段设置为默认值:logs

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

【问题讨论】:

  • 能否给出完整的logstash配置文件...
  • @AnilkumarBathula 这才是最重要的,在完整的配置文件中只是更多的输入、不同的 udp 端口​​和与此问题无关的过滤器:mutate{add_field=>{"program"=>"apache"}}
  • 我觉得这两个字段其实是同一个内存,如果_source中没有type字段,那_type会自动输出为“logs” .
  • 是的@克劳斯。但我在想的是这个type 是如何创建的
  • @Anilkumar 我认为在文件输入中设置类型会设置 _source 中的类型,而 _type 只是某种类型的指针。

标签: json elasticsearch logstash


【解决方案1】:

它以这种方式对我有用:

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

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多