Я собираю nginx web access and error logs в Elastic с помощью Filebeat.
Хочу чтобы была dashboard, в которой была вот такая информация:
количество посетителей за период времени. Сейчас есть количество requests, но нужно именно посетителей. Понятно, что так как у меня только web access логи, то посетителей точно не отследишь. Но достаточно будет определить посетителя по IP + UA-agent.
Также было бы очень неплохо иметь метрику по среднему времени, сколько посетитель проводит на сайте (вроде бы это называется session duration).
Это можно сделать в Kibana?
Или надо что-то дополнительно прикручивать?
Количество уникальных пар за единицу времени можно рассчитать с помощью cardinality agg. Либо скриптом, либо создав специальное поле во время индексации.
Если у вас только IP+UA-agent и у вас 2 запроса сегодня с этой пары и один завтра, это сколько времени считается?
Обычно сессии считают по некоторому набору правил. Я бы сделал как в GA:
сессия считается законченной, если 30 минут не было requests от пользователя. Если через 30 минут появляются новый requests от пользователся - то это новая сессия.
Такой алгоритм в elasticsearch существующими средствами по индексу лога реализовать сложно. Надо добавить другой индекс с записью на каждого "пользователя" Могу порекомендовать вот эту презентацию (на английском). Там есть интересные идеи и примеры на эту тему
@Igor_Motov,
Что вы имеете в виду "добавить поле"?
Я же добавил scripted field.
Или вы имеете в виду, что его надо добавлять во время ingestion? То есть поменять pipeline, чтобы он сохранял source.address + user_agent.original как отдельный field?
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.