Заметки по разбору логов

Разделы

Шесть команд, которые нужны чаще всего

Смотреть хвост и остаться в нём

Показывает последние 200 строк и продолжает выводить новые. Флаг -F вместо -f переживает ротацию файла.

tail -n 200 -F /var/log/nginx/access.log

Кто чаще всех стучится

Классический счётчик частот. Первое поле в комбинированном формате nginx — адрес клиента.

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20

Только ответы 5xx

Девятое поле — код ответа. Сравнение по регулярке ловит весь диапазон целиком.

awk '$9 ~ /^5/' access.log | tail -50

Не потерять stderr

Без перенаправления в конвейер уходит только stdout, и ошибка теряется ровно тогда, когда нужна.

./deploy.sh 2>&1 | tee -a deploy.log

Что занимает место

Сортировка с -h понимает суффиксы K, M, G и не путает 900M с 1,2G.

du -sh /var/log/* | sort -h | tail -15

Быстрый поиск подстроки

-F отключает регулярные выражения, -m останавливает после нужного числа совпадений. На гигабайтном файле разница заметна.

grep -F -m 5 'connection timeout' app.log

Привычка, которая экономит вечера

Первая строка любого скрипта, который делает что-то важнее вывода даты:

#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'

Зачем. -e останавливает скрипт на первой ошибке, -u ругается на необъявленную переменную вместо подстановки пустой строки, -o pipefail возвращает ошибку, если упало любое звено конвейера, а не только последнее. Без pipefail конструкция cat missing.log | wc -l завершается успешно и печатает ноль.

var-log.online — личные заметки по администрированию. Примеры проверены на Debian и Ubuntu.