简介
rsyslog [官方](http://www.rsyslog.com/) 介绍说是一个高速的系统日志处理器,老版本的linux名字是syslog。稳定并且强大。
准备
众多linux发行版都已经自带rsyslog,所以更新下就好了
yum install rsyslog -y
rsyslogd -v
成功
详解
- 日志类型
auth –pam产生的日志 authpriv –ssh,ftp等登录信息的验证信息 cron –计划任务相关 kern –内核相关 lpr –打印相关 mail –邮件内容 mark(syslog)–rsyslog服务内部的信息,时间标识 news –新闻组 user –用户程序产生的相关信息 uucp –unix to unix copy, unix主机之间相关的通讯 local 1~7 –自定义的日志设备
2. 日志级别
```
debug –有调式信息的,日志信息最多
info –一般信息的日志,最常用
notice –最具有重要性的普通条件的信息
warning –警告级别
err –错误级别,阻止某个功能或者模块不能正常工作的信息
crit –严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert –需要立刻修改的信息
emerg –内核崩溃等严重信息
none –什么都不记录
从上到下,级别从低到高,记录的信息越来越少
```
.xxx: 表示大于等于xxx级别的信息 .=xxx:表示等于xxx级别的信息 .!xxx:表示在xxx之外的等级的信息 ``` 3. 主要配置文件和意义
保存路径/etc/rsyslog.conf
格式:日志设备或类型.(连接符号)日志级别 日志处理方式(action)
$ModLoad imuxsock
$ModLoad imklog
$ModLoad immark
$ModLoad imudp #打开ucp 通过ucp传日志
$UDPServerRun 514 #ucp端口
$ModLoad imtcp #打开tcp 通过tcp传日志
$InputTCPServerRun 514#tcp端口
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #定义日志格式默认模板
$ActionFileEnableSync on
$IncludeConfig /etc/rsyslog.d/*.conf
#关于内核的所有日志都保存在/dev/console
kern.* /dev/console
# 记录所有日志类型的info级别以及大于info级别的信息保存到/var/log/messages,但是mail邮件信息,authpriv验证信息和cron计划任务相关的信息除外
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# authpriv验证相关的所有信息存放在/var/log/secure
authpriv.* /var/log/secure
# 邮件的所有信息存放在/var/log/maillog; -符号表示是使用异步的方式记录, 日志一般都会比较大
mail.* -/var/log/maillog
# 计划任务有关的信息存放在/var/log/cron
cron.* /var/log/cron
# 记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人
*.emerg *
# 记录uucp,news.crit等存放在/var/log/spooler
uucp,news.crit /var/log/spooler
# 启动的相关信息
local7.* /var/log/boot.log
-
增加讲解一个重要特性(队列)
队列是 rsyslog 的核心。下图展示了rsyslog处理消息的流程:
队列分为 Main Queue 和 Action Queue 队列,Main 队列 只有一个,Action 队列 有多个。 队列的工作模式有Direct, Disk, In-Memory, Disk-Assisted Memory四种
-
Direct 直接将数据放出,没有buffer。如果接收方无法处理,数据就会被丢掉。
-
Disk 使用磁盘作为缓存,数据如果不能及时处理,就是用磁盘做缓存。
-
In-Memory 使用内存作为缓存,所以效率非常高,但是相对的它们的可靠性没有Disk Queue好。 内存队列也分2种
1)FixedArray 是预分配固定大小的队列,也是Main Queue的默认模式。适合日志小的时候。
2)LinkedList 是动态分配大小的队列,适合队列日志很大的情况。
-
Disk-Assisted Memory 它集成了In-Memory 和 Disk 这两种队列的优点。 如果一个In-Memory Queue定义了队列名,它自动就变成 Disk-Assisted(DA)模式。
-
$ #接收队列
$WorkDirectory /opt/queues #队列文件存储目录
$MainMsgQueueType LinkedList #选择使用内存队列模式
$MainMsgQueueFileName <name> #存储队列数据时用的文件名
$MainMsgQueueMaxFileSize 100M #队列单文件尺寸大小
$MainMsgQueueHighWatermark 10000 #当内存队列达到这些元素时,开始回写磁盘。
$MainMsgQueueLowWatermark 1000 #当内存队列小于这些元素时,停止回写磁盘。
$MainMsgQueueMaxDiskSpace 20g #限制磁盘队列大小。
$MainMsgQueueMaxFileSize 200m #队列单文件尺寸大小。
$MainMsgQueueSaveOnShutdown on #在rsyslogd关闭时,要保存队列中数据。
$MainMsgQueueDiscardSeverity 8 #丢弃消息等级设定,数字越低丟的越多,设置8代表禁止丢弃消息。
$MainMsgQueueDiscardMark 1000000000 #超出10亿后,会禁止新消息入队
$MainMsgQueueTimeoutEnqueue 3000 #超时3秒,TCP或local_socket方式下,预防资源夯住,引起崩溃。
$MainMsgQueueDequeueBatchSize 500 #优化带宽,设置每批次传输元素量,尽可能每次传输更多的数据。
$ActionForwardDefaultTemplate RSYSLOG_ForwardFormat #定义转发消息格式模板,使用系统默认转发格式。
$ #发送队列(可多个)
$WorkDirectory /opt/data2/ #定义工作目录。例如队列文件存储存储文件夹。
$ActionQueueType LinkedList #选择使用内存队列模式。
$ActionQueueFileName <name> #如果队列模式使用内存模式,同时配置这个参数后,意味激活磁盘队列。
$ActionQueueHighWatermark 10000 #当内存队列达到这些元素时,开始回写磁盘。
$ActionQueueLowWatermark 1000 #当内存队列小于这些元素时,停止回写磁盘。
$ActionQueueMaxDiskSpace 20g #限制磁盘队列大小。
$ActionQueueMaxFileSize 200m #队列单文件尺寸大小。
$ActionResumeRetryCount -1 #失败后重试次数,-1 代表无限。
$ActionQueueSaveOnShutdown on #在rsyslogd关闭时,要保存队列中数据。
$ActionQueueDiscardSeverity 8 #丢弃消息等级设定,数字越低丟的越多,设置8代表禁止丢弃消息。
$ActionQueueDiscardMark 1000000000 #超出10亿后,会禁止新消息入队,丢弃消息。
$ActionQueueTimeoutEnqueue 3000 #超时3秒,TCP或local_socket方式下,预防资源夯住,引起崩溃。
$ActionQueueDequeueBatchSize 500 #优化带宽,设置每批次传输元素量,尽可能每次传输更多的数据。
示例
-
将本机所有的日志文件放入/opt/logs/sys.log
在配置文件中最后加上
. /opt/logs/sys.log #不影响原来文件内容和路径,只是增加一个文件保存所有日志
2. 将本机所有的日志文件传送到远程服务器
1) 客户端的配置文件中增加
```
*.* @192.168.1.1 # server端使用UDP协议
或 ``` . @@192.168.1.1 # server端使用TCP协议
或
```
*.* @192.168.1.1:11514 # server端带端口号的
2) 服务端的配置文件中修改
```
$modload imudp # 使用UDP协议 $UDPServerRun 514
```
$ModLoad imtcp # 使用TCP协议
$InputTCPServerRun 514
- 外部服务器发送过来的所有日志保存到一个的文件中 服务端的配置文件中的尾部增加
:fromhost-ip, isequal,"192.168.2.161" /var/log/161.log
意思是接收到服务器ip为192.168.2.161的所有日志 放入文件/var/log/161.log
4. 使用模板保存
服务端的配置文件中的GLOBAL DIRECTIVES处增加
```
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" * #定义一个模板规则
*.* ?RemoteLogs #所有消息指定为RemoteLogs模板处理
& ~ #意思是重定向规则,停止对日志消息的进一步处理,并且不要在本地写入
意思是接收到所有日志 放入文件/var/log/以机器主机名命名的专有目录中
todo
####问题集合
####扩展阅读
- http://www.rsyslog.com/doc/rsyslog_conf_global.html
- http://blog.chunshengster.me/wp-content/uploads/2013/07/rsyslog_config_opt.png
- http://bigsec.net/one/tool/rsyslog.html
- http://www.tuicool.com/articles/Jv2eUvn
- http://www.open-open.com/lib/view/open1440982522565.html