機能説明
時間内に一定の条件を満たすイベントがすべて発生するかチェックします。その際に、処理対象のイベントは動作契機となる1つ目のイベントも含めて、すべて監視画面に通知されないようになります。
条件を満たすイベントがすべて発生またはタイムアウトした場合に、それらを通知する末尾通知イベントを発生させます。
サンプルスクリプトファイル
OS種別 | 格納場所とファイル名 |
---|---|
Windows | Systemwalkerインストールディレクトリ\mpwalker.dm\mpsc\sample\scLastSendCor.swt |
Solaris | /etc/opt/FJSVssc/sample/scLastSendCor.swt |
Linux | /etc/opt/FJSVssc/sample/scLastSendCor.swt |
HP-UX | 提供なし |
AIX | 提供なし |
編集可能な項目
プロシジャ名
プロシジャ名の規約に従い編集します。
必ずプロシジャ名の先頭文字は“Usr”にします。
タイマ値
動作定義パート[単独定義型]の規約に従い編集します。
条件チェックを継続する時間を定義します。1つ目のイベントが発生し、条件を満たすイベントがすべて発生する前にここで指定した時間が経過すると、タイムアウトと判断します。
条件判定項目
動作定義パート[単独定義型]の規約に従い編集します。
条件判定で使用する情報の項目を以下の中から選択します。
ノード名
イベント発生時刻
イベントテキスト
条件チェックは、処理対象イベントの条件判定項目の中に“キーワードリスト”に定義したキーワードが含まれているかチェックします。
必要キーワードリスト
動作定義パート[単独定義型]の規約に従い編集します。
条件判定に使用するキーワードのリストを定義します。処理対象となった各イベントの“条件判定項目”に対してここで定義したキーワードが含まれているかチェックします。ここで定義されたキーワードを含むイベントがすべて発生した時点で条件を満たしたと判断します。なお、イベントの発生順序は関係しません。
警告イベントテキスト
動作定義パート[単独定義型]の規約に従い編集します。
1つ目のイベント受け付け時に、処理の開始を通知するイベントを発行したい場合、発行させるイベントのテキストを定義します。
条件一致時発行イベントテキスト
動作定義パート[単独定義型]の規約に従い編集します。
条件を満たしたと判断したときに、通知するイベントを発行したい場合、発行させるイベントのテキストを定義します。
タイムアウト時発行イベントテキスト
動作定義パート[単独定義型]の規約に従い編集します。
条件が満たされる前にタイムアウトと判断したときに、通知するイベントを発行したい場合、発行させるイベントのテキストを定義します。
コリレーションキーの設定
可変情報操作処理の規約に従い編集します。
イベント発生数のカウントはここで作成したキー単位に行います。1つのスクリプトで複数の動作(ノードごとにコリレーションをするなど)を実現させたい場合は、以下のイベント情報がキーに利用できます。
ノード名
イベントテキスト
注意事項
コリレーションの結果として通知されるイベントの発生元システムは、発行イベントテキストとしてマイナス記号“"-"”のみの指定を行った場合も含め常にコリレーションスクリプトを動作させているシステムの名前になります。
コリレーションキーの設定処理内でreturnコマンドおよびexitコマンドは記述しないでください。
コリレーションキーの設定処理時間は、そのままSystemwalkerのイベント通知性能に影響を与えます。インテリジェントサービス機能はイベントの滞留を防ぐために、平均の処理時間が3秒を超えるスクリプトはタイムアウトエラーとするため、冗長な処理は極力行わないでください。なお、処理時間の計測は“メッセージ監視アクション型スクリプト動作テスト”で行えます。運用時にはシステム負荷などより処理が遅くなることがあるため、テスト時の処理時間の目安としては、0.5秒以内になるようしてください。
クラスタ運用をしている場合
クラスタ運用しているサーバ上で、末尾通知コリレーションを動作させた場合、切り替えの前後で、それまでに発生した処理対象イベントの数などの情報は引き継がれず、コリレーション処理全体がすべてリセットされます。
使用例
例1
1分以内に発生した、同一アプリケーションからの特定のイベント(アプリケーション名がテキスト中に“AplName=xxxx”の形式で入っている)で、node1、node2、node3の3ノードからの通知があるかをチェックします。
編集内容
[プロシジャ名]
set ProcName UsrLastSendCor
[タイマ値]
set Timer 60000
[条件判定項目]
set CompParam 0
[必要キーワードリスト]
lappend CompList {node1} {node2} {node3}
[警告イベントテキスト]
set FirstText {Event CorrelationNo1 started}
[条件一致時の発行イベントテキスト]
set OutText1 {Event CorrelationNo1 normal ended}
[タイムアウト時発行イベントテキスト]
set OutText2 {Event CorrelationNo1 abnormal ended}
[コリレーションキーの設定]
set apl "" set rc [regexp {AplName=([^ ]*)} $EventText All apl] set Key $apl
例2
ある業務アプリケーションは複数サーバと通信をしながら処理をしており、通信を行うプロセスは処理内容ごとに複数実装されています。各プロセスは10分に1回必ずそれぞれで通信処理を行っているが、通信先サーバは常に稼働しているとは限らず、非稼働中の場合それを通知する以下のイベントがプロセスごとに複数通知されます。
プロセス(xxxx)は通信の接続処理に失敗しました。nodename=yyyy xxxx: 接続不可を検知したプロセス名。proc1,proc2,proc3,proc4のどれか。 yyyy:通信先システムのノード名
そこでこのイベントについては、最初のものが発生した後、同一通信先に対するものが10分以内に全プロセスから通知されれば相手先が非稼働中と判断して全イベントをひとまとめにする簡略通知を行い、10分以内に全プロセスからエラーが発生しなければ、アプリケーション側(エラー通知したプロセス)の問題の可能性があるため、それらを個々のイベントとして通知します。
編集内容
[プロシジャ名]
set ProcName UsrAplEventConcat
[タイマ値]
set Timer 600000
[条件判定項]
set CompParam 2
[必要キーワードリスト]
lappend CompList {proc1} {proc2} {proc3} {proc4}
[警告イベントテキスト]
set FirstText {Target system has the possibility not to run (%s).}
[条件一致時発行イベントテキスト]
set OutText1 {+}
[タイムアウト時発行イベントテキスト]
set OutText2 {-}
[コリレーションキーの設定]
regexp {nodename=([^ ]*)} $EventText All TargetNode set Key "AplEventConcat:$TargetNode"
補足説明
通信先ごとにこの処理を行うために、コリレーションキーにはメッセージテキストから通信先のノード名を切り出し、それを埋め込んでいます。また、最初の警告イベントにこのキーを埋め込むことで接続に失敗した通信先を識別可能にしています。
注意
SystemwalkerのバージョンレベルがV10.0L10または10.0以前より移行したユーザスクリプトにマイナス記号“-”およびプラス記号“+”をつける設定はできません。