Давно не было ничего на тему полезных bash команд. Решил немного оживить рубрику. Рассмотрю несколько примеров, которые могут пригодиться на практике при работе с веб сервером.С помощью grep и регулярного выражения смотрим список всех IP адресов в логе:
Выводим только уникальные ip адреса:
А теперь считаем их количество:
10 самых активных IP адресов с наибольшим количеством запросов:
Не обязательно ip адреса грепать именно по регулярке. Можно взять awk и выводить первый столбец. Результат будет тот же самый, но с регуляркой более универсальное решение, которое сработает на любом лог файле, где есть ip адреса. Пример с awk будет ниже.
10 самых популярных url:
Подсчитать количество 500-х ошибок:
Обращаю внимание на номер столбца $10. У вас он может отличаться в зависимости от формата лога nginx или apache. Я обычно немного изменяю стандартный формат, добавляя несколько дополнительных столбцов.
Вывести ip адрес и url запроса, где была 500 ошибка:
Данные примеры легко модифицируются под практически любые запросы информации из логов. Достаточно немного потренироваться и разобраться в синтаксисе. Ниже ещё немного того, что может пригодиться. Например, ограничение лога по времени. К нему далее можно применять все предыдущие выборки.
Вывести все записи лога в интервале 20.02.2022 15:20 - 16:20
Просмотр установленных соединений к веб серверу, а также их подсчёт:
Забирайте в закладки, чтобы потом не искать и не вспоминать, как написать. Bash такая штука, если постоянно на нём не пишешь, то очень долго рожаешь решения. Поэтому я всегда и всё записываю, чтобы потом просто брать готовые конструкции и немного модифицировать по необходимости. Хотя бы не приходится вспоминать утилиты и ключи. Со временем забывается. Например, я частенько забываю про утилиту uniq, а потом думаю, как бы мне повторяющиеся строки отсечь.
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log
Выводим только уникальные ip адреса:
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort | uniq
А теперь считаем их количество:
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort | uniq | wc -l
10 самых активных IP адресов с наибольшим количеством запросов:
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort | uniq -c | sort -n -r | head -10
Не обязательно ip адреса грепать именно по регулярке. Можно взять awk и выводить первый столбец. Результат будет тот же самый, но с регуляркой более универсальное решение, которое сработает на любом лог файле, где есть ip адреса. Пример с awk будет ниже.
10 самых популярных url:
awk '{print $7}' access.log | sort | uniq -c | sort -n -r | head -10
Подсчитать количество 500-х ошибок:
awk '{print $10}' access.log | grep 500 | wc -l
Обращаю внимание на номер столбца $10. У вас он может отличаться в зависимости от формата лога nginx или apache. Я обычно немного изменяю стандартный формат, добавляя несколько дополнительных столбцов.
Вывести ip адрес и url запроса, где была 500 ошибка:
grep 'status=500' access.log | awk '{print $1,$7}'
Данные примеры легко модифицируются под практически любые запросы информации из логов. Достаточно немного потренироваться и разобраться в синтаксисе. Ниже ещё немного того, что может пригодиться. Например, ограничение лога по времени. К нему далее можно применять все предыдущие выборки.
Вывести все записи лога в интервале 20.02.2022 15:20 - 16:20
cat access.log | sed -n '/20\/Feb\/2022:15:20/,/20\/Feb\/2022:16:20/p'
Просмотр установленных соединений к веб серверу, а также их подсчёт:
netstat -tan | grep "ESTABLISHED" | grep ":443"
netstat -tan | grep "ESTABLISHED" | grep ":443" | wc -l
Забирайте в закладки, чтобы потом не искать и не вспоминать, как написать. Bash такая штука, если постоянно на нём не пишешь, то очень долго рожаешь решения. Поэтому я всегда и всё записываю, чтобы потом просто брать готовые конструкции и немного модифицировать по необходимости. Хотя бы не приходится вспоминать утилиты и ключи. Со временем забывается. Например, я частенько забываю про утилиту uniq, а потом думаю, как бы мне повторяющиеся строки отсечь.
Отправить комментарий