Elasticsearch使用序列日期差异查询使用历史数据的会话数

时间:2017-02-09 16:17:06

标签: elasticsearch kibana

示例数据:https://jsonblob.com/ecc7c22f-eee3-11e6-90ab-abf5eb463423

One User Illustration

我们希望使用ElasticSearch中的匹配来计算用户的会话总数。

会话的定义:

  • 如果特定用户的2次点击之间的时间差> 30分钟,它将被视为2个不同的会议。
  • 如果特定用户的2次点击之间的时间差<1。 30分钟,它将被视为1个会议。

附件图片仅显示一位用户。我们想为一组多个用户解决这个问题。

1 个答案:

答案 0 :(得分:1)

然后我建议利用aggregate logstash filter,它可以完全用于此目的,即tracking user behavior

filter部分中,您需要添加以下aggregate过滤条件:

filter {
  aggregate {
    task_id => "%{user_id}"
    code => "map['actions'] ||= 0; map['actions'] += 1; map['started'] = event['updated_on'] unless map['started']"
    push_map_as_event_on_timeout => true
    timeout_task_id_field => "user_id"
    timeout => 1800 # 30 minutes timeout
    timeout_tags => ['_sessiontimeout']
    timeout_code => "event['session_started'] = map['started']; event['session_ended'] = event['updated_on']; "      }
}

三十分钟之后,你会得到一个类似下面的事件,并且很容易在Kibana中绘制它们

{
  "user_id": "157",
  "actions": 23,
    "tags": [
       "_sessiontimeout"
    ]
}

确保使用-w 1开关

的单个工作线程运行logstash