json - Logstash 删除类型并保留 _type

标签 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,它们具有相同的内容。

我试过使用 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/

相关文章:

ruby-on-rails - 使用 Ruby on Rails 解析 Json 数据

php - 如何在 PHPUnit/Laravel 中模拟 JSON 文件

elasticsearch - 从URL GROK模式中提取参数(子字符串)

elasticsearch - 排序时,Elasticsearch 5会做什么?

elasticsearch - 如何使用关键字分析器进行搜索?

elasticsearch - 启动 Log Stash 时出错 需要 [\\t\\r\\n] 之一

elasticsearch - 使用带文件拍的logstash时出现权限错误

添加bind_parameter以防止SQL注入(inject)后,Javascript和PHP代码不再起作用

javascript - 使用 javascript 设置 Coldfusion 变量以便在同一页面上的 Replace() 中使用?

elasticsearch - 什么是IElasticSearchResponse.NumberOfRetries的Elasticsearch.Net 2.x等效项?