我如何从journald中获取数据并通过rsyslog将其输出到logz

我有一些使用CoreOS的服务器。 CoreOS本身就是使用journald来logging所有的日志文件。 最新的稳定版本合并了docker 1.9,因此它还不支持docker日志驱动程序。

在探索了多个途径之后,我认为rsyslog可能是将日志logging到logz中的最简单的方法,因为它在文档中被列为支持日志托运人。

而且我发现有一个模块可以让你将日志和rsyslog链接在一起。 所以,使用一个容器我已经放弃了。

根据logz文档,我可以通过使用rsyslog基本上使用rsyslogd.conf的以下configuration将日志发送给他们

# ------------------------------------------------------- # 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 ~ 

但是,因为我没有使用日志文件input,但通过modimuxsock journald我省略了所有的日志文件configuration,并添加:

 $ModLoad imuxsock.so $OmitLocalLogging off 

我创build了一个运行rsyslogd的简单Docker镜像。 所以最后我有以下configuration文件,并通过docker的run -v hostpath:containerpath传入套接字。

 # # http://www.rsyslog.com/doc/ # # Input modules $ModLoad immark.so # provide --MARK-- message capability $ModLoad imuxsock.so # provides support for local system logging (eg 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 ~ 

说实话,我有点迷惑的types设置。 我以为我应该把它设置为dockerd。 当你运行journalctl -u单元时,Where单元是在Docker下运行服务的单元,它通过显示例如

它是否正确?

我的docker图像正在运行:

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

最后30行debugging输出:请注意,当dockerlogging了某些内容时,不会再有debugging出现。 我的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'