一、基础概念

系统引导启动、应用程序启动、应用程序运行过程中经常会输出一些信息,按正常逻辑其所有输出信息都应该是输出至其所在的控制台上,但是一些守护进程本来与终端没有关系,当它需要输出信息的时候保存于何处呢?既然记录输出信息是一个通过功能,就可以找一个应用程序把所有数据流都收束在一起之后记录在文件中,syslog就是实现这个功能的,而rsyslog是syslog的进阶版,它是syslog多线程的下一代实现方案

1. 通用格式

既然都使用rsyslog服务记录日志,那它的记录格式也是统一的,我们在/var/log/message中看到一般都是这种格式的

通用格式: 时间产生的日期时间    主机    进程[pid]:     事件内容

2. rsyslog中的重要术语

(1) 日志级别(priority)

事件有等级的概念,日志记录的时候是事无巨细还是只记录重要的信息。很显然,为了系统I\O,为了节约空间,我们也不应该事无巨细的记录,应该仅记录一些非常关键的信息。因此,为了能完成这些信息流的过滤和收束,syslog为每一个程序所产生的信息定义了级别(priority)

debug:调试级别,事无巨细通通记录的级别
info:消息级别
notice:注意
warn:警告
err:错误
crit:严重
alert:警报
emerg:紧急事件

(2) 设施(facillty)

从功能或程序上对日志进行分类

auth:认证
zuthpriv:认证授权
cron:周期性任务计划日志
daemon:守护进程日志
kern:内核日志
lpr:打印系统日志
mail:邮件系统日志
mark:防火墙标记日志
news:新闻组日志
security:安全相关日志
user:用户相关
uucp:古老的Unix到Unix的cp协议,现在基本没用了
自定义日志:local0-local7
syslog:

3. 特性

  • 多线程
  • 支持UDP、TCP、SSL、TLS、RELP
  • 可以将日志存储于MySQL、PGSQL、Oracle等数据库中
  • 用于强大的过滤器、实现过滤日志信息中任何部分的内容
  • 支持自定义输出格式

二、程序环境

1. 相关文件

rsyslogd:主程序文件
/etc/rsyslog.conf,/etc/rsyslog.d/*.conf:主配置文件
/etc/rc.d/init.d/rsyslog:Centos 6服务脚本
/usr/lib/systemd/system/rsyslog.service:Centos 7 Unit File

2. 主配置文件

/etc/rsyslog.conf由三部分组成,MODULES、GLOBAL DRICTIVES、RULES

  • MODULES:用来定义启动或加载哪些模块的
$ModLoad Mod_name:指明需要加载的模块
$ModLoad imudp:启用输入模块,自己成为log服务器时启用
$UDPServerRun #:监听端口
  • GLOBAL DRICTIVES:全局指令
$WorkDirectory /path:定义工作路径
$ActionFileDefaultTemplate:定义行文文件默认模板
$IncludeConfig:定义哪些文件作为配置片段装入
  • RULES:规则定义哪个设施、日志级别记录与何处
格式: facilty.priority    target

target可以有很多可用选项
文件:记录日志于指定文件中,通常应该为之/var/log目录下,文件路径之前可以用"-"(短横线)指明异步写入
用户:将信息发送给登录到系统上的指定用户终端
日志服务器:使用@host指定,表明将日志送往指定服务器
管道:| COMMAND

/etc/rsyslog.conf中的RULES段指令

*.info;mail.none;authpriv.none;cron.none /var/log/messages:*.info表示所有设施的info信息都记录于/var/log/messages中,
mail.none、authpriv.none、cron.none在这个文件中不记录
authpriv.* /var/log/secure:authpriv的所有级别都定义到/var/log/secure文件中
mail.* -/var/log/maillog:mail的所有级别都记录于/var/log/maillog文件中,"-"(短横线)指明异步写入
......
*.emerg :omusrmsg:* :所有设施的emerg都通过om输出模块发送给当前系统登录的所有用户
local7.* /var/log/boot.log:用户自定义的日志都记录于/var/log/boot.log