我的文件包含字段account_id(我的关系数据库的主键)和状态。每当帐户状态发生变化时,我都会将事件推送到ElasticSearch。
因此,在一段时间内,对于具有不同状态的帐户,将有多个文档。
我的要求是获取每个account_id的最新文档,并根据状态进行计数。
SQL等效“按状态从帐户组中选择状态,计数(*);”
示例:请考虑以下日志
account_id: 1, status:delete, @timestamp: November 4th 2017, 18:42:09.445
account_id: 1, status:save, @timestamp: November 3rd 2017, 18:42:09.445
account_id: 1, status:draft, @timestamp: November 2nd 2017, 19:42:09.445
account_id: 2, status:draft, @timestamp: November 3rd 2017, 19:42:09.445
account_id: 3, status:save, @timestamp: November 4th 2017, 18:42:09.445
account_id: 3, status:draft, @timestamp: November 3rd 2017, 19:42:09.445
输出应为:
**status** **count**
delete 1
save 1
draft 1
ELK:5.6
答案 0 :(得分:0)
至少自2013年以来,Kibana一直要求使用此功能。我们停止等待,并使用graphana,它可以做到这一点。如果你可以遵循所有github引用,看起来弹性可能有do it now的方法。
答案 1 :(得分:0)
现在作为一种解决方法,我更新了我的logstash.conf,以便将相同的日志消息推送到两个索引。在第一个索引中,我总是创建一个新记录,在第二个索引中,我创建/更新记录。
logstash.conf的片段
output {
if [index_name] == "Account" {
elasticsearch {
hosts => ["IP:PORT"]
index => "account"
}
}
stdout { codec => rubydebug }
}
output {
if [index_name] == "Account" {
elasticsearch {
hosts => ["IP:PORT"]
index => "account_latest"
document_id => "%{field_id}"
}
}
stdout { codec => rubydebug }
}