示例数据:https://jsonblob.com/ecc7c22f-eee3-11e6-90ab-abf5eb463423
我们希望使用ElasticSearch中的匹配来计算用户的会话总数。
会话的定义:
附件图片仅显示一位用户。我们想为一组多个用户解决这个问题。
答案 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
开关