Топ-10 источников 4xx из access-лога hard
- name
nginx-log-top- image
labctl-base:3.12- timeout
- 30s
- tags
- shell, awk, parsing, logs
задание
Топ-10 источников 4xx из access-лога
В /var/log/nginx/access.log лежит ~50 000 строк настоящего nginx-формата
(combined). Напишите однострочник (pipeline), который найдёт топ-10 IP-адресов
по числу запросов с HTTP-статусом 4xx и сохранит результат в /tmp/top4xx.csv
в формате count,ip (count по убыванию, без заголовка).
Формат лога
203.0.113.1 - - [10/Jul/2026:03:42:11 +0000] "GET /api/users HTTP/1.1" 404 178 "-" "curl/8"
198.51.100.7 - - [10/Jul/2026:03:42:11 +0000] "POST /login HTTP/1.1" 200 45 "-" "Mozilla/5.0"
Первое поле — IP, после кавычек запрос, затем статус (поле №9 по пробелу),
затем размер.
Ожидаемый результат
/tmp/top4xx.csv содержит ровно 10 строк вида:
429,203.0.113.1
312,198.51.100.7
...
17,192.0.2.55
Сортировка — по убыванию count. При равном count порядок не важен.
Почему это hard
Нужно скомбинировать awk (фильтр по статусу + агрегация по ключу),
sort + uniq -c (или целиком внутри awk), head -10, и записать в файл.
Тонкости:
- статусное поле — девятое, его достают $9, но только при правильном
разделителе (по умолчанию awk делит по пробелам — это работает для
combined-формата).
- «4xx» = статус от 400 до 499 включительно.
- uniq -c дописывает лидирующие пробелы — их обычно отрезают sed/awk.
В CSV 42,1.2.3.4 (с пробелами) ≠ 42,1.2.3.4.
терминал
закрывается при остановке сессии · Ctrl+D чтобы выйти · F11 полный экран
подсказки
⚠ открытые подсказки учитываются в рейтинге
попытки
- загрузка…