linux 系统日志syslog

系统日志文件

本节介绍初级管理(LPIC-1)考试 102 的 1.111.3 主题的内容。这个主题的权值为 3。

在本节中,学习如何配置和管理系统日志,包括以下任务:

  • 管理日志记录的信息的类型和级别
  • 自动地轮替日志文件并进行存档
  • 扫描日志文件来了解值得注意的活动
  • 监视日志文件
  • 调查日志文件中报告的问题

管理日志记录的信息的类型和级别

Linux 系统上的系统日志功能可以记录系统日志和捕捉内核消息。日志记录可以在本地系统上执行,也可以发送到远程系统。可以通过 /etc/syslog.conf 配置文件细致地控制日志记录的级别。日志记录由 syslogd 守护进程执行,这个守护进程通常通过 /dev/log 套接字接收输入,见清单 20。


清单 20. /dev/log 是一个套接字
ian@pinguino:~$ ls -l /dev/log
srw-rw-rw- 1 root root 0 2007-07-05 15:42 /dev/log

对于本地日志记录,主要文件常常是 /var/log/messages,但是在大多数系统中还使用其他许多文件,而且可以对这些文件进行定制。例如,可能希望对来自邮件系统的消息使用单独日志文件。

syslog.conf 配置文件

syslog.conf 文件是 syslogd 守护进程的主要配置文件。日志记录基于设施和优先级两方面。定义的设施是 auth(或 security)、authpriv、cron、daemon、ftp、kern、lpr、mail、mark、news、syslog、user、uucp 以及 local0 到 local7。应该使用关键字auth 而不是 security,关键字 mark 只供内部使用。

优先级如下(按升序排列):

  1. debug
  2. info
  3. notice
  4. warning(或 warn)
  5. err(或 error)
  6. crit
  7. alert
  8. emerg(或 panic)

括号中的关键字(warn、error 和 panic)现在已经废弃了。

syslog.conf 中的条目指定日志记录规则。每个规则有一个选择符字段和一个动作字段,它们由一个或多个空格或制表符分隔。选择符字段标识应用这个规则的设施和优先级,动作字段标识对于这个设施和优先级应该采用的日志记录动作。默认的行为是执行指定级别和所有更高级别的动作,但是也可以将日志记录限制在特定的级别。每个选择符由设施和优先级组成(由点号分隔)。对于一个给定的动作,可以指定多个设施,它们之间由逗号分隔。对于一个给定的动作,可以指定多个设施/优先级对,它们之间由分号分隔。清单 21 显示一个简单的 syslog.conf 示例。


清单 21. syslog.conf 示例
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog

# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

注意:

  • 与许多配置文件一样,以 # 开头的行和空行被忽略。
  • 可以使用 * 表示所有设施或所有优先级。
  • 特殊的优先级关键字 none 表示对于这个设施不应该用这个动作记录日志。
  • 文件名前面的连字符(比如这个示例中的 -/var/log/maillog)表示日志文件不应该在每次写操作之后进行同步。如果这么做,在系统崩溃时可能会丢失信息,但是对性能有好处。

动作常常被称为 “日志文件”,但是它们不一定是真实的文件。表 9 描述了可能的日志文件。

表 9. syslog.conf 中的动作
动作 用途
常规文件 指定完整的路径名,以斜线(/)开头。如果在前面加上连字符(-),就会省略每次日志输入之后的文件同步。如果发生系统崩溃,这可能会导致信息丢失,但是可以提高性能。
命名管道 可以使用 fifo 或命名管道作为日志消息的目标,设置方法是在文件名前面加一个管道符(|)。在启动(或重新启动)syslogd 之前必须使用 mkfifo 命令创建 fifo。有时候使用 fifo 进行调试。
终端和控制台 一个终端,比如 /dev/console。
远程机器 要想将消息转发给另一个主机,应该在主机名前面加一个 at(@)符号。注意,接收主机并不向外转发消息。
用户的列表 要接收消息的用户的逗号分隔的列表(要求用户已经登录)。这里常常包含根用户。
登录的每个用户 指定星号(*),就会使用 wall 命令通知登录的每个用户。

