2017-02-09 64 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'的日期歷史記錄不是基於當前時間戳 –