# Практическая работа. Система syslog и журналы логов. ## Цель работы: - научиться работать с журналированием в Linux - научится создавать правила для демона - познакомиться с автоматической ротацией ## Теория Начнём издалека. Работая, система отслеживает и записывает в специальные файлы события, которые считает важными или нужными (например, для исправления и отладки ошибок и сбойных конфигураций). Эти файлы называются **лог-файлами** (файлы регистрации / журнальные файлы). Други словами, эти файлы (далее “**логи**”) являются основным источником информации о работе системы и происходящих ошибках. Сбор и отслеживание логов осущесвтляется демонами событий. Главной системой логирования считается syslog и ее демон syslogd (в новых дистрибутивах, включая Debian 11, система rsyslog и демон rsyslogd). Описанный выше процесс, т.е. **журналирование**, может осуществляться на локальной системе, а так же сообщения журналирования могут пересылаться на удаленную систему. :::info **Для правильной фиксации времени логов, необходимо настроить его синхронизацию.** *Сначала задаем правильный часовой пояс:* ==\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime== *в данном примере мы использовали московское время*. ++Затем устанавливаем и запускаем chrony.++ **а) на системе CentOS / Red Hat:** ==yum install chrony== ==systemctl enable chronyd== ==systemctl start chronyd== **б) на системе Ubuntu / Debian:** ==apt-get install chrony== ==systemctl enable chrony== ==systemctl start chrony== ::: ## 1. Знакомство с конфигурационным файлом rsyslog.conf. Файл **rsyslog.conf** является главным конфигурационным файлом журналирования системы. Файл представляет собой набор правил работы демона. `nano /etc/rsyslog.conf` ![](https://i.imgur.com/guGI74O.png) #### 1.1 Синтаксис правила. ` *источник.приоритет действие* ` Две и более конструкции разделяются ";", после идёт действие (куда записывать/отправлять?). Символ "*" обозначает "все/любой". #### 1.2 Создание правила для отправки всех событий user на удалённую систему. (клиент) `user.* @адрес_машины"` ![](https://i.imgur.com/utBGA2W.png) Далее перезапускаем демона. `service rsyslog restart` Или же: `systemctl restart rsyslog` :::success **Все логи:** ::: Для начала можно настроить отправку всех логов на сервер. Создаем конфигурационный файл для rsyslog: `vi /etc/rsyslog.d/all.conf` **Добавляем:** `*.* @@192.168.0.15:514` * где 192.168.0.15 — IP-адрес сервера логов. *.* — перенаправлять любой лог. **Перезапускаем rsyslog:** `systemctl restart rsyslog` :::success **Для определенных категорий:** ::: **Если необходимо отправлять только определенные категории логов, создаем конфигурационный файл для соответствующей, например:** `vi /etc/rsyslog.d/kern.conf` **Добавим строку:** `kern.* @@192.168.0.15:514` **Перезапускаем сервис логов:** `systemctl restart rsyslog` Возможные категории для логов (facility): **Категории и Описание** * kern Сообщения, отправляемые ядром * user Пользовательские программы * mail Почта * daemon Сервисы (демоны) * auth Безопасность/вход в систему/аутентификация * syslog Сообщения от syslog * lpr Логи печати * news Новостные группы (usenet) * uucp Unix-to-Unix CoPy (копирование файлов между компьютерами) * cron Планировщик заданий * authpriv Безопасность/вход в систему/аутентификация - защищенный режим * ftp Логи при передачи данных по FTP * ntp Лог службы синхронизации времени (существует не везде) * security, log audit Журнал аудита (существует не везде) * console, log alert Сообщения, отправляемые в консоль (существует не везде) * solaris-cron, clock daemon Cron в solaris (существует не везде) * local0 - local7 Зарезервированы для локального использования. Уровень серьезности определяется числом от 0 до 7. :::success **Для определенного уровня:** ::: **Если мы хотим передавать только сообщения об ошибках, добавляем строку в файл конфигурации rsyslog:** `vi /etc/rsyslog.d/erors.conf` `*.err @@192.168.0.15:514` **Перезапускаем сервис логов:** `systemctl restart rsyslog` **Возможные категории для логов (severity):** :::info № Уровень Расшифровка 0 emerg Система не работает (PANIC) 1 alert Серьезная проблема, требующая внимания 2 crit Критическая ошибка 3 err Ошибка (ERROR) 4 warning Предупреждение (WARN) 5 notice Важное информационное сообщение 6 info Информационное сообщение 7 debug Отладочная информация ::: #### 1.3 Настройка удалённой системы (сервера). `nano /etc/rsyslog.conf` Здесь нам необходимо раскомментировать следующие строчки: ``` # provides UDP syslog reception module(load="imudp") input(type="imudp" port="514") # provides TCP syslog reception module(load="imtcp") input(type="imtcp" port="514") ``` ![](https://i.imgur.com/FbiYjhu.png) Затем вписываем шаблон хранения входящих журналов. ``` $template remote-incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?remote-incoming-logs ``` Файлы журнала будут использовать следующее соглашение об именах: /% HOSTNAME% / — имя хоста клиентской системы. /% PROGRAMNAME% / — определяет клиентскую программу, создавшую файл журнала. Перезапускаем демона. #### 1.4 Создание события с помощью logger. **logger** — unix-утилита, предоставляющая командный интерфейс для модуля системного журнала syslog. `logger -p user.warn *Собщение*` ![](https://i.imgur.com/PylxutT.png) ## 2. Настройка создания резервных копий логов с помощью утилиты logrotate Утилита **logrotate** предназначена для автоматизации обработки журналов. Она может выполнять с ними необходимые действия в зависимости от определенных условий и правил соответствия. На данный момент эта утилита уже предустановленна на большинстве дистрибутивов, но если у вас её нет, выполните команду `apt install logrotate`. Все основные настройки программы находятся в файле **/etc/logrotate.conf**. `nano /etc/logrotate.conf` ![](https://i.imgur.com/OzWwbPH.png) Основные директивы управления и обработки логов: rotate - указывает сколько старых логов нужно хранить, в параметрах передается количество; create - указывает, что необходимо создать пустой лог файл после перемещения старого; dateext - добавляет дату ротации перед заголовком старого лога; compress - указывает, что лог необходимо сжимать; delaycompress - не сжимать последний и предпоследний журнал; extension - сохранять оригинальный лог файл после ротации, если у него указанное расширение; mail - отправлять Email после завершения ротации; maxage - выполнять ротацию журналов, если они старше, чем указано; missingok - не выдавать ошибки, если лог файла не существует; olddir - перемещать старые логи в отдельную папку; postrotate/endscript - выполнить произвольные команды после ротации; start - номер, с которого будет начата нумерация старых логов; size - размер лога, когда он будет перемещен. #### 2.1 Создание ротации резервной копии журнала ``` /var/log/messages { rotate 5 //хранить 5 копий mail logadmin@sysloger //почта для получения самой старой копии size 100k //размер 100Кб postrotate //запуск скрипта, перезапускающиего демона /usr/bin/killall -HUP syslogd //сигнал HUP для перезапуска endscript //конец скрипта } ``` ![](https://i.imgur.com/HeyLaWT.png) То есть, для каждого лога, подлежащего ротации, используется этот шаблон: ``` "адрес файла лога" { директивы } ``` ## 3.[](https://) Чтение журналов #### 3.1 Просмотр журналов с помощью cat+less `cat /var/log/bacula/bacula.log | less` ![](https://i.imgur.com/sZckTyT.png) #### 3.2 Просмотр журналов с помощью tail `tail -n 40 /etc/log/kern.log` ![](https://i.imgur.com/y3joGYV.png) #### 3.3 Просмотр логов с помощью journalctl `journalctl -bo` ![](https://i.imgur.com/NkOQ0qw.png) #### 3.4 Просмотр логов ядра с помощью dmesg `dmesg` ![](https://i.imgur.com/30hmpj2.png)