Rsyslog实现Nginx日志统一收集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rsyslog实现Nginx日志统一收集相关的知识,希望对你有一定的参考价值。

一、rsyslog 介绍

ryslog 是一个快速处理收集系统日志的程序,提供了高性能、安全功能和模块化设计。rsyslog 是syslog 的升级版,它将多种来源输入输出转换结果到目的地,据官网介绍,现在可以处理100万条信息。

 

二、Rsyslog应用

Rsyslog服务端配置

下面有一些参数没有做中文解释,是因为我也不是太了解,没办法做出解释,测试不出具体效果

需要自己去看看文档来解决了。

配置文件/etc/rsyslog.conf

 

$ModLoad imuxsock                                # provides support for local system logging (e.g. via logger command)

$ModLoad imklog                                  # provides kernel logging support (previously done by rklogd)

$ModLoad immark                                   # provides --MARK-- message capability

$ModLoad imudp                                    #打开ucp连接,通过ucp传日志

$UDPServerRun 514                                #UDP端口514

#$ModLoad imtcp                                  #打开tcp连接,通过tcp传日志

$InputTCPServerRun 10514                 #TCP端口10514          

#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

$IncludeConfig /etc/rsyslog.d/*.conf                                   #可以应用的配置文件

$WorkDirectory /data/weblogs                                           #默认的存储路径

$MainMsgQueueType LinkedList

$MainMsgQueueHighWatermark 10000

$MainMsgQueueLowWatermark 1000                                         

$MainMsgQueueMaxDiskSpace 20g                                           #占用磁盘总空间大小

$MainMsgQueueMaxFileSize 200m                                           #单个文件的最大大小

$MainMsgQueueSaveOnShutdown on

$MainMsgQueueDiscardSeverity 8

$template logfile,"/data/weblogs/nginx/log_bak/%syslogtag:F,91:1%.log"  #定义日志名称

$template logFormat, "%msg:2:$%\n"                                      #定义日志内容格式

$ActionFileDefaultTemplate logFormat                                    #定义默认的日志内容格式,需要先定义,在再这里应用

local7.*         -?logfile

Rsyslog  服务端配置相关参数解释:

 $template logfile,"/data/weblogs/nginx/log_bak/%syslogtag:F,91:1%.log"

分析:

         %syslogtag%   这个是一个固定的格式,是rsyslog服务器端的日志名称

        例如nginxrsyslog服务端传递的应该是这样的日志名称格式:learn1.game.access

        但是我们需要在rsyslog服务端,显示为learn1.game.access.log这样的格式

         在这个过程中就涉及到了正则和US-ASCII编码的匹配问题

当前参数为:$template logfile,"/data/weblogs/nginx/log_bak/%syslogtag%"

日志格式为:learn1.game.access[1534]

匹配参数:F是指定分隔符,%syslogtag:F,91:1%91US-ASCII编码中"["符号的值,然后取1,也就是说取值[1534]前面的值,得出的格式是learn1.game.access,在最后加上.log后缀,完整格式为%syslogtag:F,91:1%.log,日志格式为learn1.game.access.log

$template logFormat, "%msg:2:$%\n"

%msg%获取到的是nginx日志内容,但是它的显示方式是连续且没有分隔的

1)只获取%msg%内容

技术分享

红色框里的内容是一条完整的日志,其他的日志再后面顺序追加了,阅读感极差

2)只获取%msg%\n内容

技术分享

3)完美的日志格式,%msg:2:$%\n

技术分享

已经很好的配置好了日志格式,对后期日志的刷选也方便了

上述配置,是用到了正则表达式的相关知识。

上面的两条配置涉及的只是比较多,在匹配这一块,涉及到了正则表达式,US-ASCII编码。

关于其他内容访问一下url学习,没办法做出明确的总结

学习链接:https://wiki.tankywoo.com/tool/rsyslog.html#_2

                  http://www.cnblogs.com/tobeseeker/archive/2013/03/10/2953250.html

                  http://www.cnblogs.com/hanyifeng/p/5463338.html

                     

官网文档:http://www.rsyslog.com/doc/v8-stable/configuration/modules/idx_input.html

                  http://www.rsyslog.com/doc/v8-stable/configuration/property_replacer.html

Nginx配置

 

黄色部分为新添加的配置参数

 

server

        {

                listen       80;

                server_name  learn1.proxy.com;

                index index.php  index.html index.htm;

                root  /data/www/learn1.proxy.com;

                error_log  /data/weblogs/learn1_error.log  crit;

                access_log  /data/wwwlogs/learn1.log  access;

                access_log   syslog:local7:info:192.168.110.47::learn1.game.access access;

 

           location ~ \.php$ {

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi.conf;

        }

        }


本文出自 “10946218” 博客,谢绝转载!

以上是关于Rsyslog实现Nginx日志统一收集的主要内容,如果未能解决你的问题,请参考以下文章

ELK日志系统之使用Rsyslog快速方便的收集Nginx日志

rsyslog转发nginx日志(rsyslog发送到logstashh)

通过Rsyslog实现对Nginx日志发送至日志服务器

日志收集二:使用rsyslog (v5版本)进行日志汇总

巧用rsyslog收集多套日志并做单套日志的过滤分离

ELK之收集haproxy日志