Informixのログ(通常はonline.log)には、エラーが出力されますが、これをエラーレベルでアラートを出すとかが出来ます。以下はサンプル!。
!!表示がおかしい! 一部の文字が正しく記述されていない。 いずれ、直します。取り敢えずイメージは伝わるかと。
概要仕様は以下
Informixのイベントアラーム通知機能を利用して、以下の機能を実現する。
1)スクリプトの先頭(又は、iniファイル等で)で、以下の項目を指定可能な事。
a)出力先ファイル名(含むディレクトリ) なお、出力先は、最大2カ所指定可能とし、いずれも追記で出力する
b)出力対象アラームの重要度(1~5で指定し、指定した重要度以上を対象とする)
1:注意不要レベル
2:通知レベル
3:注意レベル(デフォルト設定)
4:緊急レベル
5:致命的レベル
c)出力ファイルフォーマット(1行で出力するか、複数行で出力するかの指定)
d)出力項目レベル指定(1~5、9(全て)で指定し、指定した項目以内を対象とする)
①年月日時分秒 + 重要度
②イベントクラスID
③クラスメッセージ
④固有のメッセージ
⑤関連項目パス
例:”3”を指定したら、①~③までを出力
e)MSGガイダンス出力の有無指定(0:出力しない 1:出力する)
①重要度Severity :
②イベントクラスIDClass ID :
③クラスメッセージClass msg :
④固有のメッセージSpecific msg :
⑤関連項目パスSee Also :
なお、年月日時分秒についてはガイダンスは出力しない。
f)MSGのKeyガイダンスの指定(”IDS Err MSG:”等先頭に出力可能にする)
g)上記”f)”の出力有無指定(0:出力しない 1:出力する)
2)クラスMSGまでの出力は、固定長で有ること
3)文字コードは、全て、半角英数字とし、コードセットの影響を受けない形とする。
4)exit_status への変数を設定すること
※:以下のサンプルコードはそのままでは動きません。一部の文字がおかしい&表示されていない等がある。
#!/bin/sh
#========================================================
# Informix Alarmprogram
#========================================================
OUTPUT_FILE_1=/tmp/log1.log
OUTPUT_FILE_2=/usr/informix94/online.log
OUTPUT_FORMAT=1 # 1:single-line 2:multi-line
OUTPUT_SEVERITY=1 # 1-5
OUTPUT_LEVEL=5 # 1-5,9
OUTPUT_GUIDANCE=1 # 0-1
OUTPUT_KEY_GUIDANCE_TEXT=
OUTPUT_KEY_GUIDANCE=0 # 0-1
OUTPUT_DATE=date '+%Y/%m/%d %H:%M:%S'
EVENT_SEVERITY=$1
EVENT_CLASS=$2
EVENT_MSG="$3"
EVENT_ADD_TEXT="$4"
EVENT_FILE="$5"
cd dirname $0
EXIT_STATUS=0
#=======================================================
# Output File Check
#-----------------------------------------------------------------------------
# Argument
# file_name
# Return
# 0 : OK
# 1 : NG
#=======================================================
file_chkeck() {
if [ -f $1 ] ; then
if [ ! -w $1 ] ; then
echo "ERROR: \"$1\" not writable."
return 1
fi
else
touch $1 > /dev/null 2>&1
if [ $? -ne 0 ] ; then
echo "ERROR: \"$1\" cannot create."
return 1
fi
fi
return 0
}
if [ "$OUTPUT_FORMAT" = "" ] \
|| ([ $OUTPUT_FORMAT -lt 1 ] || [ $OUTPUT_FORMAT -gt 2 ]) ; then
echo "ERROR: syntax error OUTPUT_FORMAT=$OUTPUT_FORMAT"
exit 1
fi
if [ "$OUTPUT_SEVERITY" = "" ] \
|| ([ $OUTPUT_SEVERITY -lt 1 ] || [ $OUTPUT_SEVERITY -gt 5 ]) ; then
echo "ERROR: syntax error OUTPUT_SEVERITY=$OUTPUT_SEVERITY"
exit 1
fi
if [ "$OUTPUT_LEVEL" = "" ] \
|| (([ $OUTPUT_LEVEL -lt 1 ] || [ $OUTPUT_LEVEL -gt 5 ]) && [ $OUTPUT_LEVEL -ne 9 ]) ; then
echo "ERROR: syntax error OUTPUT_LEVEL=$OUTPUT_LEVEL"
exit 1
fi
if ([ "$OUTPUT_GUIDANCE" != "0" ] && [ "$OUTPUT_GUIDANCE" != "1" ]) ; then
echo "ERROR: syntax error OUTPUT_GUIDANCE=$OUTPUT_GUIDANCE"
exit 1
fi
if ([ "$OUTPUT_KEY_GUIDANCE" != "0" ] && [ "$OUTPUT_KEY_GUIDANCE" != "1" ]) ; then
echo "ERROR: syntax error OUTPUT_KEY_GUIDANCE=$OUTPUT_KEY_GUIDANCE"
exit 1
fi
if [ "$OUTPUT_FILE_1" != "" ] ; then
file_chkeck $OUTPUT_FILE_1
if [ $? -ne 0 ] ; then
EXIT_STATUS=1
OUTPUT_FILE_1=
fi
fi
if [ "$OUTPUT_FILE_2" != "" ] ; then
file_chkeck $OUTPUT_FILE_2
if [ $? -ne 0 ] ; then
EXIT_STATUS=1
OUTPUT_FILE_2=
fi
fi
if [ "$OUTPUT_FILE_1" = "" ] && [ "$OUTPUT_FILE_2" = "" ] ; then
exit $EXIT_STATUS
fi
# Severity Check
if [ $# -lt 1 ] || [ $EVENT_SEVERITY -lt $OUTPUT_SEVERITY ] ; then
exit $EXIT_STATUS
fi
for OUTPUT_FILE in $OUTPUT_FILE_1 $OUTPUT_FILE_2
do
if [ $OUTPUT_KEY_GUIDANCE -eq 1 ] ; then
echo "${OUTPUT_KEY_GUIDANCE_TEXT}\c" >> $OUTPUT_FILE
fi
echo "${OUTPUT_DATE} \c" >> $OUTPUT_FILE
if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
echo "Severity:\c" >> $OUTPUT_FILE
fi
echo "$OUTPUT_SEVERITY" | awk '{ printf("%2s", $1)}' >> $OUTPUT_FILE
if [ $OUTPUT_LEVEL -ge 2 ] ; then
if [ $OUTPUT_FORMAT -eq 1 ] ; then
echo " \c" >> $OUTPUT_FILE
else
echo "" >> $OUTPUT_FILE
fi
if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
echo "Class ID:\c" >> $OUTPUT_FILE
fi
echo "$EVENT_CLASS" | awk '{ printf("%3s", $1)}' >> $OUTPUT_FILE
fi
if [ $OUTPUT_LEVEL -ge 3 ] ; then
if [ $OUTPUT_FORMAT -eq 1 ] ; then
echo " \c" >> $OUTPUT_FILE
else
echo "" >> $OUTPUT_FILE
fi
if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
echo "Class msg:\c" >> $OUTPUT_FILE
fi
echo "${EVENT_MSG}" | awk '{ printf "%s", $0 }' >> $OUTPUT_FILE
fi
if [ $OUTPUT_LEVEL -ge 4 ] ; then
if [ $OUTPUT_FORMAT -eq 1 ] ; then
echo " \c" >> $OUTPUT_FILE
else
echo "" >> $OUTPUT_FILE
fi
if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
echo "Specific msg:\c" >> $OUTPUT_FILE
fi
echo "${EVENT_ADD_TEXT}" | awk '{ printf "%s", $0 }' >> $OUTPUT_FILE
fi
if [ $OUTPUT_LEVEL -ge 5 ] ; then
if [ $OUTPUT_FORMAT -eq 1 ] ; then
echo " \c" >> $OUTPUT_FILE
else
echo "" >> $OUTPUT_FILE
fi
if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
echo "See Also:\c" >> $OUTPUT_FILE
fi
echo "${EVENT_FILE}" | awk '{ printf "%s", $0 }' >> $OUTPUT_FILE
fi
echo "" >> $OUTPUT_FILE
done
コメント