Chinaunix首页 | 论坛 | 博客
  • 博客访问: 68831
  • 博文数量: 30
  • 博客积分: 1265
  • 博客等级: 中尉
  • 技术积分: 295
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-04 15:24
文章分类

全部博文(30)

文章存档

2011年(1)

2010年(14)

2009年(11)

2008年(4)

我的朋友

分类: LINUX

2010-04-10 09:42:47

目前,linux依旧使用syslogd作为日志监控进程,而在主流的linux发行版中依旧使用sysklog这个比较老的日志服务器套件。理解并完善一个syslog的配置,对于系统管理员来说显得尤为重要。
一、配置文件
   以HREL 5.3为例,默认的日志服务器就是syslog套件:
  1. # rpm -qa|grep sysklogd
  2. sysklogd-1.4.1-44.el5
 
其主要的配置文件有两个:
  1. /etc/sysconfig/syslog
这里定义syslog服务启动时可加入的参数。
  1. /etc/syslog.conf
这个是syslog服务的主要配置文件,根据定义的规则导向日志信息。

二、设置主配置文件
/etc/syslog.conf根据如下的格式定义规则:
  1. facility.level action
  2. 设备.优先级 动作
facility.level 字段也被称为seletor(选择条件),选择条件和动作之间用空格或tab分割开。
#号开头的是注释,空白行会自动跳过。

1、facility
facility定义日志消息的范围,其可使用的key有:
  1. auth -由 pam_pwdb 报告的认证活动。
  2. authpriv -包括特权信息如用户名在内的认证活动
  3. cron -与 cron 和 at 有关的计划任务信息。
  4. daemon -与 inetd 守护进程有关的后台进程信息。
  5. kern -内核信息,首先通过 klogd 传递。
  6. lpr -与打印服务有关的信息。
  7. mail -与电子邮件有关的信息
  8. mark - syslog内部功能用于生成时间戳
  9. news -来自新闻服务器的信息
  10. syslog -由 syslog 生成的信息
  11. user -由用户程序生成的信息
  12. uucp -由 uucp 生成的信息
  13. local0-local7 -与自定义程序使用
  14. * 通配符代表除了 mark 以外的所有功能
除mark为内部使用外,还有security为一个旧的key定义,等同于auth,已经不再建议使用。

2、level级别
level定义消息的紧急程度。按严重程度由高到低顺序排列为:
  1. emerg -该系统不可用,等同panic
  2. alert -需要立即被修改的条件
  3. crit -阻止某些工具或子系统功能实现的错误条件
  4. err -阻止工具或某些子系统部分功能实现的错误条件,等同error
  5. warning -预警信息,等同warn
  6. notice -具有重要性的普通条件
  7. info -提供信息的消息
  8. debug -不包含函数条件或问题的其他信息
  9. none -没有重要级,通常用于排错
  10. * 所有级别,除了none
其中,panic、error、warn均为旧的标识符,不再建议使用。

在定义level级别的时候,需要注意两点:
  1. 1)优先级是由应用程序在编程的时候已经决定的,除非修改源码再编译,否则不能改变消息的优先级;
  2. 2)低的优先级包含高优先级,例如,为某个应用程序定义info的日志导向,则涵盖notice、warning、err、crit、alert、emerg等消息。(除非使用=号定义)
3、selector选择条件
通过小数点符号“.”把facility和level连接在一起则成为selector(选择条件)。
可以使用分号“;”同时定义多个选择条件。也支持三个修饰符:
  1. * - 所有日志信息
  2. = - 等于,即仅包含本优先级的日志信息
  3. ! - 不等于,本优先级日志信息除外
4、action动作
由前面选择条件定义的日志信息,可执行下面的动作:
  1. file-指定日志文件的绝对路径
  2. terminal 或 print -发送到串行或并行设备标志符,例如/dev/ttyS2
  3. @host -远程的日志服务器
  4. username -发送信息本机的指定用户信息窗口中,但该用户必须已经登陆到系统中
  5. named pipe -发送到预先使用 mkfifo 命令来创建的 FIFO 文件的绝对路径
