一、日志系统定义及信息存放点
日志级别:用于定义不同的日志信息的。
子系统:facility
每一个子系统都有可能产生各种级别的日志信息,所以我们通常定义去记录信息的时候,要指明白记录哪一个子系统所产生的信息。同样还要记录明白记录多大级别以及多大级别以上的所有级别的信息。
syslog服务:
syslogd:系统,非内核产生的信息
klogd:内核,专门负责记录内核产生的日志信息
klogd记录的信息:
用命令dmesg或者cat /var/log/dmesg查看显示的是在启动init之前所产生的所有信息。
syslogd记录的信息:
一旦我们系统的控制权有内核转交给/sbin/init之后的信息都有syslogd来记录。我们这里可以用chkconfig –list syslog来查看syslogd是否开启。我们也可以用service syslog status查看一下状态。
信息存放点:
1、/var/log/messages:系统标准错误日志信息;非内核产生引导信息;各子系统产生的信息
日志需要滚动(日志切割):
由于我们的日志每天都会产生,如果不采取措施来管理,那么多日志对我们来说管理起来是非常不便的,所以我们这里将日志近期进行滚动,日志滚动又称日志切割,但是日志滚动或日志切割是什么?下来给大家讲个例子大家就一目了然了。
例如:messages(现在新的) messages.1 messages.2 messages.3:从左向右滚动
解析:第一次产生messages,假设每周滚动一次,过了一个周,他就会把原来的messages重命名为messages.1,在重新定义一个messages,如果又过了一个周,它会把原来的messages.1重命名为messages.2。把messages重命名为messages.1再重新定义一个messages,依次类推。【时间越久后面的数字越大】
这里我们还可以设置多个条件,我们可以在设置时间的时候同时也设定大小,这样我们可以看谁先达到标准就按照谁的来进行日志切割。例如:我们设置一周滚动一次,同时我们还设置日志达到100M的时候滚动一次。如果过完一周还是没有达到100M,就按周进行滚动,如果一周还没有过完就达到了100M的话,就按大小进行滚动。我想到这里大家已经明白什么是日志滚动了吧。
我们系统上有一个专门的工具进行日志切割的logrotate,可以实现滚动、压缩或者发送系统日志的。事实上,系统上有一个专门的日志计划,来实现日志滚动的,在/etc/cron.daily/logrotate里面的脚本,内容如下:
我们脚本中使用/usr/sbin/logrotate这个命令,借助于/etc/logrotate.conf这个配置文件来完成日志滚动的,是每隔一天都会完成日志滚动的。而滚动信息和日志文件在/etc/logrotate.conf下面。
- #!/bin/sh
- #
- /usr/sbin/logrotate /etc/logrotate.conf
- EXITVALUE=$?
- if [ $EXITVALUE != 0 ]; then
- /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
- fi
- exit 0
如果我们将来要想管理某一个日志文件,我们也可以这样手动在下面添加一个就行了。或者是在/etc/logrotate.d目录下面添加一个文件,它们的格式和下面添加的格式是一样的。
- # see "man logrotate" for details
- # rotate log files weekly
- weekly :时间每周滚动一次
- # keep 4 weeks worth of backlogs
- rotate 4 :保存多少个版本,如果超过这个版本的都会被清除。
- # create new (empty) log files after rotating old ones
- create :创建空的日志文件
- # uncomment this if you want your log files compressed
- #compress
- # RPM packages drop log rotation information into this directory
- include /etc/logrotate.d :包含/etc/logrotate.d目录下的文件,说明这里面的还不完整。在它这个目录下还有,每一个文件是专门定义一个子系统的滚动机制的。
- # no packages own wtmp -- we'll rotate them here
- /var/log/wtmp { :指定一个日志文件
- monthly :这里是按月滚动的。上面的按周滚动是全局的,如果你自己定义就按照自己定义大小滚动
- minsize 1M :最小为1M
- create 0664 root utmp :创建一个新的文件,权限为644(rw-r--r--),属主是谁 ,日志文件叫什么名字
- rotate 1 :保留1个历史版本
- }
- /var/log/btmp {
- missingok
- monthly
- minsize 1M
- create 0600 root utmp
- rotate 1
- }
- # system-specific logs may be also be configured here.
2、/var/log/maillog: 邮件系统产生的日志信息
在这里面不管是谁发给谁的邮件它都会记录。
3、/var/log/secure: 安全日志信息
它的权限比较独特,不允许随便查看的权限是600,只有管理员才能查看,为什么其它用户不能查看?任何一个用户在登录的时候,输入登录名,输入的密码是否输错了,尝试登录了几次,在这里面都是有记录的,我们用tail -5 /var/log/secure查看一下(由于内容太多,所以这里我们只取后3行)。所以一般不让普通用户随便查看。将来我们可以分析它,有几个人尝试登录,登录时出现了多少登录错误,这个我们到时候都可以经过分析它而知道的。
二、自己定义日志
我们下来开始实行如何自己定义记录那些日志,记录哪些级别日志,记录子系统所产生的日志,syslog的文件在/etc/syslog.conf。
定义配置文件的格式为:
- facility.priority action
- facility,可以理解为日志的来源或设备目前常用的facility有以下几种:
- auth # 认证相关的
- authpriv # 权限,授权相关的
- cron # 任务计划相关的
- daemon # 守护进程相关的
- kern # 内核相关的
- lpr # 打印相关的
- mail # 邮件相关的
- mark # 标记相关的
- news # 新闻相关的
- security # 安全相关的,与auth 类似
- syslog # syslog自己的
- user # 用户相关的
- uucp # unix to unix cp 相关的
- local0 到 local7 # 用户自定义使用
- * # *表示所有的facility
priority(log level)日志的级别,一般有以下几种级别(从低到高,级别越低越详细) 【提示:级别越低,信息量越大,保存到磁盘上,会产生大量的磁盘I/O,导致硬盘工作超负荷,所以一般不要定的过低】
- debug # 程序或系统的调试信息 【一般在排除错误的时候,能够把详细信息给你列出来】
- info # 一般信息
- notice # 不影响正常功能,需要注意的消息
- warning/warn # 可能影响系统功能,需要提醒用户的重要事件
- err/error # 错误信息
- crit # 比较严重的
- alert # 必须马上处理的
- emerg/panic # 会导致系统不可用的
- * # 表示所有的日志级别
- none # 跟* 相反,表示啥也没有
action(动作)日志记录的位置
- 系统上的绝对路径 # 普通文件 如: /var/log/xxx
- | # 管道 通过管道送给其他的命令处理
- 终端 # 终端 如:/dev/console
- @HOST # 远程主机 如: @10.0.0.1
- 用户 # 系统用户 如: root
- * # 登录到系统上的所有用户,一般emerg级别的日志是这样定义的
定义格式例子:
- mail.info /var/log/mail.log
- # 表示将mail相关的,级别为info及info以上级别的信息记录到/var/log/mail.log文件中
- auth.=info @172.16.58.1 # 表示将auth相关的,基本为info的信息记录到172.16.58.1主机上去前提是172.16.58.1要能接收其它主机发来的日志信息
- user.!=error # 表示记录user相关的,不包括error级别的信息
- user.!error # 与user.error相反
- *.info # 表示记录所有的日志信息的info级别
- mail.* # 表示记录mail相关的所有级别的信息
- *.* # 记录任何相关所有级别的信息
- cron.info;mail.info # 多个日志来源可以用";" 隔开
- cron,mail.info # 与cron.info;mail.info 是一个意思
- mail.*;mail.!=info # 表示记录mail相关的所有级别的信息,但是不包括info级别的
在/etc/syslog.conf下的文件的解析
- *.info;mail.none;authpriv.none;cron.none /var/log/messages
- #除了mail,authpriv,cron以外所有子系统info及info以上的日志都放到/var/log/messages
- authpriv.* /var/log/secure
- #跟用户授权相关的所有级别的文件都放在/var/log/secure
- mail.* -/var/log/maillog
- #mail的所有级别都放在/var/log/maillog下面,前面加个“-”横杠,是异步写入,不是立即写到磁盘上去,而是先保存到内存里面,过一会才往磁盘上同步,前面几个没加杠的都是同步写入。
- *.emerg *
- #一旦系统上出现emerg这个信息,就立马通知所有点用户,只要用户等到当前系统上就里面收到这个信息,看到信息赶紧保存信息。
- local7.* /var/log/boot.log
- #跟引导相关的信息都放到/var/log/boot.log当中,我们查看这个文件的时候里面什么也没有,虽然我们这里定义了,但是意义并不大。
提示:不会立即生效。要想让它立即生效使用service syslog restart,但是如果这时候日志系统正在向syslog发日志信息,这时候的syslog是收不到的,所以一般我们不建议重启的,一般有一个命令是service syslog reload,让一个服务不用重启就可以读取它都配置文件,并重新生效的,相当于发送1号信号,表示不让服务重启也能让它重读配置文件的。
三、如何使用远程日志的
在/etc/rc.d/init.d/下面有个文件syslog,在它里面明白的说明我们要读取的配置文件,查看它配置文件/etc/sysconfig/syslog中都定义了什么?为了确保起见,我们最好重启服务(service syslog restart),在修改配置文件,配置文件的更改方式如图所示:这样改的目的是让它作为日志服务器,能够接收其它主机发来的信息,并且记录到本机上来。
如果说我们有其它主机,我们写个日志信息,那怎么记录给别人?那就编辑/etc/syslog.conf。修改如下:只有那台主机能够接收到mail产生的日志信息,它都能够进行记录的。
原来:mail.* -/var/log/maillog
改后:mail.* @172.16.58.25 【提示:另一台主机的IP】