<aside> 💡

Журналирование

Журналирование — процесс записи в хронологическом порядке событий, происходящих с каким-то объектом или в рамках какого-то процесса, в специальный файл или базу данных, называемые журналом.

Журналирование может выполнять различные задачи в зависимости от контекста применения:

<aside> 📢

В сущности это всё одно — отладка.

</aside>

</aside>

<aside> 📌

Отладка

Программы могу выводить сообщения о своей работе (логи) в несколько мест:

  1. В стандартные потоки вывода: stdout, stderr.

  2. В файл, которое приложение создаёт само.

    1. Создаём директорию logs/ в рабочей области приложения
    2. В этой директории будут жить файлы формата [datetime].log.

    <aside> 📌

    Это всё условности, такая организация зависит полностью от желаний и возможностей разработчика ПО.

    </aside>

  3. В системный журнал с помощью демонов: syslogd. journald или утилит.

<aside> 📢

Вывод логов согласно пунктам 2 и 3 может занимать много места, но у вывода в системный журнал есть неоспоримое преимущество: за системным журналом следят, чтобы он не переполнялся, не флудил в жесткий диск. За свои файлом администратору (разработчику ПО) нужно следить самостоятельно.

</aside>

</aside>

<aside> 💡

Все логи в Linux лежат в директории /var/log.

</aside>

<aside> 💡

Syslog

Syslog — глобальный системный журнал. В нем мы можем найти события, произошедшие с момента запуска системы от различных компонентов ОС — ядра, служб, устройств и т. д.

Syslog дефолтно хранит свои файлы в /var/log/syslog и /var/log/messages.

<aside> 📢

Конфигурация Syslog

Конфигурация syslog храниться в файле /etc/syslog.conf.

Конфигурация определяет, как и куда перенаправлять сообщения от различных источников с помощью селекторов вида <source>.<priority>(;<source>.<priority>)* <dest-file>.

Сообщения syslog имеют определённый формат, который упрощает их обработку. Обычно в них содержатся временные метки, идентификаторы хостов и текстовые сообщения.

У системного журнала есть API, которое регламентирует его работы. API максимально тупое, достаточно использовать один вызов syslog(level, msg)

<aside> 📢

Подробно можно почитать здесь.

</aside>

</aside>

<aside> 💡

Logrotate

Утилита logrotate предназначена для автоматизации обработки журналов. Она может выполнять с ними необходимые действия в зависимости от определенных условий и правил соответствия. Например, можно сжимать журналы в архив или отправлять на другой сервер когда они достигают определенного размера, возраста, или других параметров.

<aside> 📌

Основная задача

Избавляться от гигантских лог-файлов, т.е. брать текущий лог-файл сжимать и сохранять в другое место, создавая новый пустой файл для текущих логов.

</aside>

Обычно logrotate выполняется в качестве одной из ежедневных (еженедельных, ежемесячных) задач в планировщике.

<aside> 📢

Подробно можно почитать здесь или посмотреть здесь.

</aside>

</aside>

<aside> 📌

Logger

Logger это утилита, которая отправляет сообщения в syslog.

Пример использования:

<application>  2>&1 >/dev/null | **logger** -p user.error -t <application>

<aside> 📌

Подробнее можно почитать здесь или почитать man logger.

</aside>

</aside>

<aside> 💡

Journald

Journald - это система управления журналами событий. Журналы данного инструмента хранятся в бинарном виде в /var/log/journal и(или) /run/log/journal, что исключает возможность просмотра содержимого данных файлов стандартными утилитами обработки текстовых данных. При вызове инструмента без параметров покажет все содержимое журнала аналогичного классической системе лог-файлов syslog.

Сама система управляется утилитой journalctl.

<aside> 📌

Конфигурация Journald

Конфигурация journald храниться в файле /etc/systemd/journald.conf.

<aside> 📢

Подробнее можно прочитать здесь.

</aside>

</aside>

<aside> 💡

Журнал ядра ОС

По сути то же самое, что и общий syslog, но используется для утилит ядра ОС и его модулей.

Для просмотра журнала ядра используют утилиту dmesg.

<aside> 📌

Подробнее можно почитать здесь или читайте man dmesg.

</aside>

</aside>