首页 > 解决方案 > 如何在 Kibana 中显示来自 Elasticsearch 的最新值的唯一计数

问题描述

我是 ELK 的新手。我创建了名为“ordersatus”的索引,其中存储了物流合作伙伴发布的状态。

每当物流合作伙伴更新订单状态时,就会将新状态推送到 elasticseach。

现在每个订单都有多个订单状态,如“订单确认”、“预约计划”、“发货”等。

当我需要查看有多少订单处于哪种状态时,就会出现问题。总订单数为 2,但在订单状态下,我得到总订单数 4。因为它也计算旧值。正如您在随附的屏幕截图中看到的那样。

我想显示所有独特的订单状态以及具有该状态的订单计数。IE

订单状态 | 总数

预约_确认 | 1
ASSIGN_FOR_DELIVERY | 1

截至目前,其显示订单状态为“CONFIRMED”,计数为 2。这是这两个订单的旧值。

截图 1 截图2

标签: elasticsearchkibanaelastic-stack

解决方案


作为一种解决方法,您可以将以下内容添加到 logstash 配置中,以便为每个状态添加权重。当状态从之前的状态转变时,在之前的状态权重上加-1 ,在新的状态权重上加1

if [status] == "ORDER CONFIRM" {

  mutate { "add_field" => { "order_confirm_weight" => "1" } }
  mutate { convert => { "order_confirm_weight" => "integer" }}

} else if [status] == "APPOINTMENT SCHEDULED" {

  mutate { "add_field" => { "order_confirm_weight" => "-1" } }
  mutate { convert => { "order_confirm_weight" => "integer" }}

  mutate { "add_field" => { "appointment_scheduled_weight" => "1" } }
  mutate { convert => { "appointment_scheduled_weight" => "integer" }}  

} else if [status] == "OUT FOR DELIVERY" {

  mutate { "add_field" => { "appointment_scheduled_weight" => "-1" } }
  mutate { convert => { "appointment_scheduled_weight" => "integer" }}  

  mutate { "add_field" => { "out_for_delivery_weight" => "1" } }
  mutate { convert => { "out_for_delivery_weight" => "integer" }}  

}

将配置添加到 logstash 后,您可以使用以下聚合函数获取 kibana 可视化中每个状态的计数。

ORDER CONFIRM Count = Sum (order_confirm_weight)
APPOINTMENT SCHEDULED Count = Sum (appointment_scheduled_weight)
OUT FOR DELIVERY Count = Sum (out_for_delivery_weight)

推荐阅读