diff options
| author | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
|---|---|---|
| committer | vlapa <vlapa@ya.ru> | 2026-06-13 20:33:26 +0300 |
| commit | e5abc1fe99340b979b18864d978179f71fe8f5c5 (patch) | |
| tree | 98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /LINUX/Логи в Linux.md | |
First
Diffstat (limited to 'LINUX/Логи в Linux.md')
| -rw-r--r-- | LINUX/Логи в Linux.md | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/LINUX/Логи в Linux.md b/LINUX/Логи в Linux.md new file mode 100644 index 0000000..6357dc5 --- /dev/null +++ b/LINUX/Логи в Linux.md @@ -0,0 +1,226 @@ +# Как разбирать: journalctl, grep, awk и sed + +Каждый админ хотя бы раз сталкивался с ситуацией, когда сервер внезапно начинает тупить: подвисают процессы, появляются странные задержки, что‑то перестаёт работать. И первая остановка в таком случае — это журналы событий. В Linux системные логи хранятся в **systemd‑journald**, а его главный инструмент для работы — `journalctl`. Но просто читать логи — это скучно. Разберем, **как фильтровать, искать ошибки, анализировать данные и автоматизировать разбор логов** с помощью `grep`, `awk`, `sed` и других утилит. + +#### Работа с journalctl + +Самый простой способ заглянуть в системные журналы — просто вызвать `journalctl`: + +``` +journalctl +``` + +Но если сервер работает долго, логов там будет много. Выведем их без постраничного режима: + +``` +journalctl --no-pager +``` + +Если команда зависает, скорее всего, журнал слишком большой. Ограничим его по времени, например, **выведем логи за последний час**: + +``` +journalctl --since "1 hour ago" +``` + +Теперь можно быстро отследить недавние события. + +#### Как понять, что произошло после перезагрузки? + +Если сервер неожиданно перезагрузился, полезно посмотреть, что записалось в логи **после старта**: + +``` +journalctl -b +``` + +Если система несколько раз перезагружалась, можно посмотреть события после конкретного запуска, например, **минус первый перезапуск**: + +``` +journalctl -b -1 +``` + +Это поможет понять, что произошло перед падением системы. + +#### Фильтрация по сервису + +Чтобы разобраться в проблемах конкретного сервиса, например, `nginx`, используем флаг `-u`: + +``` +journalctl -u nginx.service --no-pager +``` + +Пример вывода: + +``` +Feb 02 10:15:00 myserver nginx[1234]: Starting nginx: [OK] +Feb 02 10:16:00 myserver nginx[1234]: 502 Bad Gateway +``` + +Можно дополнительно **сортировать логи от новых к старым**: + +``` +journalctl -u nginx.service --reverse +``` + +#### grep для поиска ошибок + +Журналы бывают огромными, но нам нужны только ошибки. Отфильтруем их с помощью `grep`: + +``` +journalctl -u nginx.service | grep "error" +``` + +Пример вывода: + +``` +Feb 02 11:20:00 myserver nginx[5678]: error: failed to bind socket +Feb 02 11:22:00 myserver nginx[5678]: error: no permission to access /var/www/html +``` + +Чтобы **не зависеть от регистра**, используем `-i`: + +``` +journalctl -u nginx.service | grep -i "error" +``` + +Теперь `ERROR`, `Error` и `error` будут найдены. + +Иногда важно видеть не только саму ошибку, но и контекст вокруг. Например, **две строки до и после найденного слова**: + +``` +journalctl -u nginx.service | grep -A 2 -B 2 "error" +``` + +Так можно увидеть, что происходило **до и после ошибки**. + +#### Выбираем нужные данные с awk + +Журналы содержат много лишней информации. Например, оставим **только дату, время и сообщение**: + +``` +journalctl -u nginx.service | awk '{print $1, $2, $3, $6}' +``` + +Вывод: + +``` +Feb 02 12:00:00 Starting +Feb 02 12:05:00 error: +Feb 02 12:10:00 Listening +``` + +Если сообщения длинные, можно **обрезать текст**: + +``` +journalctl -u nginx.service | awk '{print substr($0, index($0,$6))}' +``` + +Это оставит только само сообщение без метаданных. + +#### Очистка логов с sed + +Некоторые логи содержат ненужные теги или мусорные символы. Например, уберём всё, что находится в квадратных скобках `[INFO]`: + +``` +journalctl -u nginx.service | sed 's/\[.*\]//g' +``` + +Исходный лог: + +``` +Feb 02 13:30:00 myserver nginx[1234]: [INFO] Server started +``` + +После обработки: + +``` +Feb 02 13:30:00 myserver nginx[1234]: Server started +``` + +Также можно **заменить текст**, например, заменить `error` на `!!!ERROR!!!` для выделения: + +``` +journalctl -u nginx.service | sed 's/error/!!!ERROR!!!/g' +``` + +#### Автоматический сбор ошибок + +Допустим, мы нужно **каждый день автоматически собирать ошибки Nginx** и записывать их в файл. Используем **crontab** и скрипт: + +``` +journalctl -u nginx.service --since "1 day ago" | grep -i "error" | awk '{print $1, $2, $3, $6, $7, $8}' > /var/log/nginx_errors.log +``` + +Этот код: + +1. Берёт логи Nginx за последние 24 часа. +2. Ищет строки с `"error"`. +3. Оставляет только дату, время и сообщение. +4. Записывает результат в `/var/log/nginx_errors.log`. +#### Вывод логов в реальном времени + +А если хочется **смотреть логи в реальном времени**, то спользуйте флаг `-f`: + +``` +journalctl -u nginx.service -f= +``` + +Это как `tail -f`, но для journalctl — вы сразу увидите, если сервис упадёт. + +===================================== +## Расположение логов по умолчанию + +Большинство файлов логов Linux находятся в папке **/var/log/** вы можете список файлов логов для вашей системы с помощью команды ls: + + `ls -l /var/log/` + +Ниже мы рассмотрим 20 различных файлов логов Linux, размещенных в каталоге **/var/log/**. Некоторые из этих логов встречаются только в определенных дистрибутивах. + +- **/var/log/messages** - содержит глобальные системные логи Linux, в том числе те, которые регистрируются при запуске системы. В этот лог записываются несколько типов сообщений: это почта, cron, различные сервисы, ядро, аутентификация и другие. +- **/var/log/dmesg** - содержит сообщения, полученные от ядра. Регистрирует много сообщений еще на этапе загрузки, в них отображается информация об аппаратных устройствах, которые инициализируются в процессе загрузки. Можно сказать это еще один лог системы Linux. Количество сообщений в логе ограничено, и когда файл будет переполнен, с каждым новым сообщением старые будут перезаписаны. Вы также можете посмотреть сообщения из этого лога с помощью команды dmseg. +- **/var/log/auth.log** - содержит информацию об авторизации пользователей в системе, включая пользовательские логины и механизмы аутентификации, которые были использованы. +- **/var/log/boot.log** - Содержит информацию, которая регистрируется при загрузке системы. +- **/var/log/daemon.log** - Включает сообщения от различных фоновых демонов +- **/var/log/kern.log** - Тоже содержит сообщения от ядра, полезны при устранении ошибок пользовательских модулей, встроенных в ядро. +- **/var/log/lastlog** - Отображает информацию о последней сессии всех пользователей. Это нетекстовый файл, для его просмотра необходимо использовать команду lastlog. +- **/var/log/maillog /var/log/mail.log** - журналы сервера электронной почты, запущенного в системе. +- **/var/log/user.log** - Информация из всех журналов на уровне пользователей. +- **/var/log/Xorg.x.log** - Лог сообщений Х сервера. +- **/var/log/alternatives.log** - Информация о работе программы update-alternatives. Это символические ссылки на команды или библиотеки по умолчанию. +- **/var/log/btmp** - лог файл Linux содержит информацию о неудачных попытках входа. Для просмотра файла удобно использовать команду last -f /var/log/btmp +- **/var/log/cups** - Все сообщения, связанные с печатью и принтерами. +- **/var/log/anaconda.log** - все сообщения, зарегистрированные при установке сохраняются в этом файле +- **/var/log/yum.log** - регистрирует всю информацию об установке пакетов с помощью Yum. +- **/var/log/cron** - Всякий раз когда демон Cron запускает выполнения программы, он записывает отчет и сообщения самой программы в этом файле. +- **/var/log/secure** - содержит информацию, относящуюся к аутентификации и авторизации. Например, SSHd регистрирует здесь все, в том числе неудачные попытки входа в систему. +- **/var/log/wtmp или /var/log/utmp -** системные логи Linux**,** содержат журнал входов пользователей в систему. С помощью команды wtmp вы можете узнать кто и когда вошел в систему. +- **/var/log/faillog** - лог системы linux, содержит неудачные попытки входа в систему. Используйте команду faillog, чтобы отобразить содержимое этого файла. +- **/var/log/mysqld.log** - файлы логов Linux от сервера баз данных MySQL. +- **/var/log/httpd/ или /var/log/apache2** - лог файлы linux11 веб-сервера Apache. Логи доступа находятся в файле access_log, а ошибок в error_log +- **/var/log/lighttpd/** - логи linux веб-сервера lighttpd +- **/var/log/conman/** - файлы логов клиента ConMan, +- **/var/log/mail/** - в этом каталоге содержатся дополнительные логи почтового сервера +- **/var/log/prelink/** - Программа Prelink связывает библиотеки и исполняемые файлы, чтобы ускорить процесс их загрузки. /var/log/prelink/prelink.log содержит информацию о .so файлах, которые были изменены программой. +- **/var/log/audit/**- Содержит информацию, созданную демоном аудита auditd. +- **/var/log/setroubleshoot/ -** SE Linux использует демон setroubleshootd (SE Trouble Shoot Daemon) для уведомления о проблемах с безопасностью. В этом журнале находятся сообщения этой программы. +- **/var/log/samba/** - содержит информацию и журналы файлового сервера Samba, который используется для подключения к общим папкам Windows. +- **/var/log/sa/** - Содержит .cap файлы, собранные пакетом Sysstat. +- **/var/log/sssd/** - Используется системным демоном безопасности, который управляет удаленным доступом к каталогам и механизмами аутентификации. + +## Просмотр логов в Linux + +Смотрим лог **/var/log/dmesg**, с возможностью прокрутки: + `less /var/log/dmesg` + +Просмотр логов Linux, в реальном времени: + `tail -f /var/log/dmesg` + +Открываем лог файл dmesg: + `cat /var/log/dmesg` + +Первые строки dmesg: + `head /var/log/dmesg` + +Выводим только ошибки из /var/log/messages: + `grep -i error /var/log/dmesg` + +===================================== |
