系统管理指南:高级管理

第 15 章 管理系统消息

本章介绍 Oracle Solaris OS 中的系统消息传送功能。

查看系统消息

系统消息显示在控制台设备中。大多数系统消息的文本如下所示:

[ID msgid facility. priority]

例如:


[ID 672855 kern.notice] syncing file systems...

如果消息来自内核,则会显示内核模块名称。例如:


Oct 1 14:07:24 mars ufs: [ID 845546 kern.notice] alloc: /: file system full 

当系统崩溃时,系统控制台可能会显示如下消息:


panic: error message

少数情况下,可能会显示以下消息而非故障消息:


Watchdog reset !

错误日志守护进程 syslogd 可在消息文件中自动记录各种系统警告和错误。缺省情况下,其中许多系统消息都会在系统控制台中显示,并存储在 /var/adm 目录中。通过设置系统消息日志可以指示这些消息的存储位置。有关更多信息,请参见自定义系统消息日志。这些消息可以提醒您系统出现问题,例如设备将要出现故障。

/var/adm 目录中包含若干个消息文件。最新消息位于 /var/adm/messages 文件中(和 messages.* 中),而最旧的消息位于 messages.3 文件中。经过一段时间后(通常为每隔十天),会创建一个新的 messages 文件。messages.0 文件被重命名为 messages.1messages.1 被重命名为 messages.2,而 messages.2 被重命名为 messages.3。当前的 /var/adm/messages.3 文件将被删除。

由于 /var/adm 目录存储包含消息、故障转储和其他数据的大型文件,因此该目录可能会占用许多磁盘空间。为防止 /var/adm 目录变得过大,并确保可以保存将来的故障转储,应定期删除不需要的文件。可以使用 crontab 文件自动执行此任务。有关自动执行此任务的更多信息,请参见如何删除故障转储文件第 8 章

Procedure如何查看系统消息

  1. 使用 dmesg 命令显示由系统崩溃或重新引导生成的最新消息。


    $ dmesg
    

    或者,使用 more 命令逐屏显示消息。


    $ more /var/adm/messages
    

示例 15–1 查看系统消息

以下示例显示 dmesg 命令的输出。


$ dmesg
Jan  3 08:44:41 starbug genunix: [ID 540533 kern.notice] SunOS Release 5.10 ...
Jan  3 08:44:41 starbug genunix: [ID 913631 kern.notice] Copyright 1983-2003 ...
Jan  3 08:44:41 starbug genunix: [ID 678236 kern.info] Ethernet address ...
Jan  3 08:44:41 starbug unix: [ID 389951 kern.info] mem = 131072K (0x8000000)
Jan  3 08:44:41 starbug unix: [ID 930857 kern.info] avail mem = 121888768
Jan  3 08:44:41 starbug rootnex: [ID 466748 kern.info] root nexus = Sun Ultra 5/
10 UPA/PCI (UltraSPARC-IIi 333MHz)
Jan  3 08:44:41 starbug rootnex: [ID 349649 kern.info] pcipsy0 at root: UPA 0x1f0x0
Jan  3 08:44:41 starbug genunix: [ID 936769 kern.info] pcipsy0 is /pci@1f,0
Jan  3 08:44:41 starbug pcipsy: [ID 370704 kern.info] PCI-device: pci@1,1, simba0
Jan  3 08:44:41 starbug genunix: [ID 936769 kern.info] simba0 is /pci@1f,0/pci@1,1
Jan  3 08:44:41 starbug pcipsy: [ID 370704 kern.info] PCI-device: pci@1, simba1
Jan  3 08:44:41 starbug genunix: [ID 936769 kern.info] simba1 is /pci@1f,0/pci@1
Jan  3 08:44:57 starbug simba: [ID 370704 kern.info] PCI-device: ide@3, uata0
Jan  3 08:44:57 starbug genunix: [ID 936769 kern.info] uata0 is /pci@1f,0/pci@1,
1/ide@3
Jan  3 08:44:57 starbug uata: [ID 114370 kern.info] dad0 at pci1095,6460
.
.
.

另请参见

有关更多信息,请参见 dmesg(1M) 手册页。

系统日志轮转

使用 root crontab 中的一个项内的 logadm 命令,可以轮转系统日志文件。不再使用 /usr/lib/newsyslog 脚本。

系统日志轮转在 /etc/logadm.conf 文件中定义。此文件包含用于 syslogd 等进程的日志轮转项。例如,/etc/logadm.conf 文件中的一个项指定,除非 /var/log/syslog 文件为空,否则该文件每周轮转一次。最新的 syslog 文件成为 syslog.0,下一个最新的文件成为 syslog.1,依此类推。会保留八个以前的 syslog 日志文件。

/etc/logadm.conf 文件还包含记录最后一次日志轮转发生时间的时间标记。

可以使用 logadm 命令来自定义系统日志,并可根据需要在 /etc/logadm.conf 文件中添加其他日志。

例如,要轮转 Apache 访问和错误日志,请使用以下命令:


# logadm -w /var/apache/logs/access_log -s 100m
# logadm -w /var/apache/logs/error_log -s 10m

在此示例中,Apache access_log 文件会在大小达到 100 MB 时进行轮转,以 .0.1 等作为后缀,并保留旧 access_log 文件的 10 个副本。error_log 会在大小达到 10 MB 时进行轮转,后缀和副本数与 access_log 文件相同。

用于上述 Apache 日志轮转示例的 /etc/logadm.conf 项与以下示例类似:


# cat /etc/logadm.conf
.
.
.
/var/apache/logs/error_log -s 10m
/var/apache/logs/access_log -s 100m