可以在优先级前面加上 !,这表示这个动作不应该应用于这个级别和更高级别。还可以在前面加上 =,这表示这个规则只应用于这个级别;加 != 表示规则应用于除这个级别之外的所有级别。清单 22 给出一些示例,syslog.conf 的手册页提供了更多示例。


清单 22. syslog.conf 示例
# Store all kernel messages in /var/log/kernel.
# Send critical and higher ones to remote host pinguino and to the console
# Finally, Send info, notice and warning messages to /var/log/kernel-info
#
kern.*                       /var/log/kernel
kern.crit                    @pinguino
kern.crit                    /dev/console
kern.info;kern.!err          /var/log/kernel-info

# Store all mail messages except info priority in /var/log/mail. 
mail.*;mail.!=info           /var/log/mail

自动地轮替日志文件并进行存档

由于日志消息的数量可能很大,所以需要能够控制日志文件的大小。这需要使用 logrotate 命令,这个命令通常作为 cron 作业运行。本章后面的 调度作业 一节将讨论 cron 作业。logrotate 命令的运行原理是,定期备份日志文件并开始一个新的日志。保留几代备份,当一个日志到达最后一代时,可以将它存档。例如,可以将它发送给存档用户。

使用 /etc/logrotate.conf 配置文件指定日志应该如何轮替和存档。可以为不同的日志文件指定不同的频率,比如每天、每周或每月,还可以控制代的数量以及何时或是否将副本发送给存档用户。清单 23 给出一个 /etc/logrotate.conf 文件示例。


清单 23. /etc/logrotate.conf 示例
# 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

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

# system-specific logs may be configured here

logrotate.conf 文件的开头是全局选项。这些是默认设置,如果在别的地方没有指定更特定的设置,就使用这些默认设置。在这个示例中,日志文件每周轮替一次,并保留 4 周的备份。在日志文件轮替时,自动创建一个新的日志文件来替代旧文件。注意,logrotate.conf 文件可以包含来自其他文件的设置。在这个示例中,包含了 /etc/logrotate.d 中的所有文件。

这个示例还包含专门针对 /var/log/wtmp 和 /var/log/btmp 的规则,指定它们每月轮替一次。如果文件不存在,那么并不发出错误消息。创建一个新文件,并只保留一个备份。

在这个示例中,当备份到达最后一代时,就会删除它,因为没有指定其他的处理方法。

注意:/var/log/wtmp 和 /var/log/btmp 文件分别记录成功和不成功的登录尝试。与大多数日志文件不同,这些文件不是纯文本文件。可以使用 last 或 lastb 命令查看它们的内容。关于这些命令的细节,请参考手册页。

日志文件还可以在达到特定的大小时进行备份,还可以通过编写脚本在备份操作之前或之后运行命令。清单 24 给出一个更复杂的示例。


清单 24. 另一个 logrotate 配置示例
       /var/log/messages {
           rotate 5
           mail logsave@pinguino
           size 100k
            postrotate
               /usr/bin/killall -HUP syslogd
           endscript
       }

在这个示例中,/var/log/messages 在到达 100KB 之后轮替。保留五个备份,最旧的备份被发送到 logsave@pinguino。postrotate引入一个脚本,这个脚本在完成轮替之后向 syslogd 守护进程发送一个 HUP 信号,从而重新启动 syslogd 守护进程。endscript 语句用于终止脚本,对于 prerotate 脚本也需要这个语句。更完整的信息参见 logrotate 手册页。

扫描日志文件以了解值得注意的活动

日志文件条目常常带时间戳,并包含报告消息的进程的主机名和进程名。清单 25 显示 /var/log/messages 中的几行,包含来自 gconfd、ntpd、init 和 yum 的条目。


