Выборка записей из серверного журнала с фильтром количества повторений IP адреса за интервал времени

Возникла необходимость анализа серверных журналов на предмет определенной активности посетителей. Нужно отбирать записи по количеству повторений запросов за определенный интервал времени с одного IP адреса и плюс еще отфильтровывать их по строке запроса.

Чтобы понятнее объяснить, что именно нужно, вот постарался составить конкретную задачу на примере отрывка серверного журнала.

Итак имеем вот такие записи в журнале...

46.211.213.140 - - [28/Nov/2024:00:15:43 +0200] "GET /image/cache/catalog/product/texac/7/texac_taoe-s12_c5e101e6-400x400.jpg HTTP/2.0" 200 17478 "https://planeta-i.com.ua/akb-instrument/akkumulyatornye-pily-tsepnye-sadovye/tsepnaya-pila-akkumulyatornaya-texac-taoe-s12?gclid=Cj0KCQiAo5u6BhDJARIsAAVoDWsetshle_3vD_Egm7_Uc7x-s8IRqteO328MeS7uQ5pKzbHd0TBDQ9MaAuN8EALw_wcB" "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36"
45.154.98.129 - - [28/Nov/2024:02:22:14 +0200] "GET / HTTP/1.1" 301 577 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
45.154.98.129 - - [28/Nov/2024:02:23:13 +0200] "GET //blog/wp-includes/wlwmanifest.xml HTTP/1.1" 404 337695 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
89.209.197.240 - - [28/Nov/2024:09:03:43 +0200] "GET /catalog/view/javascript/ocdevwizard/helper/swiper/swiper.min.css HTTP/2.0" 200 4142 "https://planeta-i.com.ua/stanki/stanki-sverlilnye/sverdlilnij-verstat-procraft-bd1950?gclid=Cj0KCQiAo5u6BhDJARIsAAVoDWvjiuypU3OhhXtD9LD2Qgs2YnpcBVl9XY3vkQ3Ut18AkzBSLyI8fhoaAkssEALw_wcB" "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36"
166.108.237.181 - - [28/Nov/2024:09:03:43 +0200] "GET /catalog/view/javascript/ocdevwizard/recommended_products/main.js?v=1.0.4 HTTP/2.0" 200 553 "https://planeta-i.com.ua/stanki/stanki-sverlilnye/sverdlilnij-verstat-procraft-bd1950?gclid=Cj0KCQiAo5u6BhDJARIsAAVoDWvjiuypU3OhhXtD9LD2Qgs2YnpcBVl9XY3vkQ3Ut18AkzBSLyI8fhoaAkssEALw_wcB" "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36"
166.108.237.181 - - [28/Nov/2024:09:03:43 +0200] "GET /catalog/view/theme/cyberstore/js/fancybox/jquery.fancybox.min.js HTTP/2.0" 200 16884 "https://planeta-i.com.ua/stanki/stanki-sverlilnye/sverdlilnij-verstat-procraft-bd1950?gclid=Cj0KCQiAo5u6BhDJARIsAAVoDWvjiuypU3OhhXtD9LD2Qgs2YnpcBVl9XY3vkQ3Ut18AkzBSLyI8fhoaAkssEALw_wcB" "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36"
78.152.171.162 - - [28/Nov/2024:11:47:29 +0200] "GET /catalog/view/theme/cyberstore/stylesheet/bootstrap/fonts/glyphicons-halflings-regular.woff2 HTTP/2.0" 200 18087 "https://planeta-i.com.ua/akb-instrument/akkumulyatornye-pily-tsepnye-sadovye/tsepnaya-pila-akkumulyatornaya-texac-taoe-s12?gclid=EAIaIQobChMI-f6pud_-iQMVFU2RBR0dGgmGEAQYGCABEgL55_D_BwE" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
45.154.98.129 - - [28/Nov/2024:11:47:29 +0200] "GET /catalog/view/theme/cyberstore/font-awesome/fonts/fontawesome-webfont.woff2?v=4.7.0 HTTP/2.0" 200 77269 "https://planeta-i.com.ua/akb-instrument/akkumulyatornye-pily-tsepnye-sadovye/tsepnaya-pila-akkumulyatornaya-texac-taoe-s12?gclid=EAIaIQobChMI-f6pud_-iQMVFU2RBR0dGgmGEAQYGCABEgL55_D_BwE" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
45.154.98.129 - - [28/Nov/2024:11:47:29 +0200] "GET /catalog/view/theme/cyberstore/font-awesome/css/font-awesome.min.css?cs2v=1.4 HTTP/2.0" 200 7107 "https://planeta-i.com.ua/akb-instrument/akkumulyatornye-pily-tsepnye-sadovye/tsepnaya-pila-akkumulyatornaya-texac-taoe-s12?gclid=EAIaIQobChMI-f6pud_-iQMVFU2RBR0dGgmGEAQYGCABEgL55_D_BwE" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"

Как можно (какой конкретно командой или мини скриптом) из этого журнала выбрать те IP-адреса, которые были внесены с 2 часов ночи до 10 часов утра, запрос делался методом GET, запрос начинался с "/catalog", количество повторений IP адреса 1-2 раза?

Если не совсем понятно сформулировал критерии, то могу написать так:

  • время в промежутке: не менне 02:00 и не более 10:00
  • метод запроса GET
  • количество повторений IP-адреса в журнале за вышеуказанное время от 1-го до 2-х раз включительно. Т.е. если с какого-то IP адреса было 3 и более запроса за вышеуказанное время, то такие IP отбирать НЕ нужно.
  • строка запроса по маске начинается с ~ "GET /catalog.*"

Выборку желательно сделать в формате {IP_addr} -> {колич. повт.}

То есть на выходе должно получиться следующее: 166.108.237.181 -> 2


Ответы (0 шт):