В systemd journal добавлен каталог сообщений

Разработчики systemd добавили в Journal поддержку каталога сообщений — специальной базы данных, содержащей детализированную информацию о сообщениях, записываемых в системный журнал. Данный механизм значительно упрощает формирование подробных и исчерпывающих диагностических сообщений, а также их интернационализацию (перевод на местные языки).

В Journal, каждая запись представлена структурой из набора полей. Данные, содержащиеся в этих полях, необязательно должны иметь текстовый формат (например, возможно сохранение core dump'ов непосредственно в сообщении о сбое процесса). Одним из наиболее важных полей является MESSAGE_ID — бинарный идентификатор типа сообщения, позволяющий абстрагироваться от его текста. Сопоставление идентификаторов и текстов сообщений производится по каталогу — специальной базе данных, имеющей текстовый формат. Пример записи из такой базы:

  -- fc2e22bc6ee647b6b90729ab34a250b1  Subject: Process @COREDUMP_PID@ (@COREDUMP_COMM@) dumped core  Defined-By: systemd  Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel  Documentation: man:core(5)  Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@   Process @COREDUMP_PID@ (@COREDUMP_COMM@) crashed and dumped core.   This usually indicates a programming error in the crashing program and  should be reported to its vendor as a bug. 

Первая строка содержит символ разделителя (--) и идентификатор сообщения. После нее следуют поля с дополнительной информацией: Subject (краткая форма сообщения, аналог записи в классическом логе), Defined-By (принадлежность сообщения), Support (ссылка на ресурс поддержки, на котором можно получить консультацию по теме сообщения), Documentation (ссылки на man, info и web-страницы с документацией по теме сообщения). После этого следует развернутое описание сообщения, которое может состоять из нескольких абзацев и содержать подстановочные шаблоны, позволяющие вставить в текст конкретного сообщения содержимое других полей журнальной записи.

Перевод таких сообщений на местные языки (помимо основного английского) реализуется очень просто: достаточно добавить запись с таким же идентификатором, и указать после него код локали. При этом можно перевести не только текст сообщения, но и указать ссылки на документацию и поддержку на родном языке.

Каталог Journal позволяет программам определять свои собственные идентификаторы в catalog-файлах, которые при установке программы нужно поместить в /usr/lib/systemd/catalog/. Поиск и сопоставление идентификаторов сообщений по каталогу производятся внутри программы journalctl при указании ключа «-x». При этом для выбранных сообщений выводятся развернутые описания.

Абстракция сообщений от текста дает целый ряд преимуществ:

  • Исправление ошибки в тексте сообщения, или изменение его формулировки, больше не ломает работу различных анализаторов лога, которые ищут в нем конкретные подстроки.
  • Замена повторяющихся длинных строк коротким идентификатором позволяет сэкономить место.
  • Использование поиска по индексированной БД Journal работает гораздо быстрее, чем множественное сравнение строк в syslog/grep. Этот момент особенно актуален на высоконагруженных системах с большим объемом лога: поиск по индексу происходит за время, пропорциональное O(log(n)) (n — количество записей в БД), вместо O(n) в syslog/grep (что, кстати, уже давно используется в реализации подсистемы аудита классических UNIX-систем — BSM, использующей бинарный формат лога).
  • Как уже упоминалось выше, значительно упрощается перевод сообщений на местные языки.
  • Сообщение больше не ограничивается краткой строкой — в него можно включить полноценное текстовое описание, с указанием всех необходимых подробностей.
  • Добавление полей со ссылками на поддержку и документацию упрощает работу системного администратора. В этом плане Journal является продолжением глобальной концепции systemd — самодокументированной загрузки, в соответствие с которым каждый юнит из штатной поставки systemd имеет свою man-страницу, в которой описаны его назначение, принцип работы и методы настройки. При этом ссылка на man-страницу содержится в метаданных юнита и выводится по команде systemctl status, что упрощает поиск документации.

Стоит отметить что, как и многие «новшества» systemd, этот механизм не является чем-то принципиально новым — аналогичный подход используется, например, в операционных системах для мейнфреймов, в частности, в z/OS. А в вышеописанной идее «самодокументированной загрузки» прослеживается влияние системы инициализации Solaris — SMF, позволяющей включать в метаданные службы ссылки на документацию.

Источник:
http://www.opennet.ru/opennews/art.shtml?num=35352

<= Назад
Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>