※注意,不能通过“|/var/xxx.sh”方式导向日志到其他脚本中处理。

5、举例
例如:
  1. *.info;mail.none;news.none;authpriv.none;cron.none              /var/log/messages
  2. #把除邮件、新闻组、授权信息、计划任务等外的所有通知性消息都写入messages文件中。
  3. mail,news.=info              /var/adm/info
  4. #把邮件、新闻组中仅通知性消息写入info文件,其他信息不写入。
  5. mail.*;mail.!=info           /var/adm/mail
  6. #把邮件的除通知性消息外都写入mail文件中。
  7. mail.=info                   /dev/tty12
  8. #仅把邮件的通知性消息发送到tty12终端设备
  9. *.alert                      root,joey
  10. #如果root和joey用户已经登陆到系统,则把所有紧急信息通知他们
  11. *.*                          @finlandia
  12. #把所有信息都导向到finlandia主机(通过/etc/hosts或dns解析其IP地址)
※注意:每条消息均会经过所有规则的,并不是唯一匹配的。
也就是说,假设mail.=info信息通过上面范例中定义的规则时,/var/adm/info、/var/adm/mail、/dev/tty12,甚至finalandia主机都会收到相同的信息。这样看上去比较烦琐,但可以带来的好处就是保证了信息的完整性,可供不同地方进行分析。

6、测试
部分情况下,上述规的实际执行结果和定义的预想结果可能会有出入。这时,可使用logger程序辅助测试:
# logger -p user.notice 'Hello World!'

日志显示:
  1. Nov 12 13:40:04 dc5test root: Hello World!
其表示意思如下:
  1. 第一列:日志产生时间
  2. 第二列:产生此日志的主机名称
  3. 第三列:产生此日志的应用程序或用户名称
  4. 第四列:日志信息
7、自定义日志级别
正如前面所说的,应用程序的日志级别是由应用程序所决定的。部分应用程序可通过配置,定义其日志级别。
例如,/etc/ssh/sshd_config文件中就有:
  1. #SyslogFacility AUTH
  2. SyslogFacility AUTHPRIV
  3. #LogLevel INFO
把sshd的日志定义在authpriv.info级别。配合syslog.conf中的:
  1. authpriv.*    /var/log/secure
则日志文件被写入/var/log/secure文件中。

◎我们修改为:
  1. SyslogFacility local0
配合在syslog.conf中增加:
  1. local0.*    /var/log/sshd.log
保存后,重新启动sshd或syslog服务,则以后sshd服务的所有日志都会单独的放到sshd.log文件中了。

三、设置服务参数
默认情况下,syslog进程是不能接受其他日志服务器发过来的消息的。而通过修改其启动参数,可实现日志的大集中功能。
修改/etc/sysconfig/syslog文件:
  1. -r : 打开接受外来日志消息的功能,其监控514 UDP端口
  2. -x : 关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;
  3. -m : 修改syslog的内部mark消息写入间隔时间(0为关闭),例如240为每隔240分钟写入一次“--MARK--”信息;
  4. -h : 默认情况下,syslog不会发送从远端接受过来的消息到其他主机,而使用该选项,则把该开关打开,所有接受到的信息都可根据syslog.conf中定义的@主机转发过去。
通过man syslogd可获得更详细的帮助,而具体到实际配置文件为:
  1. SYSLOGD_OPTIONS="-r-x-m 0"
保存后,重启服务即可:
  1. # service syslog restart
此时,客户机只要通过修改syslog.conf,定义动作为@主机或IP,即可发送日志信息到本服务器中。
(在构建集中的日志服务器时,请务必配合ntp时间服务,以保证信息的有效性,避免不必要的麻烦)
另外,/etc/sysconfig/syslog配置文件中,还定义有klogd服务的启动参数:
  1. KLOGD_OPTIONS="-x"
详细帮助,请参考man 8 klogd或man klogd。
阅读(956) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~