@wtfowned

Как вывести таблицу с обращениями из логов к множеству сайтов по IP / Useragent?

Доброго дня!
Есть несколько десятков доменов, мне нужно периодически чекать сколько обращений было опредеелнными юзерагентами к контенту сайтов, в частности GoogleBot-Image / GoogleBot-News / YandexBot , а также ResponseCode.

Сейчас по конкретному домену делаю вот так:
cat domain.net.log | grep -i googlebot-image | awk '{print $9}' | sort | uniq -c | sort -nr
    377 200
     25 301


Не могу сообразить как мне получить список всех лог файлов из папки /var/log/apache2/domains которые попадают под условия (дата изменения + название файла).

Хотелось бы получить соответствующий вывод по списку масок доменов (например задаю не полное название домена, а фрагмент, типа *book*.com ) из файла стороннего или напрямую введенных, в таком виде:

domain_mask | count | response_code
domain1         | 50000| 200
domain1         | 100    | 404
domain2         | 300    | 200
domainN        | N        | n


P.S. Не забудьте оставить контакты, отблагодарю :)
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
Почитайте про ELK, возможно это то, что вы ищете.

Видеообзоры с примерами:
https://www.youtube.com/watch?v=Kqs7UcCJquM
https://www.youtube.com/watch?v=4X0WLg05ASw
https://www.youtube.com/watch?v=Hqn5p67uev4
Ответ написан
Комментировать
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Ну примерно как-то так:
find ./ -type f -name "<домен>*" -mtime <время последнего изменения файла (в днях)> -exec grep googlebot-image {} \; | awk '{print $9}' | sort | uniq -c | sort -nr | awk '{print "<домен>", $1, $2 }'


Если доменов несколько - то предварительно выполнить поиск по маске домена, вывести уникальные записи в текстовый файл, и обернуть выше приведенную строку скрипта в цикл по домену.
Тогда вместо <домен> будет просто переменная из цикла

while read domain; do
    find ./ -type f -name "${domain}*" -mtime <время последнего изменения файла (в днях)> -exec grep googlebot-image {} \; | awk '{print $9}' | sort | uniq -c | sort -nr | awk '{print "${domain}", $1, $2 }'
done <domains_list.txt


З.Ы. Под рукой консоли нет проверить
Ответ написан
@wtfowned Автор вопроса
Еще вариант вывода нашел, тоже без вывода названия файла лога / домена:
{ command1 ; command2 ; command3 } > output.txt
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы