AIX Error log 机制是 AIX 基本系统 (Base Operating System) 的一部分,在缺省安装情况下无需进行任何配置即可使用 AIX Error log 机制。
AIX Error log 机制组件
AIX Error log 机制主要由以下几个部分组成:
设备文件 /dev/error: 用于接收内核以及应用程序产生的日志信息。
守护进程 /usr/lib/errdemon:在系统初始化时自动启动,监控内核以及应用程序传递给设备文件 /dev/error 的日志信息,并将日志信息计入日志文件。
日志文件 /var/adm/ras/errlog:缺省日志文件。日志文件位置可以通过命令 /usr/lib/errdemon – i 进行配置
辅助程序:除了设备文件、守护进程和日志文件外,AIX Error log 还提供了丰富的辅助程序对 Error log 进行配置、操作、分析和生成报告。在下面的章节中会对各辅助程序进行详细的说明。
AIX Error log 配置
AIX Error log 可以在不进行任何配置的情况下使用而且缺省配置基本上可以满足各种场景的使用需求,但 AIX 仍然提供了配置接口。通过配置接口可以修改设备文件 /dev/error 的缓冲区尺寸、日志文件的位置、日志文件的尺寸限制以及对重复日志的处理等等。AIX Error log 通过命令 /usr/lib/errdemon 进行配置。
修改 Error log 设备的缓冲区大小
Error log 设备 /dev/error 为块设备,需要使用缓冲区进行读写。缺省情况下,/dev/error 的缓冲区大小为 8KB,我们可以通过 /usr/lib/errdemon – B 来配置 /dev/error 的缓冲区大小。如果新配置的缓冲区大小大于现有的配置,新配置将会立即生效;如果新配置的缓冲区大小小于现有的配置,则新配置会在 errdemon 重新启动后生效。
配置日志文件路径
缺省情况下,AIX Error log 会使用文件 /var/adm/ras/errlog 存储日志信息,使用 /usr/lib/errdemon – i 可以配置 Error log 日志文件的路径。新配置的日志文件路径会立即生效。
配置日志文件大小限制
AIX Error log 的日志文件大小是可配置的,配置命令为 /usr/lib/errdemon – s。如果新配置的日志文件大小大于现有的配置,新配置将会立即生效;如果新配置的日志文件大小小于现有的配置,则现有的日志文件将会被备份为 *.log,然后 errdemon 会用新的日志文件大小配置生成一个新的日志文件。
配置对重复条目的处理
如果操作系统或者应用程序发生了重复的信息或者错误,在 Error log 中就会造成重复的条目。AIX Error log 对重复的条目会进行相应的处理,如在一定时间内内容相同的条目将会被标记为重复,如果重复的条目数超过了预先设置的阈值,则新的重复的条目将不会再作为重复条目被记入 Error log。是否打开重复条目处理功能的配置参数为 /usr/lib/errdemon – d,重复条目的时间间隔配置参数为 /usr/lib/errdemon – t,最大重复条目数的配置参数为 /usr/lib/errdemon – m。
AIX Error log 使用
AIX Error log 机制启动后,操作系统或者应用程序将会通过 AIX Error log 记录所发生的事件或者错误。本节将给出日常使用 AIX Error log 的常用命令及其使用方法。AIX Error log 的使用主要有生成 Error log 报告和删除 Error log 条目。
生成 AIX Error log 报告
AIX 命令 errpt 可以用来生成 Error log 报告,errpt 提供了丰富的参数来指定源数据的范围和报告的格式。如 -d 参数可以用来指定只显示特定的错误种类,-s 和 -e 参数可以指定特定时间范围内的日志条目,-l 参数可以指定之显示特定序号的日志条目,-a 参数可以指定显示日志条目的详细信息。具体 errpt 的用法可参见 errpt 的 manpage。
在此列举 errpt 使用的一个例子并以此例子说明 AIX Error log 条目中各字段的含义。
清单 1. errpt 命令输出示例
#errpt -a -l 2
---------------------------------------------------------
LABEL: REBOOT_ID
IDENTIFIER: 2BFA76F6
Date/Time: Mon Mar 2 21:38:21 2009
Sequence Number: 2
Machine Id: 00C0DD724C00
Node Id: p6ml4n05
Class: S
Type: TEMP
WPAR: Global
Resource Name: SYSPROC
Description
SYSTEM SHUTDOWN BY USER
Probable Causes
SYSTEM SHUTDOWN
Detail Data
USER ID
0
0=SOFT IPL 1=HALT 2=TIME REBOOT
0
TIME TO REBOOT (FOR TIMED REBOOT ONLY)
0
#
其中各主要字段的含义如下:
LABEL:为该事件预先定义的名称
IDENTIFIER:此事件的数字标识
Date/Time:事件发生的日期和时间
Sequence Number:事件序列号
Machine Id:此事件发生的节点处理器识别符
Node Id:此事件发生的节点名称
Class:事件的类别。AIX Error log 目前支持的类别有:
H: 硬件
S:软件
O:Informational 条目
U:无法确定事件的类别
Type:事件的严重程度,AIX Error log 目前支持的事件严重程度有:
PEND:设备或组件即将失效
PERF:设备或组件的性能已经低于可以接受的阈值
PERM:无法修复的错误。PERM 是所有错误中最严重的一种,PERM log 往往说明某个硬件或者软件组件已经失效并且无法修复。
TEMP:在若干次失败后某个错误被成功修复。TEMP 也可以用于标识 informational 条目。
UNKN:无法确定事件的严重程度
INFO:信息而并非错误
Resource Name:产生信息的组件名称
Description:事件的简短描述
Probable Causes:事件产生的可能原因
删除 AIX Error log
删除 AIX Error log 条目可以使用命令 errclear,errclear 也提供了选项用于指定删除的范围,如 -d 指定仅删除特定类别的事件,-l 指定仅删除特定序号的条目。通常情况下,errclear 可以被用作 cron 条目周期性执行用以清楚 Error log 文件。
手动生成 AIX Error log 条目
命令 errlogger 可以用于手动生成 AIX Error log 条目。手动生成 AIX Error log 条目可以用于测试 AIX Error log 功能或者测试下面将要论述的自动监控功能等。
AIX Error log 监控自动化
AIX 操作系统为 Error log 提供了一种通过 ODM 类 errnotify 进行错误通知 (Error Notification) 的机制。用户可以通过添加一个 errnotify 的 ODM 类实例来实现 AIX Error log 的错误通知,即当 AIX Error log 机制记录了错误条目后,errnotify 会调用预先定义好的命令通知系统管理员或者进行其它的修复动作。
AIX Error log 的错误通知机制的功能完全符合了监控自动化的要求,我们可以通过添加一个 errnotify 类实例来实现对 AIX Error log 的监控,当定义的错误发生后,errnotify 会调用相应的命令来通知系统管理员。需要注意的是只有 root 用户才能添加 errnotify 类实例。
以下是添加 errnotify 类实例以及利用 errnotify 机制自动监控 AIX Error log 的具体步骤:
生成一个 ODM errnotify 类实例的 stanza 文件
生成一个 ODM errnotify 类实例的 stanza 文件需要指定若干选项,各主要选项的说明如下:
en_name:errnotify 类实例的名字,名字需要全局唯一。
en_persistenceflg:在系统重新引导时是否自动删除该实例,0 为在系统重新引导时自动删除该实例,1 为在系统重新引导时不删除该实例。
en_type:指定仅监控特定严重程度的 Error log 条目如 INFO、PEND 等。
en_class:指定仅监控特定类别的 Error log 条目如 H、S 等。
en_method:定义在监测到 AIX Error log 条目后所采取的动作,动作可以为任何的脚本程序或者操作系统命令。errnotify 自动设置了关于 Error log 条目信息的变量可供监控程序使用:
$1 error log 条目的序号
$2 error log 条目的 ID
$3 error log 条目的事件类别
$4 error log 条目的事件严重程度
$5 error log 条目的 Alert flags
$6 error log 条目的产生的组件名称
$7 error log 条目的产生的组件种类 (Type)
$8 error log 条目的产生的组件类 (Class)
$9 error log 条目的错误标签
关于 errnotify 类实例的各字段的具体说明,请参见 AIX 文档《 General Programming Concepts: Writing and Debugging Programs 》
例如我们可以生成一个 errnotify 类实例的 stanza 如下:
清单 2. errnotify 类实例 stanza
errnotify:
en_name = "errlog_notify"
en_persistenceflg = 1
en_method = "mail -s \"Events occured in Error log: sequence = $1 error_id = $2
class = $3 type = $4 alert_flags = $5 res_name = $6 res_type = $7 res_class = $8
label = $9\" root"
该 stanza 的内容可解释为当任何的 AIX Error log 事件发生时,都会给 root 用户发送一个邮件,邮件的内容中包含了 Error log 条目的具体信息。
将类实例添加到 ODM 数据库
AIX 命令 odmadd 可以将 ODM 类实例添加到 ODM 数据库中。
如 : odmadd /errnotifystanza
验证 ODM errnotify 类实例
可以用命令 odmget 来验证 errnotify 类实例已经被正确添加。
清单 3. 使用 odmget 命令查看 errnotify 类实例
[node01][/]> odmget -q en_name="errlog_notify" errnotify
errnotify:
en_pid = 0
en_name = "errlog_notify"
en_persistenceflg = 1
en_label = ""
en_crcid = 0
en_class = ""
en_type = ""
en_alertflg = ""
en_resource = ""
en_rtype = ""
en_rclass = ""
en_symptom = ""
en_err64 = ""
en_dup = ""
en_method = "mail -s \"Events occured in Error log: sequence = $1 error_id = $2
class = $3 type = $4 alert_flags = $5 res_name = $6 res_type = $7 res_class = $8
label = $9 contents = \n`errpt -a -l $1\n\" root"
手动生成 Error log 条目测试监控是否工作
在确认 errnotify 类实例已经被正确添加后即可以通过 errologger 手动生成 Error log 条目测试监控是否工作。如:
清单 4. 使用 errlogger 命令生成测试日志
errlogger "this is a test for Error log monitoring"
然后即可以查看 root 的邮件中是否已经收到了该 Error log,如果工作正常 root 的邮件中会收到内容如下的邮件:
清单 5. mail 命令
Message 37:
From root Fri Mar 20 02:43:15 2009
Date: Fri, 20 Mar 2009 02:43:15 -0400
From: root
To: root
Subject: Events occured in Error log: sequence = 142983 error_id = 0xaa8ab241
class = O type = TEMP alert_flags = FALSE res_name = OPERATOR res_type = NONE
res_class = NONE label = OPMSG contents =
---------------------------------------------------------------------------
LABEL: OPMSG
IDENTIFIER: AA8AB241
Date/Time: Fri Mar 20 02:43:14 EDT 2009
Sequence Number: 142983
Machine Id: 000181404C00
Node Id: hacsmdev3
Class: O
Type: TEMP
Resource Name: OPERATOR
Description
OPERATOR NOTIFICATION
User Causes
ERRLOGGER COMMAND
Recommended Actions
REVIEW DETAILED DATA
Detail Data
MESSAGE FROM ERRLOGGER COMMAND
this is a test for Error log monitoring
停止监控 AIX Error log
如果想停止通过 errnotify 监控 AIX Error log,只需要将 errnotify 类实例从 ODM 数据库中删除即可。
清单 6. 删除 errnotify 类实例
[node01][/]> odmdelete -q en_name="errlog_notify" -o errnotify
1 objects deleted