事件警报Event Alarms

  本文介绍如何使用事件警报功能,文中列出了事件严重性代码以及服务器环境中警报事件的类别,并解释了系统警报程序的目的。

1. 事件警报

  事件警报(Event Alarms)功能提供了一种机制,可以根据服务器环境中发生的事件自动触发管理操作。当服务器向消息日志文件报告的事件子集发生时,警报程序将被调用。

  onconfig文件中的ALARMPROGRAM 配置参数指定要调用的警报程序。ALARMPROGRAM配置参数必须被设置为警报程序的完整路径。此警报程序由系统管理员创建,可以是 shell 脚本,也可以是二进制程序。

2. 警报程序

  警报程序是由用户创建的 shell 脚本或二进制程序,该程序必须接受以下参数:

  • Event severity code — 事件严重性代码(整型)
  • Event class ID — 事件类别 ID(整型)
  • Event class message — 事件类别消息(字符串)
  • Event specific message — 事件具体消息(字符串)
  • Event file — 事件文件(字符串)

  当服务器报告给消息日志文件的特定事件发生时,警报程序将被调用。事件严重性代码、类别 ID、类别消息、具体消息,以及可选的事件文件路径名都会被报给警报程序。对于某些事件来说,服务器将附加信息写入事件文件参数指示的路径中。

2.1 事件严重性代码

  传给警报程序的第一个参数是事件严重性代码。所有事件都有一个相关的严重性代码。事件严重性代码如下:

代码 说明
1   无需注意(not noteworthy)。该事件不会上报给警报程序。
2 信息(information)。未发生错误,只是常规事件已成功完成。例如,检查点的完成。
3 注意(attention)。发生的事件值得注意。但数据未损坏且系统仍然可用。例如,一组镜像对中的一个 chunk 发生故障。
4 紧急(emergency)。发生超出预期的事件,可能损坏数据或妨碍数据访问。例如,一致性检查失败。
5 严重(fatal)。发生超出预期的事件,造成服务器崩溃。

2.2 事件类别和消息

  传给警报程序的第二个和第三个参数是事件类别 ID 和消息

点击查看事件类别ID及事件类别消息说明
事件类别ID 事件类别消息
1      表故障:’%s’ (dbsname:owner.tabname)
2 索引故障:’%’ (dbsname:owner.tabname-idxname)
3 Blob 故障:’%’ (dbsname:owner.tabname)
4 Chunk脱机,镜像处于活动状态:%ld (chunk number)
5 DBSpace 脱机:’%’ (dbspace name)
6 内部子系统故障:’%’
7 服务器初始化失败
8 物理恢复失败
9 物理恢复失败
10 逻辑恢复失败
11 无法打开chunk:’%’ (pathname)
12 无法打开 Dbspace:’%’ (dbspace name)
13 可能改进性能
14 数据库故障:’%’ (database name)
15 数据复制失败
16 归档完成:’%’ (dbspace list)
17 归档中断:’%’ (dbspace list)
18 日志备份完成:%ld (log number)
19 日志备份中断:%ld (log number)
20 逻辑日志已满 - 需要备份
21 服务器资源溢出:’%’ (resource name)
22 检测到长事务
23 逻辑日志 ’%ld’ (number) 完成
24 无法分配内存
26 动态添加日志文件 %d
27 需要日志文件
28 日志文件空间不足
29 以下情况之一,具体取决于上下文:区块故障、数据容量、逻辑日志容量、最大锁、最大容量、最大会话数
40 RSS节点上发生的各种事件
41 SDS节点上发生的各种事件

3. 警报程序示例

 在上面的示例中,服务器检测到某个会话处于一个长事务中且在消息日志文件中写入一条消息。长事务是引起警报程序调用的第22 类事件。服务器会将下列参数传递给警报程序(onconfig文件中的ALARMPROGRAM配置参数必须设置为警报程序完整路径名):

  • 3(事件严重性代码)
  • 22 (事件类别 ID)
  • Long transaction detected(事件类别消息)
  • Continuing Long Transaction …(事件具体消息)

  通常,具体事件的消息文本是对事件的相关描述且需要写入日志文件。在此示例中,没有额外的信息需要写入到事件文件中。

示例

Shell 示例︰当 chunk 处于脱机状态时发送邮件

# The above blank line forces use of sh. Don't remove it!
#************************************************************* 
PROG=‘basename $0‘
TMPFILE=${TMPDIR:-/tmp}/$PROG.‘date +%y-%m-%d-%H%M-%S‘
USER_LIST=jeckart EXIT_STATUS=0

EVENT_SEVERITY=$1 EVENT_CLASS=$2 EVENT_MSG="$3" EVENT_ADD_TEXT="$4" EVENT_FILE="$5"

rm -f $TMPFILE 
touch $TMPFILE

case "$EVENT_CLASS" in
11)if [ "$EVENT_SEVERITY" -ne 3 ] ; then
echo "Incorrect severity ($EVENT_SEVERITY) \  
for log change event ($EVENT_CLASS)" >> $TMPFILE
fi
echo "Event_Severity ($EVENT_SEVERITY)" >> $TMPFILE 
echo "Event_Class ($EVENT_CLASS)"  >> $TMPFILE 
echo "Event_Msg     ($EVENT_MSG)"     >> $TMPFILE

;;
esac

if [ -s $TMPFILE ] ; then
mail -s	$USER_LIST < $TMPFILE
fi
rm -f $TMPFILE 
exit $EXIT_STATUS

  有关使用事件警报程序的其他信息,请参阅SinoDB 管理员参考 配置参数章节中的 ALARMPROGRAM 部分。

4. 警报程序:Shell变量

  SinoDB动态服务器还提供了以下 shell 变量,可以使用这些变量来简化警报程序:

名称 描述 缺省设置
ALARMADMIN 如设置为 1 到 5,将包含严重性 > = 此设置值 的警报通知给DBA 0
ALARMPAGER 如设置为 1 到 5,将包含严重性 > = 此设置值 的警报通知给DBA 0
ADMINEMAIL DBA 的电子邮件地址
PAGERMAIL DBA pager的电子邮件地址
MAILUTILITY 任何命令行邮件程序 UNIX:/usr/bin/mail、NT:ntmail

  有关使用事件警报程序的其他信息,请参阅SinoDB 管理员参考 配置参数章节中的 ALARMPROGRAM 部分。

5. 警报程序的新增特性

  • 新的配置参数:ALRM_ALL_EVENTS
    — 设置为 0(关闭) 或 1(开启)。缺省值为 0,设置为0时,则仅“值得关注”的事件会被调用。

  • 值得关注事件︰
    — 数据库、表、 索引或 chunk 发生故障
    — Dbspace 脱机
    — 内部子系统故障
    — 初始化失败
    — 检测到长事务

  SinoDB数据库引入一个新的配置参数 ALRM_ALL_EVENTS,只允许"值得关注"的事件调用 ALARMPROGRAM参数配置的 shell 脚本,以上列出了这些值得关注的事件。