Введение
Системные администраторы, работающие с Ubuntu и Debian часто приходится обращаться к файлам журналов для устранения неполадок. Это фундаментальный шаг в диагностике и решении проблем в этих операционных системах.
Системы на базе Linux, включая Ubuntu и Debian, генерируют множество сообщений, которые записываются в файлы журнала. Эти сообщения журнала очень важны для понимания поведения системы и выявления проблем. Linux использует комбинацию конфигурационных файлов, каталогов, программ, команд и демонов для управления и организации этих журнальных сообщений. Знание расположения файлов журналов и соответствующих команд может значительно ускорить процесс устранения неполадок.
В этом руководстве мы рассмотрим ключевые аспекты системы протоколирования Linux в контексте Ubuntu и Debian.
Шаг 1 — Определение местоположения файлов журнала по умолчанию
По умолчанию файлы журналов в Ubuntu и Debian хранятся в папке /var/log
директории. Вы можете просмотреть список файлов журнала в этой директории с помощью следующей команды:
$ ls -l /var/log
При ее выполнении в вашей системе вывод будет выглядеть следующим образом:
total 49316
drwxr-xr-x. 2 root root 6 Sep 27 19:17 anaconda
drwx------. 2 root root 99 Jan 3 08:23 audit
-rw-rw----. 1 root utmp 1234560 Jan 3 16:16 btmp
-rw-rw----. 1 root utmp 17305344 Jan 1 00:00 btmp-20230101
drwxr-x---. 2 chrony chrony 6 Aug 10 2021 chrony
-rw-r--r--. 1 root root 130466 Dec 8 22:12 cloud-init.log
-rw-r-----. 1 root adm 10306 Dec 8 22:12 cloud-init-output.log
-rw-------. 1 root root 36979 Jan 3 16:03 cron
-rw-------. 1 root root 27360 Dec 10 23:15 cron-20221211
-rw-------. 1 root root 94140 Dec 17 23:07 cron-20221218
-rw-------. 1 root root 95126 Dec 24 23:14 cron-20221225
-rw-------. 1 root root 95309 Dec 31 23:04 cron-20230101
…
Шаг 2 — Просмотр содержимого журнала
В разделе /var/log
, вы найдете различные файлы журналов с определенными целями. Некоторые распространенные примеры включают:
wtmp
utmp
dmesg
messages
maillog
илиmail.log
spooler
auth.log
илиsecure
wtmp
и utmp
файлы отслеживают входы и выходы пользователей. Чтобы увидеть всех пользователей, вошедших в систему на сервере Linux, воспользуйтесь командой who
команду. На Ubuntu вывод может выглядеть следующим образом:
root@ubuntu-22:~# who
root pts/0 2023-01-03 16:23 (198.7.211.4)
Для получения истории входа в систему можно использовать команду last
полезная команда:
root@ubuntu-22:~# last
root pts/0 198.7.211.4 Tue Jan 3 16:23 still logged in
reboot system boot 5.19.0-23-generi Thu Dec 8 21:48 still running
wtmp begins Thu Dec 8 21:48:51 2022
Для определения времени последней перезагрузки используйте:
$ last reboot
В Debian вывод может выглядеть следующим образом:
root@debian-11-trim:~# last reboot
reboot system boot 5.10.0-11-amd64 Thu Dec 8 21:49 still running
wtmp begins Thu Dec 8 21:49:39 2022
The lastlog
Команда позволяет узнать время последнего входа пользователей в систему:
$ lastlog
Вывод на системе Debian может выглядеть следующим образом:
root@debian-11-trim:~# lastlog
Username Port From Latest
root pts/0 162.243.188.66 Tue Jan 3 16:23:03 +0000 2023
daemon **Never logged in**
bin **Never logged in**
sys **Never logged in**
sync **Never logged in**
games **Never logged in**
man **Never logged in**
lp **Never logged in**
mail **Never logged in**
news **Never logged in**
uucp **Never logged in**
proxy **Never logged in**
www-data **Never logged in**
backup **Never logged in**
list **Never logged in**
irc **Never logged in**
gnats **Never logged in**
nobody **Never logged in**
_apt **Never logged in**
messagebus **Never logged in**
uuidd **Never logged in**
…
Чтобы получить доступ к содержимому текстовых файлов журнала, можно использовать такие команды, как cat
, head
, или tail
могут быть использованы. Например, чтобы просмотреть последние десять строк файла /var/log/messages
файла на сервере Debian:
$ sudo tail /var/log/messages
Ожидаемый вывод:
root@debian-11-trim:~# tail /var/log/messages
Jan 1 00:10:14 debian-11-trim rsyslogd: [origin software="rsyslogd" swVersion="8.2102.0" x-pid="30025" x-info="https://www.rsyslog.com"] rsyslogd was HUPed
Jan 3 16:23:01 debian-11-trim DropletAgent[808]: INFO:2023/01/03 16:23:01 ssh_watcher.go:65: [SSH Watcher] Port knocking detected.
Jan 3 16:23:01 debian-11-trim DropletAgent[808]: INFO:2023/01/03 16:23:01 do_managed_keys_actioner.go:43: [DO-Managed Keys Actioner] Metadata contains 1 ssh keys and 1 dotty keys
Jan 3 16:23:01 debian-11-trim DropletAgent[808]: INFO:2023/01/03 16:23:01 do_managed_keys_actioner.go:49: [DO-Managed Keys Actioner] Attempting to update 1 dotty keys
Jan 3 16:23:01 debian-11-trim DropletAgent[808]: INFO:2023/01/03 16:23:01 do_managed_keys_actioner.go:65: [DO-Managed Keys Actioner] Attempting to create 1 ssh keys
Jan 3 16:23:01 debian-11-trim DropletAgent[808]: INFO:2023/01/03 16:23:01 do_managed_keys_actioner.go:105: [DO-Managed Keys Actioner] Action metadata updated
Jan 3 16:23:02 debian-11-trim kernel: [ 22.685314] Bluetooth: RFCOMM TTY layer initialized
Jan 3 16:23:02 debian-11-trim kernel: [ 22.685320] Bluetooth: RFCOMM socket layer initialized
Jan 3 16:23:02 debian-11-trim kernel: [ 22.685321] Bluetooth: RFCOMM ver 1.11
Jan 3 16:23:03 debian-11-trim login[956]: ROOT LOGIN on '/dev/pts/0'
Для журналов, которые обновляются в режиме реального времени, используется параметр tail -f
команда может использоваться для «слежения» за журналом и отображения новых записей по мере их добавления:
$ sudo tail -f /var/log/syslog
Чтобы просмотреть начало файла журнала, используйте head
:
$ sudo head /var/log/syslog
Шаг 3 — Использование Logrotate для управления журналами
Сайт logrotate
Утилита автоматизирует управление файлами журналов. Она может архивировать старые файлы журналов, сжимать журналы и очищать каталоги журналов, чтобы предотвратить чрезмерное использование диска.
Чтобы настроить logrotate
, отредактируйте /etc/logrotate.conf
файл с помощью текстового редактора (например nano
или vim
). Сайт logrotate
конфигурационный файл хорошо прокомментирован и содержит четкие указания по настройке правил ротации файлов журналов.
Вот пример того, как может выглядеть конфигурационный файл:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
# compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}
# system-specific logs may be also be configured here
В этом примере файлы журналов ротируются еженедельно, хранятся в общей сложности 4 недели, и после ротации создаются новые файлы журналов. Кроме того, после ротации файлы журнала сжимаются.
Чтобы добавить или изменить определенные правила ротации журналов, можно создать или отредактировать файлы в папке /etc/logrotate.d
каталоге. Например, файл с именем /etc/logrotate.d/nginx
будет содержать правила, специально предназначенные для ротации журналов веб-сервера Nginx.
Шаг 4 — Использование rsyslog
Демон
The rsyslog
демон — это мощный и гибкий сервис ведения системных журналов, доступный в системах Ubuntu и Debian. Он заменяет старый syslog
и предоставляет расширенные возможности для обработки сообщений журнала. rsyslog
позволяет фильтровать, маршрутизировать и сохранять сообщения журнала в различных форматах и местах назначения.
Установка и базовая конфигурация
- Установка:
Проверьте, если rsyslog
уже установлен в вашей системе, выполнив команду:
$ sudo dpkg -l | grep rsyslog
Если он не установлен, вы можете установить его с помощью следующей команды:
$ sudo apt-get update
$ sudo apt-get install rsyslog
- Конфигурационные файлы:
rsyslog
Основной файл конфигурации находится по адресу /etc/rsyslog.conf
. Однако рекомендуется вносить изменения в конфигурацию в отдельных файлах в /etc/rsyslog.d/
, чтобы сохранить порядок и избежать прямого изменения главного файла.
Понимание строк конфигурации
The rsyslog.conf
Файл состоит из ряда строк конфигурации, каждая из которых состоит из двух частей: a селектор и действие. Эти части разделены белым пространством.
- Селектор: Селекторная часть определяет источник и важность сообщения журнала. Она разделена на два компонента точкой (
.
):- Объект: Обозначает происхождение сообщения, например
auth
,kern
,mail
,user
, и т.д. - Приоритет: Представляет уровень серьезности сообщения, в диапазоне от
debug
(самый низкий) доemerg
(самый высокий).
- Объект: Обозначает происхождение сообщения, например
- Действие: Часть действия определяет, что
rsyslog
, что нужно сделать с сообщениями журнала, соответствующими заданному селектору. Это может быть запись сообщений в определенные файлы журнала, пересылка их на удаленные серверы и т. д.
Пример строки конфигурации
Вот пример строки конфигурации, которая регистрирует сообщения ядра (kern
) с приоритетом err
(ошибка) уровня:
kern.err /var/log/kernel_errors.log
В этом примере:
kern.err
является селектором, указывающим, что он предназначен для сообщений ядра с приоритетом ошибки./var/log/kernel_errors.log
это действие, указывающее, что соответствующие сообщения журнала должны быть сохранены в файлkernel_errors.log
файл.
Просмотр файлов конфигурации
В системах Ubuntu файл конфигурации по умолчанию часто находится по адресу /etc/rsyslog.d/50-default.conf
. Для просмотра его содержимого можно воспользоваться следующей командой:
$ cat /etc/rsyslog.d/50-default.conf
Объекты и приоритеты
Разное объекты представляют различные источники сообщений журнала, такие как auth
, kern
, mail
, и другие. Каждому сообщению присваивается приоритет указывающий на уровень серьезности, варьирующийся от debug
(самый низкий) до emerg
(самый высокий).
Вот несколько объектов и приоритетов, признанных rsyslog
:
Объекты:
auth
илиauthpriv
: События, связанные с авторизацией и безопасностьюuser
: Сообщения журнала, поступающие от пользовательских программmail
: Сообщения журнала, генерируемые почтовой подсистемойlocal0
наlocal7
: Зарезервировано для местного использованияkern
: Сообщения, исходящие от ядра Linux
Приоритеты:
debug
: Отладочная информация из программinfo
: Простые информационные сообщенияnotice
: Условия, которые могут потребовать вниманияwarn
: Предупрежденияerr
: Ошибкиcrit
: Критические условияalert
: Состояния, требующие немедленного вмешательстваemerg
: Неотложные состояния
Понимание этих объектов и приоритетов необходимо для настройки rsyslog
эффективной настройки.
- Базовое протоколирование: По умолчанию,
rsyslog
регистрирует сообщения в/var/log/syslog
файл. Вы можете просмотреть содержимое этого файла, используяcat
или другие команды, как упоминалось ранее.
Расширенная конфигурация и фильтрация
- Фильтрация с помощью шаблонов:
rsyslog
позволяет фильтровать и обрабатывать сообщения журнала на основе различных атрибутов, таких как объект, степень серьезности или имя программы. Можно создавать пользовательские шаблоны для форматирования сообщений журнала. Например, для пересылки определенных журналов на удаленный сервер:
- Создайте пользовательский файл конфигурации в
/etc/rsyslog.d/
, например/etc/rsyslog.d/50-remote.conf
. - Добавьте следующие строки для пересылки сообщений из
auth
на удаленный сервер с IP-адресом1.2.3.4
:
if $programname == 'sshd' and $syslogfacility-text == 'auth' then @@1.2.3.4:514
- Создание пользовательских файлов журнала:
Вы можете создавать пользовательские файлы журнала для определенных приложений или служб. Например, чтобы создать файл журнала для службы с именем myapp
:
- Создайте пользовательский файл конфигурации в
/etc/rsyslog.d/
, например/etc/rsyslog.d/60-myapp.conf
. - Добавьте следующие строки, чтобы создать файл журнала по адресу
/var/log/myapp.log
для сообщений изmyapp
программа:
if $programname == 'myapp' then /var/log/myapp.log
Применение изменений и перезапуск rsyslog
После внесения изменений в rsyslog
конфигурационных файлов, вам необходимо перезапустить rsyslog
службу, чтобы применить их:
$ sudo service rsyslog restart
Отладка и устранение неполадок
Если у вас возникли проблемы с протоколированием или конфигурацией, вы можете проверить /var/log/syslog
файл для rsyslog
связанные с ним сообщения. Дополнительно, rsyslog
сам ведет журнал своих действий, поэтому вы можете использовать следующую команду для просмотра этих журналов:
$ sudo journalctl -u rsyslog
Это покажет вам rsyslog
‘журналы, которые могут быть полезны для диагностики проблем, связанных с самой службой протоколирования.
Заключение
Доступ к системным журналам и их настройка — важный навык для системных администраторов Linux. Ubuntu и Debian предоставляют надёжный набор инструментов и команд для управления лог-файлами, которые очень важны для диагностики проблем и мониторинга поведения системы.
Понимая расположение файлов журнала по умолчанию, используя такие команды просмотра журнала, как cat
, tail
, и head
, а также настройка ротации журналов с помощью logrotate
, администраторы могут эффективно управлять и поддерживать файлы журналов в своих системах. Это гарантирует сохранение важных данных журнала и предотвращает чрезмерное использование диска.