关于rsyslog的配置

回复 收藏
本帖最后由 温柔的笑猫 于 2015-12-4 17:14 编辑

1.准备工作
master:10.1.5.20
slave:10.1.5.21

在 服务器端(master) 和 客户端(slave) 分别安装 rsyslog:
[root@master ~]# yum install -y rsyslog
[root@master ~]# rsyslogd -version
rsyslogd 5.8.10, compiled with:
    FEATURE_REGEXP:                Yes
    FEATURE_LARGEFILE:            No
    GSSAPI Kerberos 5 support:        Yes
    FEATURE_DEBUG (debug build, slow code):    No
    32bit Atomic operations supported:    Yes
    64bit Atomic operations supported:    Yes
    Runtime Instrumentation (slow code):    No
See http://www.rsyslog.com for more information.
2.配置
配置文件如下:
[root@master ~]# vim  /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
$ModLoad imtcp                                       #打开tcp连接,通过tcp传日志
$InputTCPServerRun 10514                 
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                            /var/log/secure
mail.*                                                 -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                *
uucp,news.crit                                     /var/log/spooler
local7.*                                                /var/log/boot.log

(注:仅master配置,slave不需要配置)

举例1:
一般配置:要求将所有系统log都放入服务器端下的 /var/log/all.log 下
配置:
服务器(master):
[root@master# /etc/rsyslog.conf     
(在文件的最后添加)
*.*    /var/log/all.log
[root@master ~]# /etc/init.d/rsyslog restart

客户端(slave):
[root@slave ~]# /etc/rsyslog.conf

(在文件的最后添加)
*.*     @@10.1.5.20:10514            #通过tcp传--[@@是使用tcp协议转发,@是使用udp协议转发]
[root@slave ~]# /etc/init.d/rsyslog restart
测试:
tail -f /var/log/all.log

显示如下
Nov 24 16:44:54 slave kernel: Kernel logging (proc) stopped.
Nov 24 16:44:54 slave rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1467" x-info="http://www.rsyslog.com"] exiting on signal 15.
Nov 24 16:44:59 slave kernel: imklog 5.8.10, log source = /proc/kmsg started.
Nov 24 16:44:59 slave rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1489" x-info="http://www.rsyslog.com"] start




举例2:
配置:把来自local5级别的日志,写入/var/log/all.log
服务器(master):
[root@master ~]# /etc/rsyslog.conf

(在文件的最后添加)
local5.*        /var/log/all.log                    #把来自local5级别的日志,放入/var/log/all.log
local5.*        ~                                        #把来自local5级别的日志丢掉,防止信息写到本机的/var/log/message,

                                                              以免多个日志文件记录重复的日志。
[root@master ~]# /etc/init.d/rsyslog restart

客户端(slave):

(在文件的最后添加)
local5.*                    @10.1.5.20:514                                   #通过udp传--[@@是使用tcp协议转发,@是使用udp协议转发]
[root@slave ~]# /etc/init.d/rsyslog restart
测试:
[root@slave ~]# logger -p local5.info  "hello world"             # 这里必须指定local5级别,

                                                                                            # info代表“一般信息的日志,最常用”
[root@master ~]# tail -f /var/log/all.log

显示如下:
Nov 24 17:38:32 slave root: hello world
Nov 24 17:39:23 slave root: hello world
Nov 24 17:39:23 slave root: hello world
Nov 24 17:39:24 slave root: hello world
Nov 24 17:39:24 slave root: hello world
Nov 24 17:39:24 slave root: hello world




举例3:
配置:把包含“某字段”的日志写入/var/log/目录下“特定文件名”的文件里
服务器(master):
[root@master ~]# /etc/rsyslog.conf

(在文件的最后添加)
$template logfile,    "/var/log/logfile_%$year%%$month%%$day%.log"     # 日志的名称格式
:msg,contains,        "linan"            ?logfile                                   # 日志信息里包含"linan"这个字段

[root@master ~]# /etc/init.d/rsyslog restart

客户端(slave):
:msg,contains,        "linan"                @@10.1.5.20:10514            #通过tcp传

[root@slave ~]# /etc/init.d/rsyslog restart
测试:
[root@slave ~]# logger -t Label "hello world linan"          # 在日志正文给每行记录加上“Label”的标签

显示如下:
[root@master ~]# tail -f /var/log/logfile_20151204.log
Nov 24 18:26:46 slave Label: hello world linan
Nov 24 18:26:46 slave Label: hello world linan
Nov 24 19:05:57 slave Label: hello world linan
Nov 24 19:05:57 slave Label: hello world linan
Nov 24 19:05:58 slave Label: hello world linan


示例:
:msg,contains,"error"        # 选择包含 error 的日志 :hostname,isequal, "host1"   # 选择主机名为 host1 的日志 :msg,!regex,"fatal .* error" # 选择不匹配指定正则表达式的日志



附录:
日志设备(可以理解为“日志类型”)
日志设备/类型          说明
auth                        –pam产生的日志
authpriv                –ssh,ftp等登录信息的验证信息
cron                        –时间任务相关
kern                        –内核
lpr                        –打印
mail                        –邮件
mark(syslog)        –rsyslog服务内部的信息,时间标识
news                –新闻组
user                        –用户程序产生的相关信息
uucp                –unix to unix copy, unix主机之间相关的通讯
local 1~7                –自定义的日志设备


日志级别
从上到下,级别从低到高,记录的信息越来越少
详细的可以查看手册: man 3 syslog
级别说明级别值
debug–有调式信息的,日志信息最多7
info–一般信息的日志,最常用
notice–最具有重要性的普通条件的信息
warning–警告级别4
err–错误级别,阻止某个功能或者模块不能正常工作的信息
crit–严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert–需要立刻修改的信息
emerg–内核崩溃等严重信息
none–什么都不记录

连接符号
连接符号说明
.xxx表示大于等于xxx级别的信息
.=xxx表示等于xxx级别的信息
.!xxx
表示在xxx之外的等级的信息



logger的使用
logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。
logger -it error  -p local5.info "hello world"
-i 在每行都记录进程ID
-t 日志中的每一行都加一个error标签
-p 指定自定义的日志设备,和配置文件的local5.*对应,配置文件里没有.info。

注意:如果是自己写的程序,在生成日志的代码中需要用logger命令转到系统的日志接口。



原帖地址: http://my.oschina.net/duxuefeng/blog/317570?fromerr=3YWe6KTF

学习资料: http://www.apelearn.com/bbs/foru ... 0&highlight=rsyslog(日志类型;日志级别;连接符号)
                  http://ju.outofmemory.cn/entry/105103(rsyslog服务浅析)
                  http://blog.chinaunix.net/uid-24946452-id-4663191.html(配置详解)
                  http://www.tuicool.com/articles/Jv2eUvn(rsyslog配置)
                  http://www.xiaomastack.com/2014/11/06/logger-rsyslog/(日志管理)



2015-12-04 17:08 举报
已邀请:
0

温柔的笑猫

赞同来自:

本帖最后由 温柔的笑猫 于 2015-12-9 14:48 编辑

继续补充实例:举例4:
apache日志管理
[root@master ~]# mkdir /data/apache/logs
[root@master ~]# chown apache:apache /data/apache/logs
在服务端:
[root@master ~]# /etc/rsyslog.conf 在文件的最后添加

$template access_log, "%msg:2:$%\n"
$template error_log, "%msg%\n"  

# web1-access-log
$template access_log_file_web1, "/data/apache/logs/%$NOW%/access-log/web1-access_log"
# web1-error-log
$template error_log_file_web1, "/data/apache/logs/%$NOW%/error-log/web1-error_log"  

# web1-access-log
if $syslogfacility-text == 'local6' and $syslogtag == 'http-access:' and $fromhost-ip == '10.1.5.20' then -?access_log_file_web1;access_log
# web1-error-log
if $syslogfacility-text == 'local6' and $syslogtag == 'http-error:' and $fromhost-ip == '10.1.5.20' then -?error_log_file_web1;error_log

[root@master ~]# /etc/init.d/rsyslog restart


在客户端:
vim /etc/http/conf/httpd.conf
找到以下选项并将此选项标注#
CustomLog logs/access_log combined
ErrorLog logs/error_log
分别在此2个选项下添加如下内容
CustomLog "|/usr/bin/logger -p local6.info -t http-access" combined
ErrorLog "| /usr/bin/logger -p local6.info -t http-error"

[root@slave ~]# /etc/rsyslog.conf   在文件的最后添加
local5.*        /var/log/all.log            #过滤local5级别的日志,放入/var/log/all.log
local5.*        ~

[root@slave ~]# /etc/init.d/rsyslog restart

测试:
[root@master ~]# tail -f /data/apache/logs/%$NOW%/access-log/web1-access_log
[root@master ~]# tail -f /data/apache/logs/%$NOW%/error-log/web1-error_log






举例5:
Nginx日志管理(技能有限,这个配的并不完善,欢迎指点和批评)
在服务端:
[root@master ~]# /etc/rsyslog.conf   
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
$ModLoad imfile
$ModLoad immark  # provides --MARK-- message capability


# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514


# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 10514

在文件的最后添加

$template logfile_error_log,    "/var/log/logfile_%$year%%$month%%$day%/error.log"
:rawmsg, contains, "error" ?logfile_error_log
:rawmsg, contains. "error" ~

$template logfile_access_log,    "/var/log/logfile_%$year%%$month%%$day%/access.log"
:rawmsg, contains, "0800" ?logfile_access_log
:rawmsg, contains, "0800" ~




在客户端:
[root@slave ~]# /etc/rsyslog.conf     在文件的最后添加
$InputFileName /usr/local/nginx/log/error.log
$InputFileTag nginxerror:
$InputFileStateFile state-nginxerror
$InputFileSeverity error
$InputFilePersistStateInterval 20000
$InputRunFileMonitor

$InputFileName
/usr/local/nginx/log/access.log
$InputFileTag nginxaccess:
$InputFileStateFile state-nginxaccess
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$InputRunFileMonitor

$InputFilePollInterval 10

$template BiglogFormatNginx,"%msg%\n"

if $programname == 'nginxerror' then @
10.1.5.20:514;BiglogFormatNginx
if $programname == 'nginxerror' then ~
*.* @
10.1.5.20:514
if $programname == 'nginxaccess' then @
10.1.5.20:514;BiglogFormatNginx
if $programname == 'nginxaccess' then ~
*.* @
10.1.5.20:514



0

Landon

赞同来自:

well

0

Landon

赞同来自:

well

0

monga

赞同来自:

请问 

[root@master ~]# /etc/rsyslog.conf(在文件的最后添加)local5.*        /var/log/all.log                    #把来自local5级别的日志,放入/var/log/all.loglocal5.*        ~                                        #把来自local5级别的日志丢掉,防止信息写到本机的/var/log/message,                                                         以免多个日志文件记录重复的日志。

这里面的local5 是什么呢, 是 自定义的日志级别的名字     还是这个系统自己设置的名字,  这个可以随意更改吗,要是能,在哪儿改???

不太明白,麻烦帮忙解答下????

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: