Вычислять хиты в течение промежутка времени из файла журнала

Мне нужно использовать утилиты UNIX, которые реализуют встроенные алгоритмы разделения и покоя, чтобы уменьшить количество используемой виртуальной памяти (колпачок 1 мб). У меня большой набор данных, который является файлом журнала Apache. Я могу извлечь все IP-адреса и дату (преобразованную в unix time (s)) и сохранить ее в файле csv, называемом хитами.

ip,timestamp 62.172.72.131,1041502001 62.121.107.115,1041809792 163.28.16.1,1043258352 216.37.59.126,1044304131 68.104.188.224,1044472900 66.137.118.69,1044543502 62.172.72.131,1041502098 207.181.42.20,1044646708 205.156.184.254,1045670100 80.225.248.61,1045779615 200.44.24.157,1046214366 193.63.247.68,1046260886 66.176.248.72,1046317786 216.249.85.109,1046566502 68.44.222.12,1046638290 130.113.69.66,1048009156 143.43.220.157,1048026293 

Теперь мне нужно создать файл сеансов, который состоит из IP, времени и количества обращений. Сессия длится 30 минут. Например, для хита 62.172.72.131 он должен просмотреть файл и найти все обращения с этим IP-адресом и определить, находится ли он в этом сеансе. Седьмой хит имеет этот IP-адрес и 1041502097 - 1041502001 = 97 sec что составляет 30 минут, поэтому мы должны записать в файл сеансов 62.172.72.131,97,2 . Это необходимо группировать по IP-адресу и вычислять сеансы для этого IP-адреса, т. Е. Сеанс составляет 30 минут, если должен быть сгенерирован IP-адрес за пределами этого сеанса (> 1800 секунд), чем новая строка сеанса.

Я работал над следующим кодом

 awk 'BEGIN { FS=OFS=SUBSEP=","}{arr[$1]= $2 }END {for (i in arr) {...}}' hits.csv | sort -n 

В настоящее время я понятия не имею, как вычислять сеансы, и все дубликаты исчезают, когда я печатаю i и arr [i]. Я думал, что сортировка по IP-адресу, тогда все образы от одного и того же IP появятся последовательно.

One Solution collect form web for “Вычислять хиты в течение промежутка времени из файла журнала”

Я не уверен, что вам действительно нужно … Это в основном вклад, а не ответ.

Ниже мы вычисляем число «сеанс» и подсчитываем количество a[session][ip] хитов

 #!/usr/bin/gawk -f BEGIN { FS=OFS="," } { session = int($2/1800); a[session][$1] ++ } END { for(session in a){ for(ip in a[session]){ print a[session][ip], ip , session } } } 

Заметки:

  • 1800 = 30 м * 60 с
  • если полезная печать через sort: print a[session][ip], ip , session | "sort -Vr" print a[session][ip], ip , session | "sort -Vr"
  • Изменение каталога журналов по умолчанию btmp и wtmp
  • Могу ли я получить вчерашнюю статистику с помощью команды sar, но я установил sar сейчас
  • Получить в реальном времени stdout из контейнера докера на удаленно выполненной команде
  • Сохранять счет из файла журнала
  • Запись Bind 9 не работает
  • В каком журнале я должен проверять ошибки udev?
  • Критические сообщения от gsm и gtk
  • Узнайте, что вызывает случайные перезагрузки, если / var / log / syslog пуст
  • Расширение параметра systemd мешает синтаксису командной строки моей службы
  • Установлено netstat означает, что кто-то ssh'd в мою машину
  • Sanitize файлы журнала доступа Apache?
  • сжимать логротат
  • Linux и Unix - лучшая ОС в мире.