AIX操作系统中有一个错误日志(Error logging)子系统,它把所有的硬件和软件故障记录在错误日志中,目的是为故障检测和问题处理提供更多的信息。

5L在错误日志方面增加了3个新功能:

    (1)如果多个相同的错误到达的时间差小于或接近指定的时间间隔,那么就认为它们是重复错误记录,而且只把这个错误记录一次

    (2)用errpt命令可以产生一个介于详细报告和摘要报告之间的报告,它删除了详细报告中不常有的信息

    (3)现在的诊断工具将在错误日志中记录附加的信息


一、错误日志概述

    一旦操作系统的某一个模块检测到一个错误,错误日志进程(errdemon)就开始工作。错误检测部分的代码就会向errsave内核服务和errlast内核服务器发送即将发生的系统崩溃信息,或者向errlog函数发送错误信息来记录一个应用程序错误。这些信息依次被写到/dev/error设备文件中,errlast把错误记录保存在NVRAM,因此,在系统崩溃的时间中,最后记录的错误日志并不会被丢失。

    这个进程把时间戳添加到所收集的数据中。errdemon进程一直在持续不断地检查/dev/error设备文件中是否有新的纪录,当有新数据被写到/dev/error设备文件中时,这个进程就会产生一系列操作。在把一条日志记录写到错误日志中之前,errdemon进程使用由内核或应用程序代码发来的标签(Label)在错误记录模板库(Error Record Template Repository)中进行查找,在模板库中如果找到了一条与这个标签相符的记录,这个进程再从系统的其他地方收集一些附加的数据。

    要在错误日志中创建一条记录,errdemon进程就从模板库中查找合适的模板,还要找到资源的名称(检测到错误的部件名)和详细的数据等。同样,如果这个错误是一个和硬件相关的问题,而且硬件的重要产品数据(Vital Product Data,简写为VPD)也存在,则这个进程就从ODM数据库中查找这个硬件的VPD。当用户通过SMIT或errpt命令查看错误日志时,这个命令就会按照模板库中错误的模板来格式化错误日志,形成一个摘要报告或详细报告。liberrlog函数库提供了用于检索错误日志记录的函数包括:errlog_open,errlog_close,errlog_find_first,errlog_find_next,errlog_find_sequence,errlog_set_direction和errlog_write。errlog_write只提供了一个有限的更新能力。

因为diag命令使用错误日志来诊断硬件问题,所以要能正确诊断出一个新的系统问题,系统应从错误日志中删除保存时间超过90天的与硬件相关的记录,删除30天以前的与软件相关的记录

    错误日志中的大多数日志记录都是关于硬件或软件的问题,但是也记录一些消息报告。系统管理员通过查看错误日志可以检测出引起故障的原因,或者周期性地检查系统的健康状况,维修人员通过检查错误日志可以帮助他们维修机器。

    5L5.1基本系统的bos.rte.serv_aid文件集由errlog函数,errsave和errlast核心服务,错误设备驱动程序(/dev/error)、错误守护进程、errinstall、errupdate和errstop命令组成。这个文件集作为AIX安装过程中的一部分会被自动安装。

    一个可选择安装的软件服务辅助程序包(bos.sysmgt.serv_aid)由errclear,errdead,errlogger,errmsg,errpt和sysdumpstart命令组成。使用errpt命令可以产生一个错误日志报告,用errclear命令可以删除错误日志的记录,要使用这些命令必须安装bos.sysmgt.serv_aid软件包。早期AIX中默认不会安装,使用以下命令可以检查该文件集是否被安装:

    命令:lslpp -h bos.sysmgt.serv_aid

    error ID(错误号):一个32-bit的CRC十六进制的代码,用来标识一个具体的错误,每个错误记录模板有一个惟一的error ID

    error label(错误标签):帮助记忆error ID的名称

    error log(错误日志):存储由系统检测到的错误和故障实例的文件

    error log entry(错误日志记录):系统错误日志中的记录,这些记录是用来描述硬件和软件故障或操作者消息的。一个错误日志记录格式化报告的信息描述,包括的信息由:错误类型(type)、错误类(class)、可能的原因和推荐的处理操作。总之,错误记录模板构成了错误日志模板库(Error Record Template Repository)。

    error record template(错误记录模板):把错误日志格式化成报告的信息描述,包括的信息有:错误类型(type)、错误类(class)、可能的原因和推荐的处理操作。总之,错误记录模板构成了错误日志模板库(Error Record Template Repository)



二、错误日志子系统的处理流程

    错误日志子系统由3部分组成:错误日志的设计、错误处理和错误日志文件处理,它们之间的处理流程如图:

wKiom1jtzf2z2swYAAE_iJtvoo4484.png-wh_50


    1.错误日志的设计(Error log programming)

    这部分是被开发者用来创建错误模板和消息文本的。在开发错误日志子系统时,由程序设计人员创建错误模板库(Error Template Repository)和错误消息库(Error Message Repository),分别存放在/var/adm/ras/errtmpit和/usr/lib/nls/msg/$LANG/codepoint.cat文件中。当然用户也可以用errupdate命令更新错误模板库中的内容,用errinstall和errmsg命令添加、修改和现实错误消息。

    2.错误处理(Error processing)

    当一个错误产生时可调用错误处理生产错误日志记录。无论是由应用程序或操作系统内核产生的错误,还是用errlogger命令产生的日志,都将写到/dev/error设备文件中,然后由错误日志进程从/dev/error文件中读取这些错误日志,再根据错误模板库中的模板和错误消息库中的消息来收集必须的数据,并把这些数据写到错误日志(/usr/adm/ras/errlog)中。错误日志进程由/usr/lib/errdemon命令来启动,由/usr/lib/errstop命令停止。此外,用errclear命令清楚错误日志中的记录

    3.错误日志文件处理(Error log file processing)

这部分是被系统管理员用来诊断系统故障的。当用户或系统管理员用errpt命令查看错误日志时,errpt命令从错误日志(/usr/adm/ras/errlog)中读取错误记录,并根据错误模板库中对应的模板和错误消息库中对应的消息对错误日志进行格式化,最后将格式化的结果显示出来,共用户参阅。


三、错误日志文件处理

    错误日志包含着与每一个错误相关的错误ID,时间戳,错误类型(error type)、错误类(error class)和资源名。一些错误日志记录也包含着被errlog或errsave函数传递来的明细数据,例如关于故障板卡的插槽号或不能被打开的文件名。在用户查看系统错误的信息时,系统处理错误日志的过程如图:

wKiom1jtzj-yUZ4kAAB7BE9axyE723.png-wh_50

    1.错误模板

    错误模板包含着码点目录(codepoint catalogue)中错误消息对应的编码。错误消息用来说明引起错误的可能原因和推荐的处理方法,也用来解释伴随错误的详细报告。错误模板也用于指示错误是否值得报告、记录或警惕。如果错误不值得报告,那么当运行errpt命令时它不会出现;如果一个错误不值得记录,那么它就不会被放到错误日志中。模板文件中的每一个模板包含着唯一的信息对应于一个惟一的错误。错误模板的内容是用来计算错误ID的。错误号(错误ID)对应的错误消息指出错误的原因和推荐的处理。用带-t参数的errpt命令能够查看errpmplt文件中的模板。使用errupdate命令把模板安装在errpmplt文件中。在安装包含新错误模板的任何文件集时,这些模板作为安装过程的一部分会被自动安装在errtmplt文件中。

    2.错误消息

    错误消息也被编码化了,放在已给单独的文件目录中,称之为码点目录()


