Логи (log-файли, журнали) — це текстові файли, куди автоматично записуються всі події, що відбувалися у комп’ютерній системі. Їхня основна мета — допомогти визначити, чому на сайті або в програмі виникає помилка, а також знайти того, хто вчинив якусь дію.
Докладніше про те, як знайти логи в Linux і як їх обробляти — розповідаємо у статті.
Зміст
Види логів
Різні програми на сервері зазвичай генерують власні лог-файли. Ось найбільш основні з них:
- головний системний лог — загальна інформація про систему, починаючи з моменту її запуску (дані про дії з ядром Linux, виявлені пристрої, мережеві інтерфейси, роботу різних служб на кшталт FTP-сервера або DNS-сервера, і ще багато про що інше).
- лог завантаження системи — повідомлення від ядра. Сюди записуються дані про пристрої, які завантажуються разом із системою. За допомогою цього лога можна виконати налагодження системи, якщо вона не завантажується.
- журнал авторизації користувачів — інформація про авторизацію користувачів. Тут ви знайдете записи про успішні та неуспішні спроби входу в систему, логіни користувачів, механізми автентифікації.
- логі веб-сервера — журнал запитів до веб-сервера, інформація про помилки. Ця інформація допоможе знайти биті посилання та причини помилок на сайті, а також покаже, хто надто сильно навантажує сервер або намагається його зламати.
- лог поштового сервера — записи про всі надіслані та доставлені повідомлення, помилки поштового сервера, причини відхилення листів.
- логи бази даних — запити до баз даних, помилки сервера.
- логи планувальника Cron — протокол виконаних завдань, повідомлення від самих команд, помилки під час запуску крона.
Це далеко не всі логи, а лише ті, які на наш досвід використовують найчастіше. Залежно від того, яке програмне забезпечення встановлено на сервері, у вас можуть бути й інші лог-файли.
Як знайти логи
Доступ до логів буде відрізнятися залежно від того, який у вас хостинг: простий віртуальний хостинг, або VPS/виділений сервер. Розглянемо окремо, як переглянути логи сайту в кожній із цих ситуацій.
На VPS або виділеному сервері
У такому випадку ви матимете повний доступ до логів сервера. За замовчуванням більшість логів Linux зберігаються в папці /var/log/, але деякі програми можуть перевизначати цей шлях і зберігати свої логи в інших місцях. А також стандартний шлях до логів можна змінити вручну в файлах конфігурації потрібної програми.
Щоб вивести повний список лог файлів у папці /var/log/ на сервері, використовуйте команду ls:
ls -l /var/log/
Ось як називаються основні логи, які ви знайдете в цій папці:
- /var/log/syslog або /var/log/messages — головний системний лог Linux.
- /var/log/auth.log або /var/log/secure — журнал авторизації користувачів.
- /var/log/maillog/ або /var/log/mail.log — логи поштового сервера.
- /var/log/httpd/ або /var/log/apache2/ — логи веб-сервера Apache. Журнал доступу знаходиться у файлі access.log, а логи помилок у файлі error.log.
- /var/log/nginx/ — логи веб-сервера Nginx.
- /var/log/dmesg — лог завантаження системи.
- /var/log/mysql/ — логи бази даних MySQL.
- /var/log/cron — логи планувальника Cron.
Щоб подивитися логи в Linux, швидше за все вам знадобиться root доступ до сервера. Далі можна використовувати такі стандартні команди:
- tail — вивести останні 10 рядків;
- head — вивести перші 10 рядків;
- cat — вивести весь лог-файл;
- grep — вивести в лог-файлі всі входження вказаного слова або регулярного виразу.
Також є варіант — встановити утиліту lnav. Її зручність у тому, що вона підтримує підсвічування синтаксису. Можливо, за її допомогою працювати з логами буде зручніше.
На віртуальному хостингу
У цьому випадку доступ до логів сервера буде обмежено. Ви зможете подивитися тільки те, що налаштує вам провайдер хостингу. Зазвичай, це логи помилок веб-сервера та відвідувань сайту, а також логи PHP.
Ось як знайти логи в панелі керування cPanel, яку надаємо у себе на віртуальному хостингу ми та деякі інші провайдери.
На головній сторінці cPanel знайдіть розділ «Показники». У ньому є кілька додатків, де зберігаються логи: «Відвідувачі» та «Прямий доступ».
У програмі «Помилки» ви знайдете помилки веб-сервера за останні два дні. Інформація тут подається в необробленому вигляді та відразу по всіх доменах з вашого облікового запису. Усього тут може бути до 300 записів.
У програмі «Прямий доступ» можна завантажити текстові файли з логами доступу до сайту. Окремо будуть логи за останню добу, а трохи нижче — архіви із логами за минулі місяці.
Переглянути логи після завантаження можна за допомогою будь-якого текстового редактора.
Також у кореневій папці вашого сайту у файлі error_log будуть логи з помилками PHP. За промовчанням для основного домену ця папка називається public_html, а для додаткового — так само, як і сам домен.
Як обробляти логи
Найважчий момент при роботі з логами — хоч щось зрозуміти, що в них написано. Щоб хоч трохи допомогти розібратися з цим моментом, ось розшифрування лог файлів на прикладі кількох записів основних логів.
Access.log
66.249.66.45 - - [25/Apr/2023:18:33:00 +0300] "GET /robots.txt HTTP/1.1" 404 24406 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http:/ /www.google.com/bot.html)"
66.249.66.45 — IP-адреса відвідувача.
“- -“ — два ідентифікатори відвідувача. Перший ідентифікатор це identd. Другий це юзернейм відвідувача, якщо він використовував HTTP-аутентифікацію. У нашому прикладі обидва ідентифікатори невідомі, тому в логах стоять два прочерки.
[25/Apr/2023:18:33:00 +0300] — дата та час запиту.
“GET /robots.txt HTTP/1.1” — тип запиту, шлях до запитуваного файлу та версія протоколу HTTP.
404 — код стану HTTP, яким сервер відповів на запит.
24406 — розмір файлу в байтах без урахування заголовків відповіді.
“-“ — сторінка, на якій звернулися запит. Прочерк у прикладі означає, що відвідувач звернувся до URL безпосередньо.
“Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)” — дані про відвідувача, який здійснив запит.
Error.log
2023-04-26 09:34:07.513128 [INFO] [25473] [T0] [65.108.46.177:48252#APVH_vashdomen.com] File not found [/home/username/public_html/wp-content/the
2023-04-26 09:34:07.513128 — дата і час, коли було зроблено запис у логах.
[65.108.46.177:48252#APVH_vashdomen.com] — IP-адреса клієнта, яка здійснила запит, а також ім’я віртуального хоста, до якого він звертався.
File not found [/home/username/public_html/wp-content/themes] — текст помилки та шлях до файлу або папки, що її викликав.
PHP error_log
[20-Apr-2023 17:16:29 UTC] PHP Error error: require(): Failed opening required '/home/username/public_html/wp-includes/class-wp-session-tokens.php' in /home/ username/public_html/wp-settings.php on line 189
[20-Apr-2023 17:16:29 UTC] – дата та час виникнення помилки.
PHP Error error: require(): Failed opening required ‘/home/username/public_html/wp-includes/class-wp-session-tokens.php’ — текст помилки. Саме в цьому прикладі помилка в тому, що PHP-обробник не зміг відкрити файл class-wp-session-tokens.php, тому що файл або відсутній вказаним шляхом, або до нього немає доступу.
189 — шлях до файлу, в якому виникла проблема, із зазначенням проблемного рядка.
Що далі
Після того, як ви знайшли потрібні логи сервера і з’ясували, у чому була причина помилки, залишається лише виправити її. У нас є окремі статті для помилок, які найчастіше виникають на хостингу:
- Помилка 403 Forbidden
- Помилка 500 Internal Server Error
- Помилка 503 Service Unavailable
- Помилка 504 Gateway Time-out
Якщо проблема в тому, що хтось намагається зламати сайт або занадто сильно навантажує сервер важкими запитами, вам може знадобитися заблокувати цього користувача. Це можна зробити у файлі .htaccess.
Як заблокувати доступ до сайту в .htaccess
А якими корисними інструментами для роботи з логами ви користуєтеся? Розкажіть у коментарях.