1、Rsyslog简介
Rsyslog是一个主机可配置的、统一的系统日志记录工具。系统使用一个集中的系统日志进程,/etc/rsyslog.conf
是rsyslog的主配置文件。/etc/rsyslog.conf
、/etc/rsyslog.d/*.conf
和/etc/sysconfig/rsyslog
来配置rsyslog的行为。/etc/sysconfig/rsyslog
文件用于配置守护进程的运行参数。
2、配置文件
配置文件格式:
Facility.Priority;Facility1.Priority1... Action
配置文件中每条配置项的格式,配置说明如下表:
配置项 | 说明 |
Facility | 用来描述提交日志消息的应用程序或进程的标识符。例如,mail、kernel和ftp。 |
Priority | 日志级别用来说明日志记录的优先级,例如,debug、info、warning等 |
Action | 日志记录位置,Action可以将消息写入日志文件,将日志回显到控制台或其他设备,将日志写入已登录用户,或将消息发送到另一个rsyslog服务器。 |
1)Facility
配置值说明如下表:
auth | 认证相关的 | |
authpriv | 权限,授权相关的 | |
cron | 任务计划相关的 | |
daemon | 守护进程相关的 | |
kern | 内核相关的 | |
lpr | 打印相关的 | |
邮件相关的 | ||
mark | 标记相关的 | |
news | 新闻相关的 | |
security | 安全相关的,与auth类似 | |
user | 用户相关的 | |
uucp | unix to unix cp 相关的 | |
local0-local7 | 用户自定义 | |
| *表示所有类型 |
2)Priority
日志优先级的配置值说明如下表:
debug | 程序或者系统调试信息 |
info | 一般信息 |
notice | 不影响正常功能,需要注意的信息 |
warning/warn | 可能影响系统功能,需要提醒用户的重要事件 |
err/error | 错误信息 |
crit | 比较严重的 |
alert | 必须马上处理的,警告 |
emerg/oanic
| 会导致系统不可用的 |
| 所有日志级别 |
none | 与 * 的设置相反,不记录日志 |
3)Action
日志记录位置的配置值说明如下表:
系统上的绝对路径 | 普通文件 如:/var/log/xxxx |
| 管道,发送给其他命令处理,数据进一步加工 |
终端 | 终端 如,/dev/console |
| 远程主机 如:@192.168.101.122 也可以后面更上该机器的对应路径 , @192.168.101.122:/var/log/xxxxx |
用户 | 系统用户,发送给此用户处理,按照此用户的日志来记录 |
| 登录到系统上的所有用户,一般emerg级别日志就是这样处理的 |
配置文件说明:
/etc/rsyslog.conf
是rsyslog服务的总配置文件,而/etc/rsyslog.d
目录是单独配置的rsyslog配置文件。
/etc/rsyslog.conf
配置文件内容:
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
# 推荐将所有的rule都配置在该目录下,/etc/rsyslog.conf中不写rule
例如,
/etc/rsyslog.d/message.conf
配置文件中内容如下:
auth.* @prep.ai.mit.edu
auth.* root,amrood
netinfo.err /var/log/netinfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name
/etc/rsyslog.d/app.conf
配置内容如下:
*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
mark.* /dev/console
/etc/rsyslog.d/comm.conf
配置内容如下:
# 记录mail日志等级为error及以上日志
mail.err /var/log/mail_err.log
# 记录mail所有等级为warn级别的日志(仅记录warn级别)
mail.=warn /var/log/mail_err.log
# 记录kern所有日志
kern.* /var/log/kern.log
# 将mail的所有信息,除了info以外,其他的都写入/var/adm/mail
mail.*;mail.!=info /var/adm/mail
# 将日志等级为crit或更高的内核消息定向到远程主机finlandia
# 如果主机崩溃,磁盘出现不可修复的错误,可能无法读取存储的消息。如果有日志在远程主机上,可以尝试找出崩溃的原因。
kern.crit @finlandia
# 记录所有类型的warning等级及以上日志
*.warning /var/log/syslog_warn.log
# 记录mail的warning日志和kern的error日志,其他所有的info日志
*.info;mail.warning;kern.error /var/log/messages
# 记录kernel的info到warning日志
kern.info;kern.!err /var/adm/kernel-info
# 将mail和news的info级别日志写入/var/adminfo
mail,news.=info /var/adm/info
# 将所有系统中所有类型的info日志和notice日志存入/var/log/massages,mail的所有日志除外。
*.=info;*.=notice;\
mail.none /var/log/messages
# 紧急消息(emerg级别)将使用wall显示给当前所有登录的用户
*.=emerg *
# 该规则将所有alert以及更高级别的消息定向到操作员的终端,即登录的用户“root”和“joey”的终端。
*.alert root,joey
3、logger命令
Linux中的logger
命令,处理系统日志的一个非常有用的命令。logger
命令将日志消息发送到rsyslogd守护进程,从而引发系统日志记录。我们可以在任何时候从命令行检查syslogd守护进程及其配置。logger
命令可以从命令行向系统日志文件添加一行日志规则。
语法如下:
logger [-i] [-f file] [-p priority] [-t tag] [message]...
选项说明:
-d, --udp | 使用数据报(UDP)而不是使用默认的流连接(TCP) |
-i, --id | 逐行记录每一次logger的进程ID |
-f, --file file_name | 记录特定的文件 |
-h, --help | 显示帮助文本并退出 |
-n, --server | 写入指定的远程syslog服务器, 使用UDP代替内装式syslog的例程 |
-P, --port port_num | 使用指定的UDP端口。默认的端口号是514 |
-p, --priority priority_level | 指定输入消息的优先级, 优先级可以是数字 或者指定为 "facility.level" 的格式。 比如:"-p local3.info " local3 这个设备的消息级别为info。 默认级别是 "user.notice" |
-s, --stderr | 输出标准错误到系统日志。 |
-t, --tag tag | 指定标记记录 |
-u, --socket socket | 写入指定的socket, 而不是到内置系统日志例程。 |
-V, --version | 现实版本信息并退出 |
4、常用日志文件位置
所有的系统应用程序都在/var/log
及其子目录中创建日志文件。
例如:
程序 | 目录 |
httpd | /var/log/httpd |
samba | /var/log/samba |
cron | /var/log/ |
/var/log/ | |
mysql | /var/log/ |
5、logrotate日志分割
logrotate是一个日志文件管理工具。用于分割日志文件,防止单个文件占用空间太大,通常是删除旧的日志文件,并创建新的日志文件。可以节省磁盘空间。
logrotate 命令格式:
logrotate [OPTION...] <configfile>
选项说明:
-d, --debug | debug模式,测试配置文件是否有错误。 |
-f, --force | 强制转储文件。 |
-m, --mail=command | 压缩日志后,发送日志到指定邮箱。 |
-s, --state=statefile | 使用指定的状态文件。 |
-v, --verbose | 显示转储过程。 |
例如,
/etc/logrotate.conf
配置文件内容:
# 下面设定是 "logrotate 的默认值" ,如有另外文件设定了其他的值,
# 则就以其它文件的设定为主
weekly //默认每一周执行一次rotate轮转工作
rotate 4 //保留多少个日志文件(轮转几次).默认保留四个.就是指定日志文件删除之前轮转的次数,0 指没有备份
create //自动创建新的日志文件,新的日志文件具有和原来的文件相同的权限;因为日志被改名,因此要创建一个新的来继续存储之前的日志
dateext //这个参数很重要!就是切割后的日志文件以当前日期为格式结尾,如xxx.log-20131216这样,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1这种格式
compress //是否通过gzip压缩转储以后的日志文件,如xxx.log-20131216.gz ;如果不需要压缩,注释掉就行
include /etc/logrotate.d
# 将 /etc/logrotate.d/ 目录中的所有文件都加载进来
/var/log/wtmp { //仅针对 /var/log/wtmp 所设定的参数
monthly //每月一次切割,取代默认的一周
minsize 1M //文件大小超过 1M 后才会切割
create 0664 root utmp //指定新建的日志文件权限以及所属用户和组
rotate 1 //只保留一个日志.
}
# wtmp 可记录用户登录系统及系统重启的时间
# 配置中有minsize 的参数,要是文件大小没到设定值,可能不会每个月执行一次。