四、错误日志进程errdemon

    AIX系统中错误日志进程是errdemon,在命令行执行/usr/lib/errdemon命令就能启动错误日志进程,同时向错误日志中写一条记录。错误日志进程从/dev/error逻辑设备文件中读取记录,然后再系统错误日志中创建错误日志记录。除了向系统错误日志中写记录外,错误日志还执行错误通知,错误通知在错误通知数据库/etc/objrepos/errnotify中指定。默认的错误日志保存在/var/adm/ras/errlog文件中,最后一条错误记录保存在NVRAM中。在系统启动过程中,当错误日志进程启动时,它从NVRAM中读出最后一条错误记录并把它添加到错误日志或dump中。如果错误记录模板指定了Log=FALSE参数,错误日志进程不会为已登陆的错误创建一条错误日志记录。如果用户运行不带任何参数的/usr/lib/errdemon命令时,系统就会用保存在错误日志配置数据库中关于错误日志文件名、文件大小和内部缓存大小等参数的值启动错误日志进程。默认情况下,当errdemon进程记录日志的速度非常快时它会删除重复的错误日志。这样就能够防止失控的错误日志对系统的性能产生负面的影响。从一个明细的错误报告中可以看出重复的错误记录数。用errclear命令可以从系统错误日志中删除日志记录。

    注意:在系统初始化过程中,正常启动错误日志进程。在错误数据被写到错误日志文件中之前,停止错误日志进程可能会导致存储在内部缓存中的错误数据被重新改写

    1.errdemon命令的用法

    格式:errdemon [ [ -B BufferSize ] [-d | -D ] [ -i File ] [ -s LogSize ]  [-t Time ] [ -m MaxDups ] | -l ]

    参数:

    -B BufferSize:用BufferSize参数指出错误日志设备驱动程序在内存中的缓存区大小,单位是字节

    -d:指出不删除重复的错误日志记录。默认是删除重复的错误日志记录,由-D参数指出

    -D:指出删除重复的错误日志记录,默认的

    -i File:用file参数指出错误日志文件名。指定的文件名被保存在错误日志配置数据库中而且是立即使用指定的日志文件

    -s LogSize:用LogSize参数指出错误日志文件大小的最大值。错误日志文件大小的限制保存在错误日志配置数据库中。该参数一旦设置,就立即生效

    -t time:如果两个相同错误之间的时间间隔小于由time参数指定的时间,那么就认为它们是重复记录。单位是毫秒,在超出这个间隔时间之后发生的相同错误不认为是重复日志记录,即使它们记录着相同的错误。默认的时间间隔是100毫秒或十分之一秒。time参数的取值范围在1到2147483647之间

    -m MaxDups:由MaxDups参数指出在一个重复错误被迫产生之前,所允许的重复记录的最大数,默认是1000,当一个错误已经重复了指定的次数之后,就假定最后产生的一个重复错误是唯一的错误,并把这个错误写到系统日志中。

    -l:显示错误日志配置数据库中错误日志文件名,文件大小,缓存区大小和重复操作的值

由BufferSize参数指定的缓存区大小被保存在错误日志配置数据库中。如果BufferSize参数的值大于当前正在使用的缓存区大小,就会立即增加内存中的缓存区。如果BufferSize参数的值小于当前正在使用的缓存区大小,在系统重新启动后,错误日志进程在下次启动时所设定的新的缓存区大小才生效。缓存区大小不能小于8KB,这个大小是在编程时明确定义的。如果没有指定-B BufferSize参数,错误日志进程就会使用错误日志配置数据中的缓存区大小

    注意:用户指定的缓存区大小必须是内存页大小的倍数,否则,它会向大地取整为最接近它的一个整数。内存中的缓存区是固定的,因此其他进程无法再使用用于错误日志设备驱动程序的缓存区的内存。如果用户不小心制造了一个过分大的缓存区时,就会影响系统性能。另一方面,如果指定的缓冲区太小,如果错误日志到达缓存区的速度快于从缓冲区读取它并写入到错误日志文件的速度,那么缓存区就会变满。当缓存区变满时,新产生的错误日志就会被丢弃掉,直到缓存区中出现空闲空间为止。如果出现这种情况,错误日志进程就会产生一条错误记录来把这个问题通知给用户。用户通过增大缓存区可以解决这个问题。

    如果日志文件大小的最大值小于当前正在正在使用的日志文件大小,错误日志进程通过在当前的日志文件名后面添加一个.old后缀来修改当前的日志文件名。错误日志进程指定的最大值创建一个新的日志文件。要从旧日志文件中产生错误报告就使用带-i参数的errpt命令。如果未指定-s LogSize参数,错误日志进程就会使用错误日志配置数据库中的日志文件大小的最大值。

    注意:在错误日志进程快速记录同一个错误的情况下,-t Time参数能消除重复记录,通常是指一个重复条件。这一点是故意不捕获所有重复的错误,对这些重复的错误来说,可能会存在错误通知对象。把time参数的值设置得十分大可以消除非常多的错误,但是可能会消弱错误通知的作用


    2.配置错误日志文件

    示例:检查错误日志文件的属性

    命令:/usr/lib/errdemon -l

    示例:改变当前日志文件(默认的日志文件为:/var/adm/ras/errlog)

    命令:/usr/lib/errdemon -i  /var/adm/ras/myerrlog

    示例:修改当前错误日志文件的大小

    命令:/usr/lib/errdemon -s 28866

    示例:修改错误日志缓存区的大小

    命令:/usr/lib/errdemon -B 20480

    示例:把10毫秒内出现的相同错误认为是重复错误

    命令:/usr/lib/errdemon -t 50


    3.启动错误日志进程

    示例:检查错误日志进程是否已运行

    命令:ps -ef | grep errdemon

    如果错误日志进程还没有运行,那么久直接运行不带任何参数的errdemon命令启动

