Skip to content
анализатор логов

Ниже — набор практичных терминальных команд и one‑liner’ов для быстрого анализа access‑логов (Apache/Nginx, Common/Combined). Команды даю с кратким пояснением — запускайте их на файлах журналов. Помните про права доступа к логам и не выкладывайте их в публичные каналы.

Базовые: посмотреть последние строки / следить в реальном времени

# последние 200 строк
tail -n 200 /var/log/nginx/access.log

# следить (в реальном времени)
tail -f /var/log/nginx/access.log

Топ IP (кто больше всего запрашивал)

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

Топ запрошенных URL (путь/ресурс)

# вытянуть "request" и взять второй токен (URI)
awk -F\" '{print $2}' /var/log/nginx/access.log | awk '{print $2}' | sort | uniq -c | sort -rn | head

Статусы (HTTP codes) — сколько и какие

# если Combined/CLF — статус обычно в $9
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
# или надёжнее через field после кавычек
awk -F\" '{print $3}' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn

Топ referrers и user agents

# referrers (поле после второго кавычки)
awk -F\" '{print $4}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

# user agents (обычно $6 после разделения по кавычкам)
awk -F\" '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

Ошибки 4xx / 5xx и какие страницы вызывают 404

# все 4xx и 5xx (с подсчётом по коду)
awk -F\" '{code = $3; sub(/^ */, "", code); split(code, a, " "); if (a[1] ~ /^[45]/) print a[1]}' /var/log/nginx/access.log \
| sort | uniq -c | sort -rn

# самые частые URI, которые вернули 404
awk -F\" '$3 ~ / 404 / {print $2}' /var/log/nginx/access.log | awk '{print $2}' | sort | uniq -c | sort -rn | head

Сумма переданных байт по IP (трафик)

# в Combined формате размер — в третьем блоке после кавычек (обычно $3 -> второй токен)
awk -F\" '{split($3,a," "); bytes=a[2]; ip=($1); split(ip,b," "); print b[1], (bytes=="-"?0:bytes)}' /var/log/nginx/access.log \
| awk '{sum[$1]+=$2} END{for (i in sum) print sum[i], i}' | sort -rn | head

Запросы в минуту (простая агрегация по минутам)

# вытащить timestamp like 10/Oct/2000:13:55 (до минуты)
awk '{t=substr($4,2,17); print t}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

Найти самые медленные запросы (если у вас в логе есть время ответа, например nginx $request_time как последнее поле)

# если request_time — последнее поле
awk '{rt=$NF; $NF=""; print rt, $0}' /var/log/nginx/access.log | sort -nr | head

# альтернативно: вывести топ 20 по времени (если формат другой — адаптируйте вывод поля)
awk '{print $NF, $0}' /var/log/nginx/access.log | sort -k1,1nr | head -n 20

Анализ сжатых логов (gz, bz2, xz)

# gzip
zcat access.log.1.gz | awk -F\" '{print $2}' | awk '{print $2}' | sort | uniq -c | sort -rn | head

# bzip2
bzcat access.log.1.bz2 | ...

# xz
xzcat access.log.1.xz | ...

Поиск по времени / ошибке / IP (grep + контекст)

# все ошибки 500 в логах за последние 10000 строк
tail -n 10000 /var/log/nginx/access.log | grep ' 500 ' -n

# конкретный IP
grep '^1.2.3.4 ' /var/log/nginx/access.log | tail -n 200

Анонимизация IP (на случай расшаривания логов)

# заменить последний октет на XXX
sed -E 's/([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+/\1.XXX/g' /var/log/nginx/access.log > anonymized.log

Comments (0)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Back To Top