summaryrefslogtreecommitdiff
path: root/LINUX/Логи в Linux.md
diff options
context:
space:
mode:
authorvlapa <vlapa@ya.ru>2026-06-13 20:33:26 +0300
committervlapa <vlapa@ya.ru>2026-06-13 20:33:26 +0300
commite5abc1fe99340b979b18864d978179f71fe8f5c5 (patch)
tree98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /LINUX/Логи в Linux.md
First
Diffstat (limited to 'LINUX/Логи в Linux.md')
-rw-r--r--LINUX/Логи в Linux.md226
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`
+=====================================