/usr/lib/errdemon

    如果错误日志进程已启动了,那么再执行errdemon命令就会出现下面的错误信息:

0315-100 The error log device driver,/dev/error, is already open.The error demon may already be active


    4.停止错误日志进程的运行

    命令:/usr/lib/errstop

    注意:运行errstop命令会关闭诊断和恢复功能。通常情况下,在系统启动时自动执行errdemon命令来启动错误日志进程,在系统关闭时停止错误日志进程。在正常运行过程中,错误日志进程永不停止运行。只有当要求无条件地停止错误日志进程,而且非常清楚这样做的后果是非常特殊的情况下才使用errstop命令


五、errpt命令的使用格式

    errpt命令可从一个错误日志(文件)中读取错误记录,然后产生一个错误报告。读取错误记录时可以指定选择错误记录的条件,找出符合某个条件(或某一类型)的记录。默认情况下,按照与错误发生(记录)时的顺序相反来显示错误日志记录,即后发生的错误先显示,先发生的错误后显示。执行带-c参数的errpt命令将按错误发生时的顺序来显示错误日志。默认情况,errpt命令处理在错误日志配置数据库中指定的错误日志文件(可以用errdemon -l命令查看),当然用户可以用-i参数指定要查看的错误日志文件。

    命令格式:

errpt [ -a ] [ -A ] [ -c ] [ -d ErrorClassList ] [ -D ] [ -e EndDate ] [ -g ] [ -i File ]

[ -I File ] [ -j ErrorID [ ,ErrorID ] ] | [ -k ErrorID [ ,ErrorID ] ]

[ -J ErrorLabel [ ,ErrorLabel ] ] | [ -K ErrorLabel [ ,ErrorLabel ] ]

[ -l SequenceNumber ] [ -m Machine ] [ -n Node ] [ -s StartDate ] [ -F FlagList ]

[ -N ResourceNameList ] [ -P ] [ -R ResourceTypeList ] [ -S ResourceClassList ]

[ -T ErrorTypeList ] [ -y File ] [ -z File ]

    下面是用errpt命令从错误记录模板库(Error Record Template Repository)中生成报告的命令格式:

errpt [ -a ] [ -A ] [ -I File ] [ -t ] [ -d ErrorClassList ]

[ -j ErrorID [ ,ErrorID ] ] | [ -k ErrorID [ ,ErrorID ] ]

[ -J ErrorLabel [ ,ErrorLabel ] ] | [ -K ErrorLabel [ ,ErrorLabel ] ]

