首页 > 代码库 > RSYSLOG
RSYSLOG
RSYSLOG is the rocket-fast system for log processing.这是官方的定义,详见http://www.rsyslog.com/
以下主要内容有:
一、查看rsyslog状态
二、解读rsyslog配置文件
三、全局指令中的配置日志的格式
四、3种记录日志方式(默认本地,远程,mysql库)是如何实现的
rsyslog 服务
查看rsyslog状态
[root@www ~]# service rsyslog status
rsyslogd (pid 1079) is running… -->默认是运行的
rsyslog的配置文件(/etc/rsyslog.conf)
vim /etc/rsyslog.conf
# rsyslog v5 configuration file -->rsyslog版本 # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html #### MODULES #### 加载的模块 $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) #支持logger命令的日志 $ModLoad imklog # provides kernel logging support (previously done by rklogd) #支持内核日志 #$ModLoad immark # provides --MARK-- message capability $ModLoad ommysql #支持mysql的模块(默认是没有的,需要自己添加) # Provides UDP syslog reception 允许514端口使用UDP协议远程接收日志信息,默认关闭 $ModLoad imudp $UDPServerRun 514 # Provides TCP syslog reception 允许514端口使用TCP协议远程接收日志信息,默认关闭 #$ModLoad imtcp #$InputTCPServerRun 514 #### GLOBAL DIRECTIVES #### 全局指令,定义日志格式默认模板 # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required, # not useful and an extreme performance hit #$ActionFileEnableSync on # Include all config files in /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf #### RULES #### 定义规则 # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console #关于内核日志所在位置 # Log anything (except mail) of level info or higher. # Don‘t log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages #记录所有日志类型的info级别以及大于info级别的信息到/var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间任务相关的信息除外 *.info :ommysql:192.168.13.130,Syslog,rsysloguser,rsyslog #记录所有信息到那个地址的mysql数据库中(mysql库名:Syslog,用户:rsysloguser,密码:rsyslog)(默认没有需要自己添加) # The authpriv file has restricted access. authpriv.* /var/log/secure #authpriv验证相关的所有信息存放在/var/log/secure # Log all the mail messages in one place. mail.* -/var/log/maillog #邮件的所有信息存放在/var/log/maillog;这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大 # Log cron stuff cron.* /var/log/cron #计划任务有关的信息存放在/var/log/cron # Everybody gets emergency messages *.emerg * #记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人 # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler #记录uucp,news.crit等存放在/var/log/spooler # Save boot messages also to boot.log local7.* /var/log/boot.log #启动相关信息 # ### begin forwarding rule ### 转发规则 # The statement between the begin ... end define a SINGLE forwarding # rule. They belong together, do NOT split them. If you create multiple # forwarding rules, duplicate the whole block! # Remote Logging (we use TCP for reliable delivery) # # An on-disk queue is created for this action. If the remote host is # down, messages are spooled to disk and sent when it is up again. #$WorkDirectory /var/lib/rsyslog # where to place spool files #$ActionQueueFileName fwdRule1 # unique name prefix for spool files #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown #$ActionQueueType LinkedList # run asynchronously #$ActionResumeRetryCount -1 # infinite retries if host is down # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional #*.* @@remote-host:514 # ### end of the forwarding rule ###
全局指令中的配置日志的格式
日志设备(类型).(连接符号)日志级别 日志处理方式(action)
日志设备(可以理解为日志类型):
auth –pam产生的日志
authpriv –ssh,ftp等登录信息的验证信息
cron –时间任务相关
kern –内核
lpr –打印
mail –邮件
mark(syslog)–rsyslog服务内部的信息,时间标识
news –新闻组
user –用户程序产生的相关信息
uucp –unix to unix copy, unix主机之间相关的通讯
local 1~7 –自定义的日志设备
日志级别:
debug –有调式信息的,日志信息最多
info –一般信息的日志,最常用
notice –最具有重要性的普通条件的信息
warning –警告级别
err –错误级别,阻止某个功能或者模块不能正常工作的信息
crit –严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert –需要立刻修改的信息
emerg –内核崩溃等严重信息
none –什么都不记录
从上到下,级别从低到高,记录的信息越来越少
详细的可以查看手册: man 3 syslog
连接符号
.xxx: 表示大于等于xxx级别的信息
.=xxx:表示等于xxx级别的信息
.!xxx:表示在xxx之外的等级的信息
Actions
1. 记录到普通文件或设备文件::
*.* /var/log/file.log # 绝对路径
*.* /dev/pts/0
测试: logger -p info ‘hello‘ #logger 命令用于产生日志
2. 转发到远程::
*.* @192.168.0.1 # 使用UDP协议转发到192.168.0.1的514(默认)端口
*.* @@192.168.0.1:10514 # 使用TCP协议转发到192.168.0.1的10514(默认)端口
3. 发送给用户(需要在线才能收到)::
*.* root
*.* root,user1,user2 # 使用,号分隔多个用户
*.* * # *号表示所有在线用户
4. 忽略,丢弃::
local3.* ~ # 忽略所有local3类型的所有级别的日志
5. 执行脚本::
local3.* ^/tmp/a.sh # ^号后跟可执行脚本或程序的绝对路径
如何查看rsyslog保存在本地的日志信息
tail /var/log/messages
测试:
产生日志信息:logger -p info ‘hello‘
查看:tail -1 /var/log/messages
[root@www ~]# tail -1 /var/log/messages
Nov 27 01:53:53 www root: hello
如何把日志记录到日志服务器
假设把A服务器上的日志信息保存到B服务器
1、A服务器需要修改配置文件:/etc/rsysylog.conf
在全局指令里添加:
*.* @B服务器IP地址
重启服务器:service rsyslog restart
2、B服务器需要修改配置文件:
开启远程接收日志信息模块和端口
$ModLoad imudp
$UDPServerRun 514
重启服务器:service rsyslog restart
验证:
在A服务器记录一条日志信息,logger -p info “hello”
到B服务器看是否有这条日志信息:tail /var/log/messages
如何把日志记录到mysql数据库
1、首先需要安装mysql
yum -y install mysql
2、安装rsyslog-mysql
yum -y install rsyslog-mysql
3、创建rsyslog数据库的脚本
cd /usr/share/doc/rsyslog-mysql-5.8.10
这里有这么个createDB.sql,通过他可以在mysql数据库中创建一个rsyslog的数据库
mysql < createDB.sql
Mysql
use Syslog -->进入Syslog库
SHOW tabels; -->查看表名
mysql> SHOW tables; +------------------------+ | Tables_in_Syslog | +------------------------+ | SystemEvents | | SystemEventsProperties | +------------------------+ 2 rows in set (0.01 sec)
它有2个表,日志存放在第一张表里即SystemEvents,第二张表未知 - -
4、在mysql中,为rsyslog添加个用户,并授权
grant all on Syslog.* to ‘rsysloguser‘@‘127.0.0.1‘ identified by "password"
grant all on Syslog.* to ‘rsysloguser‘@‘localhost‘ identified by "password"
5、编辑rsyslog配置文件/etc/rsyslog.conf
添加模块
$ModLoad ommysql
添加全局指令
*.info :ommysql:127.0.0.1,Syslog,rsysloguser,password
6、验证:logger -p info “hello”
在mysql的Syslog库中找到SystemEvents表,里面记录了日志信息
mysql -->登入mysql
use Syslog -->进入Syslog库
select * from SystemEvents\G; -->查看SystemEvents表信息
ID: 864 CustomerID: NULL ReceivedAt: 2014-11-27 02:29:42 DeviceReportedTime: 2014-11-27 02:29:42 Facility: 1 Priority: 6 FromHost: www Message: hello -->这就是刚才logger命令产生的日志 NTSeverity: NULL Importance: NULL EventSource: NULL EventUser: NULL EventCategory: NULL EventID: NULL EventBinaryData: NULL MaxAvailable: NULL CurrUsage: NULL MinUsage: NULL MaxUsage: NULL InfoUnitID: 1 SysLogTag: root: EventLogType: NULL GenericFileName: NULL SystemID: NULL
参考资料:
http://blog.csdn.net/hxh129/article/details/8089474
RSYSLOG