Как я могу получить данные из journald и вывести их в logz через rsyslog

У меня есть ряд серверов, которые используют CoreOS. CoreOS изначально использует journald для всех своих файлов журналов. Последний стабильный выпуск включает в себя Docker 1.9, поэтому он еще не поддерживает драйверы журнала Docker.

Изучив несколько вариантов, я думаю, что rsyslog может быть самым простым способом получения логов в logz, так как в документации они указаны в качестве поставщика поддержки журналов.

И я обнаружил, что есть модуль, который позволяет связывать журнал и rsyslog вместе. Итак, используя контейнер, я дал ему попробовать.

В соответствии с документацией к logz я могу отправлять им логи, используя rsyslog, в основном используя следующий конфиг для rsyslogd.conf

#   -------------------------------------------------------
#        File Logging Directives for Logz.io
#   -------------------------------------------------------
$ModLoad imfile
$InputFilePollInterval 10
$PrivDropToGroup adm
$WorkDirectory /var/spool/rsyslog
# File access file:
$InputFileName PATH_TO_FILE
$InputFileTag TYPE:
$InputFileStateFile stat-TYPE
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$InputRunFileMonitor
$template logzFormatFileTagName,"[SPECIAL_KEY_HERE] <%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [type=TYPE] %msg%\n"
if $programname == 'TYPE' then @@listener.logz.io:5000;logzFormatFileTagName
if $programname == 'TYPE' then ~

Однако, поскольку я не использую файл журнала для ввода, а journald через modimuxsock, я пропустил всю конфигурацию файла журнала и добавил:

$ModLoad imuxsock.so 
$OmitLocalLogging off

Я создал простой образ Docker, который запускает rsyslogd. Итак, в конце концов, у меня есть следующий файл конфигурации, и я передаю в сокет команду run -v hostpath: containerpath для сокета journald.

#
# http://www.rsyslog.com/doc/
#

# Input modules
$ModLoad immark.so         # provide --MARK-- message capability
$ModLoad imuxsock.so       # provides support for local system logging (e.g. via logger command)

# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf

$OmitLocalLogging off

$DebugFile /tmp/rsyslog-debug.log
$DebugLevel 2

$template logzFormatFileTagName,"[SPECIAL_KEY_HERE] <%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [type=docker] %msg%\n"
if $programname == 'docker' then @@listener.logz.io:5000;logzFormatFileTagName
if $programname == 'docker' then ~

Если честно, меня немного смущает настройка TYPE. Я предположил, что должен установить его в dockerd. Как и при запуске journalctl -u unit, где unit - это модуль, который запускает службу в Docker, он показывает, например,

Это правильно?

Мой образ докера запускается с:

docker run --name=logzio-journald -v /run/systemd/journal/syslog:/run/systemd/journal/syslog --rm myregistry.com/logzio-journal-shipper

Последние 30 нечетных строк вывода отладки. Обратите внимание, что когда что-то регистрируется докером, отладка больше не появляется. Ничего не появляется под моей учетной записью logz либо.

8562.569331781:main Q:Reg/w0  : processBATCH: next msg 1: warning: ~ action is deprecated, consider using the 'stop' statement instead [v8.9.0 try http://www.rsyslog.com/e/2307 ]
8562.569337108:main Q:Reg/w0  :     IF
8562.569350044:main Q:Reg/w0  :         var 'programname'
8562.569370397:main Q:Reg/w0  :       ==
8562.569386822:main Q:Reg/w0  :         string 'docker'
8562.569412534:main Q:Reg/w0  : eval expr 0x561c9dddcf80, type 'CMP_EQ'
8562.569419072:main Q:Reg/w0  : eval expr 0x561c9dddcf20, type 'V[86]'
8562.569425909:main Q:Reg/w0  : rainerscript: var 17: 'rsyslogd-2307'
8562.569454839:main Q:Reg/w0  : eval expr 0x561c9dddcf20, return datatype 'S'
8562.569463719:main Q:Reg/w0  : eval expr 0x561c9dddcf80, return datatype 'N'
8562.569469502:main Q:Reg/w0  : if condition result is 0
8562.569474698:main Q:Reg/w0  :     IF
8562.569487271:main Q:Reg/w0  :         var 'programname'
8562.569507498:main Q:Reg/w0  :       ==
8562.569523822:main Q:Reg/w0  :         string 'docker'
8562.569549617:main Q:Reg/w0  : eval expr 0x561c9dddf780, type 'CMP_EQ'
8562.569556377:main Q:Reg/w0  : eval expr 0x561c9dddefc0, type 'V[86]'
8562.569562533:main Q:Reg/w0  : rainerscript: var 17: 'rsyslogd-2307'
8562.569568453:main Q:Reg/w0  : eval expr 0x561c9dddefc0, return datatype 'S'
8562.569574734:main Q:Reg/w0  : eval expr 0x561c9dddf780, return datatype 'N'
8562.569580401:main Q:Reg/w0  : if condition result is 0
8562.569586028:main Q:Reg/w0  : END batch execution phase, entering to commit phase
8562.569592015:main Q:Reg/w0  : processBATCH: batch of 2 elements has been processed
8562.569598799:main Q:Reg/w0  : regular consumer finished, iret=0, szlog 0 sz phys 2
8562.569606353:main Q:Reg/w0  : DeleteProcessedBatch: we deleted 2 objects and enqueued 0 objects
8562.569612733:main Q:Reg/w0  : doDeleteBatch: delete batch from store, new sizes: log 0, phys 0
8562.569619238:main Q:Reg/w0  : regular consumer finished, iret=4, szlog 0 sz phys 0
8562.569624860:main Q:Reg/w0  : main Q:Reg/w0: worker IDLE, waiting for work.
8562.569640696:7f075a82dab0: thread created, tid 7, name 'in:imuxsock'
8562.569649200:7f075a82dab0: set thread name to 'in:imuxsock'
8562.569665945:imuxsock.c     : --------imuxsock calling select, active file descriptors (max 4): 4 
8562.569689335:7f075a843ab0: thread created, tid 6, name 'in:immark'
8562.569697227:7f075a843ab0: set thread name to 'in:immark'

0 ответов

Другие вопросы по тегам