Как я могу изменить свой шаблон syslog-ng, чтобы, когда журнал исходил от службы / модуля systemd, сообщение журнала включало имя устройства?
С помощью ${PROGRAM}
просто показывает имя исполняемого файла, который вызвал сервис systemd / откуда было отправлено сообщение. В journald есть поле для этой информации: _SYSTEMD_UNIT
, но ссылки на это в моем шаблоне syslog-ng кажется недостаточно.
Справочная информация о моей настройке:
Я запускаю Debian Jessie и создал службы systemd для управления контейнерами Docker. Приложения в этих контейнерах записываются в stdout / stderr, который впоследствии попадает в файлы журнала, контролируемые journald.
Я использую syslog-ng (версия 3.5.6-2) для пересылки моих журналов в loggly и papertrail (сравнивая их прямо сейчас). Поскольку я запускаю Debian Jessie, я настроил journald для пересылки сообщений журнала в syslog, установив ForwardToSyslog=yes
в journald.conf
.
Проблема:
Шаблоны по умолчанию для loggly и papertrail включают ${PROGRAM}
в каждом сообщении журнала, которое является именем «исполняемого файла», который сгенерировал сообщение. Однако в моей настройке исполняемый файл называется docker
для всех моих контейнеров. Таким образом, имя исполняемого файла бесполезно, чтобы помочь мне фильтровать журналы и идентифицировать журналы, происходящие из определенных контейнеров.
Ноты:
В документации syslog-ng отмечается, что существует systemd-journal
драйвер, который, кажется, предоставляет дополнительные переменные. Однако этот драйвер, похоже, недоступен в версии syslog-ng для Debian Jessie (3.5.6-2).
Вы можете найти несколько более новые пакеты syslog-ng (которые включают драйвер systemd-journal) для Debian Jessie в репозитории разработчика syslog-ng по адресу https://build.opensuse.org/project/show/home:laszlo_budai:syslog-ng
Я не уверен, что это сделает поле доступным в syslog-ng (если оно не переведено где-нибудь в _COMM или SYSLOG-IDENTIFIER, см. http://support.oneidentity.com/technical-documents/syslog-ng-open-source-edition/administration-guide/source-read-receive-and-collect-log-messages/systemd-journal-collecting-messages- из-системного журнала-журнала-хранилища системного журнала ), но если он вам действительно нужен, откройте проблему Gitub на https://github.com/balabit/syslog-ng
С уважением, Роберт
Я также имею в виду поля journald, полученные из докера, в основном вам нужно будет добавить .journald.
в имени поля, например.
...
template("<$PRI>1 ${ISODATE} ${HOST} ${.journald.CONTAINER_TAG:--} ${PID:--} ${.journald.CONTAINER_ID:--} - ${MSG}\n")
Тогда это работает как шарм
<134>1 2018-06-14T10:29:08+00:00 typerpc-3 alpine-02.1.vj6qhqulxkkojb9uatd3v08ar 1015 ef4e25bad3a3 - mg 2