从目前的状况来看,Syslog(系统日志)这一历史悠久的日志系统仍旧占据着最主流的地位。因为与类 UNIX平台之间的渊源,Syslog是在实际应用环境中最容易得到的日志系统。 同时,还有不少的基于Syslog的扩展产品存在,这其中也包括大量基于UNIX平台构建内核的网络硬件设备,这些设备每每都内置了Syslog功能支持,例如Cisco路由器就是如此。程序员
1、 配置syslog守护进程编程
syslog是Linux系统默认的日志守护进程。默认的syslog配置文件是/etc/syslog.conf文件。syslog守护进程是可配置的,它容许人们为每一种类型的系统信息精确地指定一个存放地点。如今,咱们先看看syslog.conf文件的配置行格式(这个文件里的每个配置行都是一样的格式),而后再看一个完整的syslog配置文件。syslog配置行的格式以下所示:服务器
mail.*/var/log/mail网络
这一行由两个部分组成。第一个部分是一个或多个“选择条件”;上例中的选择条件是“mail”。选择条件后面跟一些空格字符,而后是一个“操做动做”;上例中的操做动做是:/var/log/mailapp
1选择条件dom
选择条件自己分为两个字段,之间用一个小数点(.)分隔。前一字段是一项服务,后一字段是一个优先级。选择条件实际上是对消息类型的一种分类,这种分类便于人们把不一样类型的消息发送到不一样的地方。在同一个syslog配置行上容许出现一个以上的选择条件,但必须用分号(;)把它们分隔开。上面给出的例子里只有一个选择条件“mail”。你们能够在咱们后面给出的那个完整的syslog配置文件示例里看到同时有多个选择条件的配置行。表1列出了绝大多数 Linux操做系统变体均可以识别的选择条件。工具
2 优先级spa
优先级是选择条件的第二个字段,它表明消息的紧急程度。对一个应用程序来讲,它发出的哪些消息属于哪种优先级是由当初编写它的程序员决定的,应用程序的使用者只能接受这样的安排——除非打算从新编译系统应用程序。表2按严重程度由低到高的顺序列出了全部可能的优先级。操作系统
不一样的服务类型有不一样的优先级,数值较大的优先级涵盖数值较小的优先级。若是某个选择条件只给出了一个优先级而没有使用任何优先级限定符,对应于这个优先级的消息以及全部更紧急的消息类型都将包括在内。好比说,若是某个选择条件里的优先级是“warning”,它实际上将把“warning”、 “err”、“crit”、“alert”和“emerg”都包括在内。.net
3优先级限定符
syslog容许人们使用三种限定符对优先级进行修饰:星号(*)、等号(=)和叹号(!)。熟悉规则表达式的读者应该对这三种限定符不会感到陌生。星号(*)的含义是“把本项服务生成的全部日志消息都发送到操做动做指定的地点”。就像它在规则表达式里的做用同样,星号表明“任何东西”。在前面给出的例子里,“mail.*”将把全部优先级的消息都发送到操做动做指定的/var/log/mail文件里。使用“*”限定符与使用“debug”优先级的效果彻底同样,后者也将把全部类型的消息发送到指定地点。
等号(=)的含义是“只把本项服务生成的本优先级的日志消息都发送到操做动做指定的地点”。好比说,能够用“=”限定符只发送调试消息而不发送其余更紧急的消息(这将为应用程序减轻不少负担)。当你只须要发送特定优先级别的消息时,就要使用等号限定符。
就像它在编程时的用法同样,等号意味着等于且仅等于。叹号(!)的含义是“把本项服务生成的全部日志消息都发送到操做动做指定的地点,但本优先级的消息不包括在内”。好比说,这条syslog配置行将把除info优先级之外的全部消息发送到/var/log/mail文件里:
mail.*;mail.!info/var/log/mail
在这个例子里,“mail.*”将发送全部的消息,但“mail.!info”却把info优先级的消息排除在外。就像它在编程时的用法同样,叹号意味着“非”。
4 操做动做
日志信息能够分别记录到多个文件里,还能够发送到命名管道、其余程序甚至另外一台机器。syslog配置文件并不复杂,既容易阅读又容易操做使用。这个文件里的注释都很是有用,应该好好读读它们。
2、 创建一个中央日志服务器
1创建中央日志服务器前的准备工做
配置良好的网络服务(DNS和NTP)有助于提升日志记录工做的精确性。在默认状况下,当有其余机器向本身发送日志消息时,中央日志服务器将尝试解析该机器的FQDN(fullyqualifieddomainname,完整域名)。(你能够在配置中央服务器时用“-x”选项禁止它这样作。)若是 syslog守护进程没法解析出那个地址,它将继续尝试,这种毫无必要的额外负担将大幅下降日志记录工做的效率。相似地,若是你的各个系统在时间上不一样步,中央日志服务器给某个事件打上的时间戳就可能会与发送该事件的那台机器打上的时间戳不一致,这种差别会在你对事件进行排序分析时带来很大的困扰;对网络时间进行同步有助于保证日志消息的时间准确性。若是想消除这种时间不一样步带来的麻烦,先编辑/etc/ntp.conf文件,使其指向一个中央时间源,再安排ntpd守护进程随系统开机启动就能够了。
2配置一个中央日志服务器
只须稍加配置,就能够用syslog实现一个中央日志服务器。任何一台运行syslog守护进程的服务器均可以被配置成接受来自另外一台机器的消息,但这个选项在默认状况下是禁用的。在后面的讨论里,如无特别说明,有关步骤将适用于包括SUSE和RedHat在内的大多数Linux发行版本。咱们先来看看如何激活一个syslog服务器接受外来的日志消息:
1. 编辑/etc/sysconfig/syslog文件。
在“SYSLOGD_OPTIONS”行上加“-r”选项以容许接受外来日志消息。若是由于关于其余机器的DNS记录项不够齐全或其余缘由不想让中央日志服务器解析其余机器的FQDN,还能够加上 “-x”选项。此外,你或许还想把默认的时间戳标记消息(--MARK--)出现频率改为比较有实际意义的数值,好比240,表示每隔240分钟(天天6 次)在日志文件里增长一行时间戳消息。日志文件里的“--MARK--”消息可让你知道中央日志服务器上的syslog守护进程没有停工偷懒。按照上面这些解释写出来的配置行应该是以下所示的样子:
SYSLOGD_OPTIONS="-r-x-m240"
2.从新启动syslog守护进程。修改只有在syslog守护进程从新启动后才会生效。若是你只想从新启动syslog守护进程而不是整个系统,在RedHat机器上,执行如下两条命令之一:
/etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart
/etc/rc.d/init.d/syslogrestart
3.若是这台机器上运行着iptables防火墙或TCPWrappers,请确保它们容许514号端口上的链接经过。syslog守护进程要用到514号端口。
4为中央日志服务器配置各客户机器
让客户机把日志消息发往一个中央日志服务器并不困难。编辑客户机上的/etc/syslog.conf文件,在有关配置行的操做动做部分用一个“@”字符指向中央日志服务器,以下所示:
authpriv.*@192.168.1.40
另外一种办法是在DNS里定义一个名为“loghost”的机器,而后对客户机的syslog配置文件作以下修改(这个办法的好处是:当你把中央日志服务器换成另外一台机器时,不用再修改每个客户机上的syslog配置文件):
authpriv.*@loghost
接下来,从新启动客户机上的syslog守护进程让修改生效。让客户机在往中央日志服务器发送日志消息的同时继续在本地进行日志工做仍有必要,起码在调试客户机的时候没必要到中央日志服务器查日志,在中央日志服务器出问题的时候还能够帮助调试。
总结:日志系统承担着整个信息基础设施中感受器官的做用,一个完善的、工做良好的体系须要在正确的地点部署日志采集工具。后边笔者会介绍syslog的加强版本syslog-ng。