<aside> 💡
Журналирование — процесс записи в хронологическом порядке событий, происходящих с каким-то объектом или в рамках какого-то процесса, в специальный файл или базу данных, называемые журналом.
Журналирование может выполнять различные задачи в зависимости от контекста применения:
<aside> 📢
В сущности это всё одно — отладка.
</aside>
</aside>
<aside> 📌
Программы могу выводить сообщения о своей работе (логи) в несколько мест:
В стандартные потоки вывода: stdout, stderr.
В файл, которое приложение создаёт само.
logs/ в рабочей области приложения[datetime].log.<aside> 📌
Это всё условности, такая организация зависит полностью от желаний и возможностей разработчика ПО.
</aside>
В системный журнал с помощью демонов: syslogd. journald или утилит.
<aside> 📢
Вывод логов согласно пунктам 2 и 3 может занимать много места, но у вывода в системный журнал есть неоспоримое преимущество: за системным журналом следят, чтобы он не переполнялся, не флудил в жесткий диск. За свои файлом администратору (разработчику ПО) нужно следить самостоятельно.
</aside>
</aside>
<aside> 💡
Все логи в Linux лежат в директории /var/log.
</aside>
<aside> 💡
Syslog — глобальный системный журнал. В нем мы можем найти события, произошедшие с момента запуска системы от различных компонентов ОС — ядра, служб, устройств и т. д.
Syslog дефолтно хранит свои файлы в /var/log/syslog и /var/log/messages.
<aside> 📢
Конфигурация syslog храниться в файле /etc/syslog.conf.
Конфигурация определяет, как и куда перенаправлять сообщения от различных источников с помощью селекторов вида <source>.<priority>(;<source>.<priority>)* <dest-file>.
Сообщения syslog имеют определённый формат, который упрощает их обработку. Обычно в них содержатся временные метки, идентификаторы хостов и текстовые сообщения.
У системного журнала есть API, которое регламентирует его работы. API максимально тупое, достаточно использовать один вызов syslog(level, msg)
printf%m и errno – глобальная переменная, число, в ней указывается, что конкретно произошло.<aside> 📢
Подробно можно почитать здесь.
</aside>
</aside>
<aside> 💡
Утилита logrotate предназначена для автоматизации обработки журналов. Она может выполнять с ними необходимые действия в зависимости от определенных условий и правил соответствия. Например, можно сжимать журналы в архив или отправлять на другой сервер когда они достигают определенного размера, возраста, или других параметров.
<aside> 📌
Избавляться от гигантских лог-файлов, т.е. брать текущий лог-файл сжимать и сохранять в другое место, создавая новый пустой файл для текущих логов.
</aside>
Обычно logrotate выполняется в качестве одной из ежедневных (еженедельных, ежемесячных) задач в планировщике.
<aside> 📢
Подробно можно почитать здесь или посмотреть здесь.
</aside>
</aside>
<aside> 📌
Logger это утилита, которая отправляет сообщения в syslog.
Пример использования:
<application> 2>&1 >/dev/null | **logger** -p user.error -t <application>
<aside> 📌
Подробнее можно почитать здесь или почитать man logger.
</aside>
</aside>
<aside> 💡
Journald - это система управления журналами событий. Журналы данного инструмента хранятся в бинарном виде в /var/log/journal и(или) /run/log/journal, что исключает возможность просмотра содержимого данных файлов стандартными утилитами обработки текстовых данных. При вызове инструмента без параметров покажет все содержимое журнала аналогичного классической системе лог-файлов syslog.
Сама система управляется утилитой journalctl.
<aside> 📌
Конфигурация journald храниться в файле /etc/systemd/journald.conf.
Конфигурация </aside>
Приоритеты
<aside> 📢
Подробнее можно прочитать здесь.
</aside>
</aside>
<aside> 💡
По сути то же самое, что и общий syslog, но используется для утилит ядра ОС и его модулей.
Для просмотра журнала ядра используют утилиту dmesg.
<aside> 📌
Подробнее можно почитать здесь или читайте man dmesg.
</aside>
</aside>