清单 25. 日志文件条目示例
Jul  5 15:28:24 lyrebird gconfd (root-2832): Exiting
Jul  5 15:31:06 lyrebird ntpd[2063]: synchronized to 87.98.219.90, stratum 2
Jul  5 15:31:06 lyrebird ntpd[2063]: kernel time sync status change 0001
Jul  5 15:31:24 lyrebird init: Trying to re-exec init
Jul  5 15:31:24 lyrebird yum: Updated: libselinux.i386 2.0.14-2.fc7
Jul  5 15:31:24 lyrebird yum: Updated: libsemanage.i386 2.0.3-4.fc7
Jul  5 15:31:25 lyrebird yum: Updated: cups-libs.i386 1.2.11-2.fc7
Jul  5 15:31:25 lyrebird yum: Updated: libXfont.i386 1.2.9-2.fc7
Jul  5 15:31:27 lyrebird yum: Updated: NetworkManager.i386 0.6.5-7.fc7
Jul  5 15:31:27 lyrebird yum: Updated: NetworkManager-glib.i386 0.6.5-7.fc7

可以使用分页阅读程序(比如 less)扫描日志文件,还可以使用 grep 搜索特定的日志条目(比如来自主机 lyrebird 的内核消息),见清单 26。


清单 26. 扫描日志文件
[root@lyrebird ~]# less /var/log/messages
[root@lyrebird ~]# grep "lyrebird kernel" /var/log/messages | tail -n 9
Jul  5 15:26:46 lyrebird kernel: Bluetooth: HCI socket layer initialized
Jul  5 15:26:46 lyrebird kernel: Bluetooth: L2CAP ver 2.8
Jul  5 15:26:46 lyrebird kernel: Bluetooth: L2CAP socket layer initialized
Jul  5 15:26:46 lyrebird kernel: Bluetooth: RFCOMM socket layer initialized
Jul  5 15:26:46 lyrebird kernel: Bluetooth: RFCOMM TTY layer initialized
Jul  5 15:26:46 lyrebird kernel: Bluetooth: RFCOMM ver 1.8
Jul  5 15:26:46 lyrebird kernel: Bluetooth: HIDP (Human Interface Emulation) ver 1.2
Jul  5 15:26:59 lyrebird kernel: [drm] Initialized drm 1.1.0 20060810
Jul  5 15:26:59 lyrebird kernel: [drm] Initialized i915 1.6.0 20060119 on minor 0

监视日志文件

有时候需要监视日志文件。例如,可能希望捕捉一个不经常发生的事件。在这种情况下,可以使用 tail 命令和 -f 选项跟踪 日志文件。清单 27 给出一个示例。


清单 27. 跟踪日志文件更新
[root@lyrebird ~]# tail -n 1 -f /var/log/messages
Jul  6 15:16:26 lyrebird syslogd 1.4.2: restart.
Jul  6 15:16:26 lyrebird kernel: klogd 1.4.2, log source = /proc/kmsg started.
Jul  6 15:19:35 lyrebird yum: Updated: samba-common.i386 3.0.25b-2.fc7
Jul  6 15:19:35 lyrebird yum: Updated: procps.i386 3.2.7-14.fc7
Jul  6 15:19:36 lyrebird yum: Updated: samba-client.i386 3.0.25b-2.fc7
Jul  6 15:19:37 lyrebird yum: Updated: libsmbclient.i386 3.0.25b-2.fc7
Jul  6 15:19:46 lyrebird gconfd (ian-3267): Received signal 15, shutting down cleanly
Jul  6 15:19:46 lyrebird gconfd (ian-3267): Exiting
Jul  6 15:19:57 lyrebird yum: Updated: bluez-gnome.i386 0.8-1.fc7

跟踪日志文件中报告的问题

当在日志文件中发现问题时,需要注意产生这个问题的时间、主机名和进程。如果消息提供的信息足以判断问题的原因,那么就解决问题。如果信息不够充分,那么可能需要更新 syslog.conf,为适当的设施记录更多的消息。例如,可能需要显示警告消息之外的信息性消息,甚至是调试级消息。您的应用程序还可能有其他可以使用的设施。

最后,如果需要在日志文件中放上标志,帮助您了解在调试活动的哪个阶段记录了哪些消息,那么可以在终端窗口或 shell 脚本中使用 logger 命令,根据 syslog.conf 中的规则将选择的消息发送给 syslog 守护进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值