CentOS日志系统组成详解

分类:CentOS教程 阅读:88221 次

日志系统有三部分组成:
一、使用什么工具记录系统产生的日志信息?
syslog服务脚本管理的两个进程: syslogd、klogd 来记录系统产生的日志信息;
klogd 进程是专门为内核产生的日志信息服务的。
syslogd 进程是专门为应用程序服务(除了内核)产生的日志信息服务的;
只有调用了 logger 接口,应用程序才可以调用 syslogd工具帮助记录日志信息。

二、只要系统服务在运行,就会产生日志信息,我们使用专门的工具把它记录到磁盘上了,为了方便

分析日志,日志文件不能太大、很久以前的日志文件我们应该把它删掉。这些工作由谁完成呢?
使用 logrotate 命令来滚动,syslog记录的日志文件。

三、为了让人们从繁忙的工作中解脱出来。自动化管理:日志文件的滚动、备份、压缩等工作。
使用两个忠实的劳动者(进程):crond 和 anacron ,完成上述的所有工作。

CentOS日志系统组成详解

看看它们各部分的实现过程:
1、syslog
syslog 只是用来管理 sysogd 和 klogd 的服务脚本。它们的配置文件在 /etc/syslog.conf

配置文件格式:
facility.priority /path
facility 是用来定义由谁产生的日志信息:那个软件、子系统运行过程中产生的日志信息。
priority 是用来定义记录什么类型的日志信息。是应用程序产生的所有信息都把它记录到日志

文件中呢,还是只记录该应用程序的错误日志信息等等。
/path/file_name 是用来定义把日志信息写到哪里去。

查看常见的facility和priority:

syslog 有统一的日志文件格式,方便管理员阅读。
Linux 系统日志文件的标准格式:
事件发生的时间 哪台主机的日志 产生日志信息的系统 系统发生的事件
它们各字段之间使用空格隔开。

说明:
事件发生的时间: Jun 12 10:01:01
哪台主机的日志: node2
产生日志信息的系统: crond[5490]
系统发生的事件: CMD (run-parts /etc/cron.hourly)

2、日志文件的滚动:
所有的日志文件都会随着时间的推移和访问次数的增加而迅速增大,因此必须对日志文件进行定期

清理以免造成磁盘空间不必要的浪费。同时这也得以后日志分析方便。
日志滚动处理程序 logrotate,能够自动(当然自动就是把日志滚动做成周期性任务来完成的)完成日志

的压缩、备份、删除和日志邮寄等工作。
每个日志文件都可以被设置成每日、每周或每月处理,也能设置当日志文件太大时立即滚动。
logrotate 的工作原理:把被滚动的日志文件定义logrotate的配置文件(/etc/logrotate.d/fine_name),

并定义好日志滚动事略。
日志滚动处理程序读取配置文件,然后就会根据用户定义的滚动策略来分析日志文件,是否对日志

文件进程滚动。
logrotate 的配置文件分为两段:主配置文件(/etc/logrotate.conf)和子配置文件定义在/etc/logrotate.d/

目录中(需要使用include把该目录包含进来 )
定义一个日志文件的滚动配置文件格式:
日志文件的全路径 {
logrotate 指令
}
了解一个日志滚动处理程序 logrotate 是怎样对 syslogd 和 kelogd 记录的日志文件进程滚动的?

如果我们写好了一个日志滚动的配置文件,怎样知道日志滚动处理程序根据配置文件对日志文件的

操作是否成功呢。
则要使用 logrotate 命令的选项以指定配置文件进程测试了。
【logrotate】命令格式
logrotate [选项] <configfile>
-d: 详细显示指令执行过程,便于排错或了解程序执行的情况。
-f: 强行启动日志文件的滚动操作。忽视 logrotate 中定义的日志滚动条件。可以用来测试所配置

的日志滚动是否正确。

决定使用 logrotate 应用程序来做 httpd 服务器的日志滚动.
1)、在/etc/logrotate.d/目录下,新建文件 httpd 做为 httpd 服务的日志文件的滚动配置文件。

注意:
要想使用命令【logrotate】的 -f 参数来测试刚配置好的日志滚动配置文件,记得一定要使用指令

rotate n 来备份几个滚动后日志文件。如果没有使用rotate
指令的话,【logrotate -f /etc/logrotate.d/configfile】是不会备份滚动后的日志的。

一执行【logrotate -f /etc/logrotate.d/configfile】就会看到一个现象:被滚动的日志文件被清空了。
使用 -f 选项,如果我们的配置文件中有错误,也会显示出来的。便于我们修改。
也可以使用【date】来调整系统时间,来执行/etc/cron.daily/logrotate任务。就可以看到结果了。

2)、模拟应用程序logrotate执行的时候,httpd服务器的日志是否滚动

使用 logrotate 命令的 -f 选项强制执行日志文件的滚动

再检查 httpd 服务器的日志是否滚动了?期待或

说明:
从结果可以得知:
使用命令【logrotate】实现了对 httpd 服务器的日志文件做了日志滚动。

3、怎么让日志滚动自动执行呢?
Linux 系统中有两个守护进程 crond 和 anacron ,用于自动执行系统和用户的周期性任务。
crond 与 anacron 是完全不同的两个用于定期执行任务的守护进程。
crond 假定服务器是 7x24 小时运行的,当有一段关机时间就会遗漏这一时间段

应该执行的 crond 任务。
anacron 是为了执行因为时间不连续,crond 而遗漏的任务。
这样,它们两携手起来就不会因为服务器关机或系统时间改变而遗漏计划任务了。
周期性任务计划又分为:系统的周期性任务计划(定义在/etc/crontab)和用户的周期性任务计划

(定义在/var/spool/cron/$user)。
crond 守护进程是如何完成周期性任务计划的执行的呢?
crond 首先会会读取,系统的周期性任务计划(定义在/etc/crontab)和用户的周期性任务计划

(定义在/var/spool/cron/$user),crond 守护进程时时监控着,
是否到了周期性任务计划的执行时间。当任务计划中的时间和日期与系统的当前时间和日期相同

时,就执行相应的周期性任务计划。crond 任务执行结束后,
任何输出将作为邮件发送给安排周期性任务的所有者。

说明:
这是定义系统的周期性任务计划的配置文件。
02 4 * * * root run-parts /etc/cron.daily 表示:每天4点02分,使用root用户去执行命令(脚本)run-parts /etc/cron.daily
其中 /etc/cron.daily 是命令或脚本(run-parts)的参数。
而 /etc/cron.daily 目录中定义很多要执行的可执行脚本,这些脚本就是要执行的任务。

查看每天的计划任务有哪些?

查看脚本 run-parts 是任务执行任务的

说明:
脚本 run-parts 是先判断目录/etc/cron.daily 的文件,符合条件的再让它去执行。

查看 /etc/cron.daily/logrotate 任务脚本

说明:
/usr/sbin/logrotate /etc/logrotate.conf
logrotate 日志滚动程序根据配置文件configfile(/etc/logrotate.conf)来对日志的滚动、备份、压缩等操作。