2.19.2.3. Аналіз логів консольними командами

Аналізувати логи консольними командами можна на хостингу або на локальному ПК:

  1. Скачайте логи собі на ПК.
  2. За допомогою файл-менеджера або будь-якого FTP-клієнта завантажте скачані логи на хостинг в кореневий каталог хостинг-акаунта.
  3. Якщо логи знаходяться в архівному файлі, розпакуйте їх за допомогою файл-менеджера.
  4. Використовуйте в терміналі консольні команди, представлені нижче.
  1. Скачайте логи собі на ПК.
  2. Якщо логі знаходяться в архівному файлі, розпакуйте їх.
  3. Запустіть термінал на своєму ПК:
    • У Windows — потрібна наявність встановленого WSL або Cygwin. Якщо з їх встановленням є складнощі, скористайтеся простішим аналізом на хостингу.
    • У Linux — можна використовувати стандартний термінал.
    • У macOS — можна використовувати стандартний термінал.
  4. Використовуйте в терміналі консольні команди, представлені нижче.
У всіх командах замість access.log вказуйте назву завантаженого файлу логу або повний шлях до нього.

Коди відповіді сервера в порядку зменшення їх кількості:

awk '{print $9}' access.log | sort | uniq -c | sort -r

25 найактивніших IP:

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

Кількість запитів з кожного IP у порядку убування:

cat access.log | awk '{print "requests from " $1}' | sort | uniq -c | sort -r

10 найпопулярніших Referer:

cat access.log | awk -F \" ' { print $4 } ' | grep -v '-' | sort | uniq -c | sort -rn | head -n 10

10 найпопулярніших User-Agent:

cat access.log | awk -F \" ' { print $6 } ' | sort | uniq -c | sort -rn | head -n 10

Загальна кількість запитів за день:

awk '{print $4}' access.log | cut -d: -f1 | uniq -c

Погодинна кількість запитів за день:

  • Якщо лог містить інформацію тільки за один день:
    cat access.log | cut -d [ -f2 | cut -d] -f1 | awk -F: '{print $2":00"}' | sort -n | uniq -c
  • Якщо лог містить інформацію за кілька днів (замість DD/Mon вставте потрібний день місяця і перші три літери назви місяця англійською мовою):
    grep "DD/Mon" access.log | cut -d [ -f2 | cut -d] -f1 | awk -F: '{print $2":00"}' | sort -n | uniq -c

Похвилинна кількість запитів за вказану годину вказаного дня (замість DD/Mon/YEAR:HH вставте потрібний день місяця, перші три літери назви місяця англійською мовою, рік і годину):

grep "DD/Mon/YEAR:HH" access.log | cut -d [ -f2 | cut -d] -f1 | awk -F: '{print $2":"$3}' | sort -nk1 -nk2 | uniq -c | awk '{ if ($1 > 10) print $0}'

Кількість унікальних відвідувачів:

cat access.log | awk '{print $1}' | sort | uniq -c | wc -l

25 найпопулярніших URI:

cat access.log | awk '{ print $7 }' | sort | uniq -c | sort -rn | head -n 25

Список унікальних IP:

cat access.log | awk '{print $1}' | sort | uniq

Список унікальних IP з датою і часом за кожним запитом від них:

cat access.log | awk '{print $1 " " $4}' | sort | uniq

Список унікальних IP з датою, часом і методом для кожного запиту від них:

cat access.log | awk '{print $1 " " $4 " " $6}' | sort | uniq

Список унікальних IP з датою, часом і URI за кожним запитом від них:

cat access.log | awk '{print $1 " " $4 " " $7}' | sort | uniq
Зміст

    (1)