Dashboard для web-аналитики: количество посетителей и продолжительность сессии

Я собираю nginx web access and error logs в Elastic с помощью Filebeat.

Хочу чтобы была dashboard, в которой была вот такая информация:

  • количество посетителей за период времени. Сейчас есть количество requests, но нужно именно посетителей. Понятно, что так как у меня только web access логи, то посетителей точно не отследишь. Но достаточно будет определить посетителя по IP + UA-agent.

Также было бы очень неплохо иметь метрику по среднему времени, сколько посетитель проводит на сайте (вроде бы это называется session duration).

Это можно сделать в Kibana?
Или надо что-то дополнительно прикручивать?

Может кто возьмётся сделать за $$?

Количество уникальных пар за единицу времени можно рассчитать с помощью cardinality agg. Либо скриптом, либо создав специальное поле во время индексации.

Если у вас только IP+UA-agent и у вас 2 запроса сегодня с этой пары и один завтра, это сколько времени считается?

1 Like

Обычно сессии считают по некоторому набору правил. Я бы сделал как в GA:

  • сессия считается законченной, если 30 минут не было requests от пользователя. Если через 30 минут появляются новый requests от пользователся - то это новая сессия.

Такой алгоритм в elasticsearch существующими средствами по индексу лога реализовать сложно. Надо добавить другой индекс с записью на каждого "пользователя" Могу порекомендовать вот эту презентацию (на английском). Там есть интересные идеи и примеры на эту тему

Благодарю за подсказку.

Сделал "Scripted field":

doc['source.address'].value + '-'  + doc['user_agent.original'].value

По нему сделал Visualisation.
Работает. Но тормозит... Даже Last 24 hours считает несколько минут:

Да, скрипт будет тормозить. Для ускорения надо добавить поле.

1 Like

@Igor_Motov,
Что вы имеете в виду "добавить поле"?

Я же добавил scripted field.

Или вы имеете в виду, что его надо добавлять во время ingestion? То есть поменять pipeline, чтобы он сохранял source.address + user_agent.original как отдельный field?

Не скриптед - надо настоящее поле.

Именно!

1 Like

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.