【问题标题】:How can I create a histogram of time stamp deltas?如何创建时间戳增量的直方图?
【发布时间】:2016-02-14 14:51:23
【问题描述】:

我们在 ES 中存储小文档,代表对象的一系列事件。每个事件都有一个日期/时间戳。我们需要分析一段时间内所有对象的事件之间的时间。

例如,想象一下这些事件 json 文档:

{ "object":"one", "event":"start", "datetime":"2016-02-09 11:23:01" }

{ "object":"one", "event":"stop", "datetime":"2016-02-09 11:25:01" }

{ "object":"two", "event":"start", "datetime":"2016-01-02 11:23:01" }

{ "object":"two", "event":"stop", "datetime":"2016-01-02 11:24:01" }

我们希望从中得到一个直方图,绘制两个生成的时间戳增量(从开始到停止):对象一为 2 分钟/120 秒,对象二为 1 分钟/60 秒。

最终我们想要监控开始和停止事件之间的时间,但它要求我们计算这些事件之间的时间,然后聚合它们或将它们提供给 Kibana UI 以进行聚合/绘制。理想情况下,我们希望将结果直接提供给 Kibana,这样我们就可以避免创建任何自定义 UI。

提前感谢您的任何想法或建议。

【问题讨论】:

  • 我有几个问题。 EventA 和 EventB 属于不同的文件?查询中标识的每个对象是什么意思?您能否具体说明您想要实现的目标?
  • 好的,我将问题更新为更具体一点。如果这能更好地解释我的问题,请告诉我。
  • 我认为您当前的文档结构不可能。您可以将文档更改为具有以下字段“对象”、“事件开始时间”、“事件停止时间”
  • 没有。活动什么时候开始,我们不知道什么时候结束。同样,当事件结束时,我们没有工具来检索开始文档。
  • 我们相信使用搜索聚合是可能的:elastic.co/guide/en/elasticsearch/reference/current/… 我们只是不知道如何利用它们来配置它们来完成我们需要的工作。

标签: elasticsearch aggregation kibana


【解决方案1】:

既然您愿意使用 Logstash,有一种方法可以使用 aggregate filter

请注意,这是一个需要先安装的社区插件。 (即默认情况下它不附带 Logstash)

aggregate 过滤器的主要思想是合并两个“相关”日志行。您可以配置插件,使其知道“相关”的含义。在您的情况下,“相关”意味着两个事件必须共享相同的 object 名称(即 onetwo),然后第一个事件的 event 字段具有 start 值和第二个事件的 event 字段具有 stop 值。

当过滤器遇到start 事件时,它将该事件的datetime 字段存储在内部映射中。当遇到stop 事件时,它会计算两个日期时间之间的时间差,并将持续时间(以秒为单位)存储在新的duration 字段中。

input {
    ...
}
filter {
    ...other filters

    if [event] == "start" {
        aggregate {
            task_id => "%{object}"
            code => "map['start'] = event['datetime']"
            map_action => "create"
        }
    } else if [event] == "stop" {
        aggregate {
            task_id => "%{object}"
            code => "map['duration'] = event['datetime'] - map['start']"
            end_of_task => true
            timeout => 120
        }
    }
}
output {
    elasticsearch {
        ...
    }
}

请注意,您可以调整 timeout 值(此处为 120 秒)以更好地满足您的需求。当超时时间过去并且还没有停止事件发生时,现有的开始事件将被丢弃。

【讨论】:

  • 这行得通吗?您还有什么需要了解的吗?
  • 谢谢瓦尔。欣赏答案。看起来像我们要使用的解决方案。再次感谢。
  • 太棒了,很高兴它有帮助!
猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 2020-05-19
  • 2017-07-27
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 2014-09-03
  • 2011-06-21
相关资源
最近更新 更多