[ -F FlagList ] [ -P ] [ -T ErrorTypeList ] [ -y File ] [ -z File ]

    执行不带任何参数的errpt命令,将显示一个错误报告的概要,其报告格式是一个错误独占一行。当然用户可以指定不同的参数来产生不同格式的报告

    注意:errpt命令不执行错误日志分析。要做错误日志分析,要使用diag命令。当执行了错误日志分析,诊断程序可能会把诊断信息添加到错误日志中。这些信息紧跟在相应错误日志记录的详细数据之后显示。

    参数含义:

    -a:以明细方式显示错误日志文件中的错误信息。如果和-t参数一起使用,则显示模板文件中的所有信息

    -A:显示一个简化后的详细信息,不能和-a,-g或-t参数同时使用

    -c:按照记录错误时的时间显示每一条错误日志

    -d ErrorClassList:显示某种类型的错误信息。类型有H(硬件)、S(软件)、0(errlogger命令信息)和U(未确定的)。由ErrorClassList变量指定错误类型列表

    -D:合并重复错误,不能和-c,-g,-l,-t,-P参数同时使用

    -F FlagList:按照模板中的Alert,Log或Report字段的值来显示模板,由FlagList参数指出Alert,Log或Report字段的值

    -e EndDate:显示指定日期之前的错误日志记录。EndDate参数的日期格式是mmddhhmmyy(月、日、小时、分钟和年)

    -g:以ASCII方式显示原始的错误日志记录,即未经过模板格式化的错误记录

    -i File:用File参数指定错误日志文件。如果不指定这个参数,则使用在错误日志配置数据库中定义的错误日志文件

    -I File:用File参数指定诊断日志文件。如果不指定这个参数,则使用默认的诊断日志文件/var/adm/ras/diag_log

    -j ErrorID [ , ErrorID]:只显示指定错误ID记录。由ErrorID参数指定错误标识符

    -k ErrorID [ , ErrorID]:排除由ErrorID参数指定的错误ID的记录,即不显示这些错误ID的记录

    -J ErrorLabel [ ,ErrorLabel ]:只显示指定错误标签(错误名)的记录,由ErrorLabel参数指定错误标签名

    -K ErrorLabel [ ,ErrorLabel ]:排除指定错误标签的记录

    -l SequenceNumber:只显示指定符号的错误日志记录,由SequenceNumber参数指定唯一一个序号,也可以指定多个序号,这个参数只用于错误通知对象类(error-notification object class)中

    -m Machine:只显示指定机器ID的错误日志记录,由Machine参数指定机器ID,用uname -m命令可以得到Machine参数的值

    -n Node:只显示指定节点的错误日志记录,由Node参数指定机器ID,用uname -n命令可以得到Node参数的值

    -s StartDate:显示指定日期之后的错误日志记录。StartDate参数的日期格式是mmddhhmmyy(月、日、小时、分钟和年各两个数字)

    -t:处理错误记录模板库,而不是系统的错误日志。-t参数用于显示错误记录模板的报告

    -N ResourceNameList:产生一个由ResourceNameList参数指定资源名的报告。                ResourceNameList是一个已检测到错误的资源名列表。对软件错误,ResourceNameList列示已检测到错误的资源名列表;对于硬件错误,它列示设备名或系统组件名。它并不指出组件有故障或需要替换,相反,而是用来确定适当的诊断模块,用这些诊断模块来分析错误

    -P:只显示和以前错误重复的错误。-P参数只适用于由错误日志设备驱动程序产生的重复错误。这些重复错误发生在由errlg_duptime指定的适当的时间间隔内。errlg_duptime是一个错误日志属性,它由errdemon命令的-t参数来控制。-P和-D参数不能同时使用

    -R ResourceTypeList:产生一个由ResourceTypeList参数指定资源类型的报告,对于硬件错误,ResourceTypeList就是一个设备类型,对于软件错误,它就是一个LPP的值

    -S ResourceClassList:产生一个由ResourceClassList参数指定资源类的报告,对于硬件错误,ResourceClassList就是一个设备类(Devices Class)

    -T ErrorTypeList:只显示指定错误类型的报告。错误类型列表由ErrorTypeList参数指定错误类型有:INFO,PEND,PERF,PERM,TEMP和UNKN

    -y File:使用由File参数指定的错误记录模板文件。当结合-t参数使用时,使用指定的错误模板库处理指定错误模板库中的记录,否则使用指定的错误模板库来处理错误日志中的记录

    -z File:使用由File参数指定的错误日志消息目录,当结合-t参数使用时,处理指定错误模板库中的记录,否则处理错误日志中的记录