有关更多信息,请参见 logadm(1M)

可以超级用户身份或通过承担等效角色(具有日志管理权限)来使用 logadm 命令。通过基于角色的访问控制 (role-based access control, RBAC),您可以通过提供对 logadm 命令的访问来授予非超级用户维护日志文件的权限。

例如,可通过向 /etc/user_attr 文件添加以下项,授予用户 andy 使用 logadm 命令的权限:


andy::::profiles=Log Management

或者,也可以使用 Solaris 管理控制台来设置用于日志管理的角色。有关设置角色的更多信息,请参见《系统管理指南:安全性服务》中的“基于角色的访问控制(概述)”

自定义系统消息日志

通过修改 /etc/syslog.conf 文件,可以捕获各个系统进程生成的其他错误消息。缺省情况下,/etc/syslog.conf 文件会将许多系统进程消息定向到 /var/adm/messages 文件。崩溃和引导消息也存储在这些文件中。要查看 /var/adm 消息,请参见如何查看系统消息

/etc/syslog.conf 文件有两个通过制表符分隔的列:


facility.level ... action
facility.level

消息或情况的工具或系统源。可能是由逗号分隔的工具列表。表 15–1 中列出了工具值。level,表示所记录情况的严重程度或优先级。表 15–2 中列出了优先级。

如果同一工具的两个项用于不同优先级,则不要将这两个项放在同一行中。在 syslog 文件中放置优先级表示将记录该优先级或更高优先级的所有消息,最后一条消息优先。对于给定的工具和级别,syslogd 将匹配该级别以及所有更高级别的所有消息。

action

操作字段表示将消息转发到的位置。

以下示例显示缺省的 /etc/syslog.conf 文件中的样例行。


user.err                                        /dev/sysmsg
user.err                                        /var/adm/messages
user.alert                                      `root, operator'
user.emerg                                      *

这意味着将自动记录以下用户消息:


注 –

如果在 /etc/syslog.conf 文件中多次指定一个日志目标,则将各项分别放置在不同的行中可能会导致消息的记录顺序混乱。请注意,可在一个行项中指定多个选择器,每个选择器之间用分号分隔。


下表中显示了最常见的错误情况源。表 15–2 按严重程度显示最常见的优先级。

表 15–1 syslog.conf 消息的源工具

源 

说明 

kern

内核 

auth

验证 

daemon

所有守护进程 

mail

邮件系统 

lp

假脱机系统 

user

用户进程 


注 –

可在 /etc/syslog.conf 文件中激活的 syslog 工具数没有限制。


表 15–2 syslog.conf 消息的优先级

优先级 

说明 

emerg

系统紧急情况 

alert

需要立即更正的错误 

crit

严重错误 

err

其他错误 

info

提示性消息 

debug

用于调试的输出 

none

此设置不记录输出  

Procedure如何自定义系统消息日志

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 编辑 /etc/syslog.conf 文件,根据 syslog.conf(4) 中介绍的语法添加或更改消息源、优先级和消息位置。

  3. 退出文件,保存更改。


示例 15–2 自定义系统消息日志

此样例 /etc/syslog.conf user.emerg 工具可向超级用户个人用户发送用户紧急消息。


user.emerg                                      `root, *'

启用远程控制台消息传送

以下新增控制台功能可以提高您对远程系统进行故障排除的能力:

在运行级转换期间使用辅助控制台消息传递

在运行级转换期间使用辅助控制台消息传递时,请记住以下几点:

在交互式登录会话期间使用 consadm 命令

如果要通过使用与串行端口连接的终端登录系统,再使用 consadm 命令查看终端的控制台消息的方式来运行交互式登录会话,请注意以下行为。

Procedure如何启用辅助(远程)控制台

在您使用 consadm 命令添加辅助控制台之前,consadm 守护进程不会开始监视端口。作为一种安全功能,在载体脱机或取消选择辅助控制台设备之前,控制台消息只能重定向。这意味着必须在端口中建立载体,才能成功使用 consadm 命令。

有关启用辅助控制台的更多信息,请参见 consadm(1m) 手册页。

  1. 以超级用户身份登录系统。

  2. 启用辅助控制台。


    # consadm -a devicename
    
  3. 验证当前连接是否为辅助控制台。


    # consadm
    

示例 15–3 启用辅助(远程)控制台


# consadm -a /dev/term/a
# consadm
 /dev/term/a

Procedure如何显示辅助控制台的列表

  1. 以超级用户身份登录系统。

  2. 选择以下步骤之一:

    1. 显示辅助控制台的列表。


      # consadm
      /dev/term/a
    2. 显示持久性辅助控制台的列表。


      # consadm -p
      /dev/term/b

Procedure如何在系统重新引导期间启用辅助(远程)控制台

  1. 以超级用户身份登录系统。

  2. 在系统重新引导期间启用辅助控制台。


    # consadm -a -p devicename     
    

    这将会向持久性辅助控制台列表中添加设备。

  3. 验证设备是否已添加至持久性辅助控制台的列表中。


    # consadm
    

示例 15–4 在系统重新引导期间启用辅助(远程)控制台


# consadm -a -p /dev/term/a 
# consadm
/dev/term/a

Procedure如何禁用辅助(远程)控制台

  1. 以超级用户身份登录系统。

  2. 选择以下步骤之一:

    1. 禁用辅助控制台。


      # consadm -d devicename
      

    2. 禁用辅助控制台并从持久性辅助控制台列表中将其删除。


      # consadm -p -d devicename
      
  3. 验证是否已禁用辅助控制台。


    # consadm
    

示例 15–5 禁用辅助(远程)控制台


# consadm -d /dev/term/a
# consadm