Разбор лога в консоли
Вопрос
Сервис стал отвечать медленно. У тебя есть access.log nginx и SSH. Как ты быстро поймёшь, что происходит, только стандартными утилитами?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Смотрю свежие строки: `tail -f` или `tail -n 1000`, чтобы работать с актуальным окном
Распределение кодов ответа: `awk '{print $9}' | sort | uniq -c`, ищу рост 5xx или 499
Топ URL и IP: не долбит ли один клиент или один эндпоинт
Если в логе есть `$request_time`, сортирую по нему и смотрю самые медленные запросы
Ищу всплеск по минутам: группировка по времени через `cut` или awk
Сопоставляю с логом приложения через `grep` по времени или request id
Что могут спросить следом
- Как посчитать запросы в минуту?
- Что значит код 499 в nginx?
- Как сделать то же на гигабайтном gzip-логе?
Разбор
Сначала беру актуальное окно: tail -n 10000 access.log или фильтр по времени, чтобы не смешивать с прошлой неделей. Дальше распределение кодов: awk '{print $9}' | sort | uniq -c | sort -rn. Если выросли 502 и 504, проблема в апстриме, если 499, клиенты не дожидаются ответа. Потом топ URL и топ IP тем же приёмом: часто медленно становится из-за одного тяжёлого эндпоинта или бота. Если в формат лога добавлено $request_time, сортирую по этой колонке и смотрю, какие запросы самые долгие. Чтобы найти момент начала, группирую по минутам: вырезаю время до минут и делаю uniq -c. Найдя время и URL, иду в лог приложения с grep по времени или по request id. Для сжатых логов то же самое через zcat или zgrep, и не забываю LC_ALL=C, это заметно ускоряет sort и grep на больших файлах.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.