在Logstash中删除Elasticsearch之前用于document_id的重复字段

时间:2014-09-18 06:09:58

标签: elasticsearch logstash

我为Logstash编写了自己的过滤器,我正在尝试计算我自己的document_id这样的东西:

  docIdClean = "%d %s %s %s" % [ event["@timestamp"].to_f * 1000, event["type"], event["message"] ]    
  event["docId"] = Digest::MD5.hexdigest(docIdClean)

Logstash配置如下所示:

output {
  elasticsearch {
    ...
    index => "analysis-%{+YYYY.MM.dd}"
    document_id => "%{docId}"
    template_name => "logstash_per_index"
  }
}

或多或少的缺点是Elasticsearch中的所有文档都包含_iddocId保持相同的值。由于docId完全没有意义,因为没有人搜索MD5哈希我想删除它,但我不知道如何。

当事件命中输出时,docId必须存在,否则输出不能引用它。因此,我无法事先将其删除。由于我之后无法移除它,docId占据了空间。

我尝试设置事件字段_id,但这只会导致Elasticsearch中的异常,即文档的ID不同。

也许在这里解释一个文件:

  {
    "_index": "analysis-2014.09.16",
    "_type": "access",
    "_id": "022d9055423cdd0756b6cfa06886f866",
    "_score": 1,
    "_source": {
      "@timestamp": "2014-09-16T19:36:31.000+02:00",
      "type": "access",
      "tags": [
        "personalized"
      ],
      "importDate": "2014/09/17",
      "docId": "022d9055423cdd0756b6cfa06886f866"
    }
  }

编辑:
这是关于Logstash 1.3

1 个答案:

答案 0 :(得分:0)

在Logstash 1.4中你无能为力。

在Logstash 1.5中,您可以使用@metadata fields,但不会传递给Elasticsearch。