六、显示错误日志的摘要

    示例:执行不带任何参数的errpt命令可以获得错误日志报告的一览表

    命令:errpt | more

    错误日志报告中每一行就是一条错误日志。默认下,是按照错误发生的倒序来显示每一条错误日志。每条错误日志包含下面一些字段:

    (1)标识符(IDENTIFIER):错误标识符ID是一个32位的CRC(Cycli-Redundancy-Check,循环冗余码校验)十六进制代码,错误标识符确定用哪一个错误模板来解释包含在错误日志记录中的信息。

    (2)时间戳(TIMESTAMP):错误发生的日期和时间,其格式是MMDDhhmmYY,MM表示月,DD表示日,hh表示小时,mm表示分钟,YY表示年

    (3)类型(TYPE,简写为T):类型是指记录错误原因的严重程度。有5个不同的错误类型,当不能确定严重程序时用第6个错误类型。各错误类型如下:

    PEND:一个设备或组件的可用性即将丢失

    PERF:设备或组件的性能已经下降到一个可接受水平之下

    PERM:这种错误不可能得到恢复或解决,是永久的。这种错误类型通常是最严重的错误和有一个损坏的硬件设备或软件模块。其他非PERM类型的错误通常并不表示一个故障,由于它们被记录了,所以可以用诊断程序分析它们

    TEMP:表示在许多次失败的尝试之后,这种错误被恢复了。这种错误是临时性的错误。这种错误类型也可用于记录普通的消息。例如DASD设备的数据传输统计信息。

    UNKN:表示不能确定这种错误的严重程度

    INFO:这个错误日志记录是一般的消息,并不是一个错误的结果

    在错误日志报告的一览表中,只显示错误类型的第一个字母。上面6个错误类型分别表示为P,P,P,T,U和I。

    (4)种类(CLASS,简写为C):指出一般的错误源。这些错误种类有:

    H:表示硬件设备故障或介质错误。当用户碰到一个硬件错误时,在系统操作指南中查找关于对相关硬件执行诊断测试的信息。诊断程序测试设备并分析与设备相关的错误日志记录来确定设备的状态。

    S:表示软件故障,包括应用程序,系统程序的故障和内核问题,例如页面空间很低(空闲空间较少)

    O:指一个操作者的通知性错误,当使用errorlogger命令时就会记录成这种错误。这类错误表示指用户使用了不正确的命令或一些系统消息。

    U:表示不能确定错误源

    (5)资源名(RESOURCE_NAME):检测到错误的资源名。对于软件错误,这是一个软件组件名或可执行程序名;对于硬件错误,这是一个设备名或系统组件名,它并不表示这个组件故障了,需要更换,相反,它是用来确定适当的诊断模块,用这些诊断模块来分析错误

    (6)描述(DESCRIPTION):对记录的错误日志进行简单的描述


七、显示错误日志的详细内容

    命令:errpt -a | pg

wKiom1jtzxGiawFGAAAy4qto7IQ591.png-wh_50

    一个详细的错误日志报告可能包含许多条日志,每一条日志包含着许多个字段。不同的错误包含的字段也有差异。下面列出的字段在每条日志记录中都会包含:

    LABEL(错误名) 为事件(错误)预先确定一个名字

    ID(错误ID) 以数字形式表示错误事件(错误)的标识符

    Date/Time(日期和时间) 事件(错误)发生的日期和时间

    Sequence Number(序列号)  用来表示事件惟一性的序列号

    Machine ID(CPU的ID)  处理器的标识符

    Node ID(节点名)  系统的主机名

    Class(表示错误源的种类)   一般的错误源

    Type(类型)           错误的严重程度,有5中可能

    Resource Name(资源名)         检测到错误的资源名

    Description(描述)    描述错误的摘要信息

    下面列出的字段可能出现或不出现在错误日志记录中,这要依据错误的特性:

    Resource Class(资源种类)        一般的资源种类,这是指检测到故障的资源

    Resource Type(资源类型)         检测到故障的资源类型

    Location Code(位置编号)          设备的位置编号,表示设备的路径。由4个字段组成,分别表示抽屉(drawer)、插槽(slot)、连接器(connector)和端口(port)

    VPD      重要产品数据。关于设备的错误日志显示具有代表性的信息:设备的制造厂商,序列号,工程变化(EC)的级别和只读存储器(ROS)的级别

    Probable Causes(可能的原因)     导致这个错误的一些可能的原因的列表

    User Causes(用户原因) 由于用户过失而导致的一些可能的原因的列表。例如在使用磁盘或软盘之前没有插入这些介质,就会引起读写这些介质出错,如果用户没有打开MODEN和打印机电源,就去使用它们,肯定会出错,这些错误都是由用户造成的。

    Install Causes(安装原因) 由于安装或配置过程是错误的而导致错误的可能原因列表。例如硬件和软件不匹配而引起的错误;电缆安装错误或电缆连接松动也会引起故障;对系统不适当的配置也会引起错误

    Failure Causes(故障原因) 可能损坏的硬件或软件列表

    注意:在软件错误日志中的Failure Causes通常指一个软件缺点。如果有用户原因User Causes或安装原因Install Causes或二者都有,而没有故障原因,那么问题通常不是软件的缺点。

    Recommended Actions(推荐的操作)   描述解决这个故障的处理办法。对于硬件错误,执行问题检测程序是一个推荐的操作,这需要运行诊断程序

    Detailed Data(详细的数据) 对每一条错误日志记录来说,故障数据都是独特,唯一的,例如设备检测到的数据。这个字段的内容视错误的情况而定,可能会出现设备的主/次号码,程序的返回码和系统的错误代码,这些错误码定义在/usr/include/sys/errno.h文件中

    注意:如果对某些故障已经执行了诊断操作,那么错误日志的详细信息中可能还会列出诊断分析的信息,如:

