本帖最后由 温柔的笑猫 于 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
附录:
日志设备(可以理解为“日志类型”)
日志设备/类型 说明
auth –pam产生的日志
authpriv –ssh,ftp等登录信息的验证信息
cron –时间任务相关
kern –内核
lpr –打印
mail –邮件
mark(syslog) –rsyslog服务内部的信息,时间标识
news –新闻组
user –用户程序产生的相关信息
uucp –unix to unix copy, unix主机之间相关的通讯
local 1~7 –自定义的日志设备
日志级别
连接符号
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/(日志管理)
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/(日志管理)
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
继续补充实例:举例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
编辑回复