使用rsyslog收集日志

为何使用rsyslog?服务器

    1.他是POSIX-like系统中标准的logging,有些软件,好比haproxy,只使用syslog。因此你不能彻底消除它网络

    2.经过网络硬件被使用app

    3.它有更复杂的设置,但更多的功能比竞争对手的更好。例如,Elastic Filebeat仍然不能使用inofity异步

    4.低内存的使用。async

    5.容许在保存和转发以前更改消息ide

    6.相比rsyslog的功能更加全面
性能


rsyslog使用的协议为:syslog.加密

image.png

消息格式spa

    经过网络传输的syslog消息看起来是这样的:日志

    <PRI> TIMESTAMP HOST TAG MSG

    PRI:优先级。facility * 8 + severity  

    facility:0-23         severity:级别

    TIMESTAMP:时间格式

    HOST:主机名

    tag:包含生成消息的程序的名称

    msg:消息

    

rsyslog日志收集的主体流程:

    客户端(input--->filter---->output)===网络传输===>服务端(input--->filter---->output)


客户端配置解析:

        input:

                image.png

                主要选项:

                    tag:指定这个值的做用是在template中指定rsyslogtag内容,而后传递给服务端用于区分文件名。

                    facility:能够不指定,默认就是local0,这个数据会传递到服务端用于作条件判断

                涉及到读取通配符设置的日志文件和多行读取:

                     1.为何使用通配符设置日志文件:若是一个目录下有不少日志文件,你都像传输到远程主机去,此时能够设置如上面的第一行:

                      格式为:

                            image.png

                            说明:使用*匹配全部文件,此时匹配的是整个路径,并开启元数据,这样元数据就会附加到消息中。而后再filter的过程当中使用re_extract过滤整个路径只剩下文件名,而后将这个文件名附                         加给一个局部属性,最后将这个局部属性附加到template,并和对应的tag部分想结合组成新的tag部分。

                    固然也能够不使用,如第2,3个将指定的日志文件传输到远程主机。

                   

                    2.日志多行处理:

                        使用多行消息的文件imfile提供3个选项

                        readMode=1消息被空字符串分割

                        readMode=2新消息从行首的rhe开始。若是行是从空格或表格开始的,它就是消息的一部分。堆栈跟踪一般是这样的

                        startmsg.regex经过regexp(POSIX Extended)定义新消息

                        前两个选项在inotify模式下有问题,第三个选项能够所有替换为正确的regexp,因此咱们会使用它。读取多行日志有一个微妙之处。新消息标记一般放在消息的第一行。所以,在新消息开始以前,咱们不能肯定最后一条消息是否完整。由于最后一条消息可能永远不会被传输。为了不这种状况,咱们设置参数readTimeout,在此秒数以后,最后一条消息被认为已经完成。

                          image.png

    filter  and output:

           上面的input部分已经指定了ruleset规则集,里面能够包含多个操做,操做里面能够引用不一样的template,同时能够指定传输的类型,在template中能够指定要传输的日志格式。格式之间可能有空格。

            template有多种用法:

                    1.在客户端指定传输的日志格式

                     2.在服务端指定日志的保存的路径已经文件名

            此处使用RELP模块进行传输而不是UDP或TCP

                    缘由:若是消息是使用rsyslog在主机之间传输的,那么可使用RELP ,l而不是普通的TCP。它是为rsyslog建立的,如今其余一些系统也支持它。例如,它由Logstash和Graylog支持。使用TCP                 进行传输。能够选择使用TLS加密消息。它比普通的TCP syslog更可靠,由于它不会在链接中断时丢失消息。它解决了多行消息的问题。

            image.png

            

server:                         

        input:使用imRELP模块接收日志并指定相应的规则集。而且引用指定模块消除msg以前的空格。

            让咱们加载全部必要的模块并关闭$EscapeControlCharactersOnReceive,不然咱们将在接收到的消息中使用\n而不是新行.

            固定的格式:设置目录和文件的权限。

            以下为指定的格式,通常不须要修改:

             image.png       

    filter and    写入新文件:       

        如今让咱们建立规则集来解析传入的消息并将其保存到适当的文件和文件夹中。依赖于syslog的服务指望节省消息时间和其余syslog字段。所以,具备标准功能的消息以syslog格式保存。对于具备local0-local7功能的消息,咱们将从tag中生成文件名,并保存没有其余syslog字段的纯消息。消息前面有额外空间的问题仍然存在,由于它出如今消息解析阶段。咱们会把它剪掉。

        为了提升性能,咱们将使用异步写:asyncwrite ="on"和大缓冲区:ioBufferSize=64k。咱们不会在每一个接收到的消息:flushOnTXEnd="off"以后刷新缓冲区,可是咱们将每秒刷新一次,以便在日志服务器上拥有新日志:flushInterval="1"

            说明:消息从上面的imRELP模块进行以后,进入以下的规则集,而后进行判断,并根据客户端传递过来的tag部分而后使用replace和field方法进行分割并赋值个appname和logpath,而后进入操做,类型是写入文件,文件名是根据dynaFile获取,template指定常规模块,将日志写入到文件。

          image.png


        如上action里面的dynaFile指定生成动态的文件路径的template。temolate部分以下:

          image.png


       另外还有队列,不过多说明。

相关文章
相关标签/搜索