機能説明
発生した複数のイベントに対し、一定数ごとに通知をして、不要なイベントを破棄します。
サンプルスクリプトファイル
OS種別 | 格納場所とファイル名 |
---|---|
Windows | Systemwalkerインストールディレクトリ\mpwalker.dm\mpsc\sample\scTopSendCor.swt |
Solaris | /etc/opt/FJSVssc/sample/scTopSendCor.swt |
Linux | /etc/opt/FJSVssc/sample/scTopSendCor.swt |
HP-UX | 提供なし |
AIX | 提供なし |
編集可能な項目
プロシジャ名
プロシジャ名の規約に従い編集します。
必ずプロシジャ名の先頭文字は“Usr”にします。
タイマ値
動作定義パート[単独定義型]の規約に従い編集します。
イベント発生数のカウントを継続する時間を定義します。カウント数が“まとめ個数”に達する前にここで指定した時間が経過すると、カウンタをリセットします。タイマ値の経過時間の起点は、1つ目のイベントの発生時、または1つ前のイベント発生時のどちらかを選択できます。
まとめ個数
動作定義パート[単独定義型]の規約に従い編集します。
イベントの通知をひとまとめにする個数を定義します。また、1回目のイベントだけを通知し、その後のイベントを破棄し続ける定義も可能です。
発行イベントテキスト
動作定義パート[単独定義型]の規約に従い編集します。
イベント発生数が“まとめ個数”で定義した個数を超えたときに発行するイベントのテキストを定義します。テキスト中にはコリレーションキーとカウント中のイベントの総数を埋め込むことができます。
本スクリプトは、元のイベントをすべて破棄して、通知するイベントを新規に発行します。ただし、テキストにマイナス記号だけを定義した場合、イベントを発行させるのではなく元のイベントをそのまま通知します。
コリレーションキーの設定
可変情報操作処理の規約に従い編集します。
イベント発生数のカウントはここで作成したキー単位に行います。1つのスクリプトで複数の動作(ノードごとにコリレーションをするなど) を実現させたい場合は、以下のイベント情報がキーに利用できます。
ノード名
イベントテキスト
注意事項
コリレーションの結果として通知されるイベントの発生元システムは、コリレーションスクリプトを動作させているシステムの名前になります。ただし、発行イベントテキストとしてマイナス記号“"-"”のみの指定を行った場合は、通知を行うタイミングで受信した元のイベントがそのまま使用されるため、発生元システムも元イベントのままになります。
コリレーションキーの設定処理内でreturnコマンドおよびexitコマンドは記述しないでください。
コリレーションキーの設定処理時間は、そのままSystemwalkerのイベント通知性能に影響を与えます。インテリジェントサービス機能はイベントの滞留を防ぐために、平均の処理時間が3秒を超えるスクリプトはタイムアウトエラーとするため、冗長な処理は極力行わないでください。なお、処理時間の計測は“メッセージ監視アクション型スクリプト動作テスト”で行えます。運用時にはシステム負荷などより処理が遅くなることがあるため、テスト時の処理時間の目安としては、0.5秒以内になるようしてください。
発行イベントテキストにマイナス記号以外を指定した場合は、発行イベントテキストで定義したイベントが、そのスクリプトの呼び出しをしている[イベント監視の条件定義]に再度該当しないように条件定義をしてください。発行したイベントが自身の条件定義に該当すると発行したイベントが正しく通知されません。
クラスタ運用をしている場合
クラスタ運用しているサーバ上で、先頭通知コリレーションを動作させた場合、切り替えの前後で、それまでに発生した処理対象イベントの数などの情報は引き継がれず、コリレーション処理全体がすべてリセットされます。
使用例
例1
1分以内に発生した特定のイベント(アプリケーション名がテキスト中に“AplName=xxxx”の形式で入っている)で同一ノード、同一アプリケーションからのものは10個を1つにまとめて通知します。
編集内容
[プロシジャ名]
set ProcName UsrTopSendCor
[タイマ値]
set Timer 60000
[まとめ個数]
set CorNum 10
[発行イベントテキスト]
set OutText {Application error occurred}
[コリレーションキーの設定]
set apl "" set rc [regexp {AplName=([^ ]*)} $EventText All apl] set Key "$NodeName-$apl"
例2
ある業務アプリケーションは複数サーバと通信をしながら処理をしており、通信を行うプロセスは処理内容ごとに複数実装されています。各プロセスは、必要に応じてそれぞれで通信処理を行っているため通信先サーバでエラーが発生するとエラー発生サーバとの通信に失敗したことを通知する以下のイベントがプロセスごとに複数通知されます。
プロセス(xxxx)で通信エラーが発生しました。nodename=yyyy xxxx: 通信エラーを検知したプロセス名 yyyy:エラーの発生した通信先システムのノード名
そこでこのイベントについては、単発で発生した場合は通知を行うが、同一通信先に対するものが30秒間隔以内に複数通知された場合は、プロセス名が異なっていても破棄するようにします。
編集内容
[プロシジャ名]
set ProcName UsrAplEventSup
[タイマ値]
set Timer 3000-
[まとめ個数]
set CorNum "-"
[発行イベントテキスト]
set OutText {-}
[コリレーションキーの設定]
regexp {nodeName=([^ ]*)} $EventText All TargetNode set Key "UsrAplEventSup:$TargetNode"
補足説明
通信先ごとに上記の処理をするために、コリレーションキーにはメッセージテキストから通信先のノード名を切り出し、それを埋め込んでいます。
注意
SystemwalkerのバージョンレベルがV10.0L10または10.0以前より移行したユーザスクリプトにマイナス記号“-”をつける設定はできません。