wKiom1jtz0vzjpVaAABxcftVOP0602.png-wh_50

    在这个诊断分析信息中有一个维护请求号(Service Request Number,简写为SRN号),IBM硬件工程师经常询问SRN号来研究这个具体的症状


八、以ASCII方式显示原始的错误日志

    要显示未经过模板格式化过的错误日志,使用带-g参数的errpt命令

    例如:errpt -g -j 74533D1A | more

    (注意:这里的74533D1A指的是IDENTIFIER,即错误ID)

wKiom1jtz3aQZ6GxAABXH21xEU8912.png-wh_50

带-g参数errpt命令的输出结果中的各字段

el_sequence 错误日志的序列号

el_label 错误日志标签(错误名)

el_timestamp 错误发生的时间和日期,时间戳

el_crcid 错误的标识符,一个32位的CRC数

el_machineid 机器CPU的ID

el_nodeid 系统节点ID,即主机名

el_class 错误日志的种类

el_type 错误日志的类型

el_resource 检测到的错误的资源名

el_rclass 资源的种类

el_rtype 资源的类型

el_vpd_ibm IBM的重要产品数据(VPD)

el_vpd_user 用户的VPD

el_in 设备的位置编号

el_connwhere 硬件的连接ID,一个具体设备上的位置,例如插槽号

et_label 错误模板的标签

et_class 错误模板的种类

et_type 错误模板的类型

et_desc 错误模板的描述

et_probcauses 可能的原因

et_usercauses 用户的原因

et_useraction 用户的操作

et_instcauses 安装的原因

et_instaction 安装的操作

et_failcauses 故障的原因

et_failaction 故障的操作

et_detail_length 详细数据字段的长度

et_detail_descid 详细数据的标识符

et_detail_encode 详细数据输入格式的描述

et_logflg 日志的标志

et_alertflg 警惕的错误标志

et_reportflg 错误报告的标志

el_detail_length 详细数据的输入长度

el_detail_data 详细数据的输入

el_dupcount 重复错误的次数


九、显示错误日志的例子

    例1:检查过去24小时内发生的所有错误日志,使用以下命令:

    date

    Wed Jan 29 09:21:26 BEIST 2003

    命令:errpt -a -s 0128092103

    例2:显示指定错误ID 的错误日志的详细报告(使用-j参数)

    命令:errpt -a -j 5537AC5F

wKioL1jtz6iyfFhtAAJA3-pxk5c548.png-wh_50

    上图结果中,是一个硬件错误,而且是PERM类型的,也就是说无法恢复的严重性错误。发生在rmt0上,可能是磁带驱动器或适配器出现了故障,并且故障出现了3次(从LABEL的TAPE_ERR4看出),需要对磁带机进行维护,检查磁带驱动器和适配器,然后更换部件

    例3:显示指定错误标签的错误日志的详细报告(使用-J参数)

    命令:errpt -a -J TAPE_ERR1

    例4:5.1中, errpt命令开始支持一种介于摘要和详细输出之间的简化输出,即是用-A参数。这种简化的详细输出主要包括错误标签(LABEL),日期和时间(Date/Time),错误类型(Type),资源名(Resource Name),描述(Description)和详细数据(Detail Data)。要显示一个指定错误日志详细报告的简化版

    命令:errpt -A -j 0734DA1D

    例5:显示错误日志模板中log=0(日志被关闭了)的模板

    命令:errpt -t -F log=0

