我为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中的所有文档都包含_id
和docId
保持相同的值。由于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