2017-02-09 20 views
1

样本数据使用历史数据会话的:https://jsonblob.com/ecc7c22f-eee3-11e6-90ab-abf5eb463423Elasticsearch查询到计数使用串行日期的差异

One User Illustration

我们要计算使用安打ElasticSearch我们的用户的会话总数。会话的

定义:

  • 如果2个命中的特定用户>至30分钟之间的时间差,它会被认为是2个不同的会话。
  • 如果特定用户的2次点击之间的时间差异为30分钟,则将其视为1次会话。

附图仅给出一个用户的说明。我们想为一组多个用户解决这个问题。

+0

你如何将数据加载到ES运行logstash?通过Logstash? – Val

+0

是使用logstash,从mysql索引的数据,觉得elasticsearch给出的结果比mysql快,elasticsearch有助于以可视方式查找模式 –

+0

也可以共享一些示例日志文件吗? – Val

回答

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']; "  } 
} 

30分钟后,你会得到以下像一个事件,它会很容易图表他们Kibana

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

确保您有一个工作线程与-w 1开关

+0

如何使用这个聚合过滤器与存储的数据从MySQL到ES。 https://jsonblob.com/ecc7c22f-eee3-11e6-90ab-abf5eb463423 –

+0

您可以使用与现在一样的logstash配置,但在过滤器部分中添加了“聚合”过滤器并重新运行logstash。 – Val

+0

但无处可见'updated_on'。基于历史'updated_on'的日期历史记录不是基于当前时间戳 –