wKiom1jtz9fg-AeAAABt77Dhk8E136.png-wh_50

错误标志字段有3中:log,alert和report

-F log=0 选择log字段为 False的错误日志模板

-F log=1 选择log字段为 True的错误日志模板

-F alert=0 选择alert字段为 False的错误日志模板

-F alert=1 选择alert字段为 True的错误日志模板

-F report=0 选择report字段为 False的错误日志模板

-F report=1 选择report字段为 True的错误日志模板

    例6:要从/var/adm/ras/myerrlog日志文件中显示所有硬件的错误日志

    命令:errpt -i /var/adm/ras/errlog -d H

wKiom1jtz__BXF67AAA_E6pKIfc060.png-wh_50

    要显示所有软件的错误日志,就用-d S参数,要显示所有通知性的错误,就使用 -d O参数

    例7:备份错误日志文件

    a.备份到磁盘上

    命令:ls /var/adm/ras/errlog | backup -ivp

    b.备份到磁带上

    命令:ls /var/adm/ras/errlog | backup -ivpf /dev/rmt0

    例8:显示指定资源名的错误日志

    如要获得所有关于rmt0的错误日志记录,需要指定资源名为rmt0,按资源名来查看错误日志(使用-N参数)

    命令:errpt -N rmt0

    例9:记录维护活动

    命令:errlogger "要记录的命令内容"


十、用errclear命令清除错误日志记录

    默认情况下,AIX运行一个cron作业来删除错误日志,这个作业在每天中午12:00删除90天以前的所有硬件错误日志和在每天中午11:00删除30天以前的所有软件错误和操作者信息的日志。cron调用errclear命令删除以前的记录

    格式:errclear -J err_label_list -K err_label_list -N resource_name_list

    -R resource_type_list -S resource_class_list -T err_type_list

    -d err_class_list -i filename -m machine_id -n node_id

    -j id_list -k id_list -l seq_no_list -y filename number_of_days

    参数

    -d err_class_list 删除指定错误种类的错误日志,由err_class_list参数指定错误种类列表,错误的种类有:H(硬件),S(软件),0(errlogger命令信息)和U(未确定的)。由err_class_list变量指定错误类型,类型列表要用双引号(“”)括起来,各类型之间用一个逗号或一个空格隔开

    -l SequenceNumber:删除指定序列号的错误日志,由SequenceNumber参数指定错误日志

    -m Machine:删除指定机器ID(处理器ID)的错误日志,由Machine参数指定机器ID。uname -m命令能够返回Machine参数的值

    -y FileName:使用由FileName参数指定的错误记录模板文件

    -J ErrorLabel [ ,ErrorLabel]:删除指定错误标签的记录,由ErrorLabel参数指定错误标签

    -K ErrorLabel [, ErrorLabel]:删除所有的错误日志记录,除了由ErrorLabel参数指定错误标签的记录

    -T ErrorTypeList:删除由ErrorTypeList参数指定错误烈性的记录,ErrorTypeList参数的值有:PERM,TEMP,PERF,PEND,INFO,和UNKN

    -N ResourceNameList:删除由ResourceNameList参数指定资源类型的记录

    -R ResourceTypeList:删除由ResourceTypeList参数指定资源类型的记录

    -S ResourceClassList:删除由ResourceClassList参数指定资源种类的记录

    -i File:删除由File参数指定错误日志文件中的记录

    -n Node:删除由Node参数指定主机名的记录

    -j ErrorID [,ErrorID]:删除由ErrorID参数指定错误ID的记录

    -k ErrorID [,ErrorID]:删除所有的错误记录,除由ErrorID参数指定错误ID的记录之外

errclear命令删除几天之前的错误日志,由Days参数指定天数,要删除所有错误日志记录,就让days的值为0,也就是删除0天之前的所有记录。如果执行errclear命令之前没有指定-i参数,那么它就清除在错误日志配置数据库中指定的错误日志文件

    示例:删除所有错误日志记录

    命令:errclear 0

    示例:删除10天前关于软件的错误记录

    命令:errclear -d S 10

    还可以使用smit来删除错误日志

    命令:smit errclear