19.4.3 イベント監視機能の設定
ここでは,eventmonitorモジュールを使用して,イベントを登録,削除,および受信する方法を説明します。
eventmonitorモジュールは,装置やネットワークの状態などの監視と連携して,監視対象の状態変化(イベント)を起動中のスクリプトに通知する機能をサポートします。イベント監視機能に関連する関数一覧を次の表に示します。
| 
                      機能種別  | 
                  
                      関数名  | 
                  
                      説明  | 
               
|---|---|---|
| 
                      イベント登録  | 
                  
                      regist_sysmsg  | 
                  
                      監視する運用メッセージを登録します。  | 
               
| 
                      regist_cron_timer  | 
                  
                      cronタイマを登録します。  | 
               |
| 
                      regist_interval_timer  | 
                  
                      intervalタイマを登録します。  | 
               |
| 
                      イベント削除  | 
                  
                      event_delete  | 
                  
                      登録したイベントを削除します。  | 
               
| 
                      イベント受信  | 
                  
                      event_receive  | 
                  
                      イベントが発生したときにイベントを受信します。  | 
               
- 〈この項の構成〉
 
(1) スクリプトファイルの例
(a) 運用メッセージをイベントとして監視する例
運用メッセージをイベントとして監視する,イベントの登録例を次に示します。
import sys
import extlib.eventmonitor                                                      …1
 
try:
    event_sysmsg=extlib.eventmonitor.regist_sysmsg(event_level="E7",
    message_id=0xabcd1234,message_text="(Error|error)")                         …2
except Exception as e:                                                          …3
    print('ERROR!! regist_sysmsg()',e)
    sys.exit()
 
while 1:
    dict = extlib.eventmonitor.event_receive(extlib.eventmonitor.BLOCK_ON, 0)   …4
 
    if dict['event_id']== event_sysmsg:                                         …5
        print('EVENT OCCURRED!!') | 
                  
- 
                     
モジュールをインポートします。
 - 
                     
イベントを登録します。次の条件を満たす運用メッセージの出力を監視します。
- 
                           
イベントレベルE7
 - 
                           
メッセージ識別子abcd1234
 - 
                           
メッセージテキストに文字列“Error”または“error”を含む
 
 - 
                           
 - 
                     
イベントが登録されたかどうか確認します。登録に失敗した場合,ログを出力して終了します。
 - 
                     
イベント受信関数を呼び出します。
 - 
                     
戻り値を参照して,意図した値かどうか確認します。
 
(b) cronタイマによってイベントを監視する例
cronタイマによってイベントを監視する,イベントの登録例を次に示します。
import sys
import extlib.eventmonitor                                                      …1
 
try:
    event_cron_timer = extlib.eventmonitor.regist_cron_timer('0 23 * * *')      …2
except Exception as e:                                                          …3
    print('ERROR!! regist_cron_timer ()',e)
    sys.exit()
 
while 1:
    dict = extlib.eventmonitor.event_receive(extlib.eventmonitor.BLOCK_ON, 0)   …4
 
    if dict['event_id']== event_cron_timer:                                     …5
        print('EVENT OCCURRED!!') | 
                  
- 
                     
モジュールをインポートします。
 - 
                     
毎日23時に発生するイベントを登録します。
 - 
                     
イベントが登録されたかどうか確認します。登録に失敗した場合,ログを出力して終了します。
 - 
                     
イベント受信関数を呼び出します。
 - 
                     
戻り値を参照して,意図した値かどうか確認します。
 
(c) intervalタイマによってイベントを監視する例
intervalタイマによってイベントを監視する,イベントの登録例を次に示します。
import sys
import extlib.eventmonitor                                                      …1
 
try:
    event_interval_timer = extlib.eventmonitor.regist_interval_timer(1800)      …2
except Exception as e:                                                          …3
    print('ERROR!! regist_interval_timer()',e)
    sys.exit()
 
while 1:
    dict = extlib.eventmonitor.event_receive(extlib.eventmonitor.BLOCK_ON, 0)   …4
 
    if dict['event_id']== event_interval_timer:                                 …5
        print('EVENT OCCURRED!!') | 
                  
- 
                     
モジュールをインポートします。
 - 
                     
1800秒ごとに発生するイベントを登録します。
 - 
                     
イベントが登録されたかどうか確認します。登録に失敗した場合,ログを出力して終了します。
 - 
                     
イベント受信関数を呼び出します。
 - 
                     
戻り値を参照して,意図した値かどうか確認します。
 
(d) 登録したイベントを削除する例
登録したイベントを削除する例を次に示します。
import sys
import extlib.eventmonitor                                                      …1
 
try:
    event_cron_timer = extlib.eventmonitor.regist_cron_timer('0 23 * * *')      …2
except Exception as e:                                                          …3
    print('ERROR!! regist_cron_timer ()',e)
    sys.exit()
 
try:
    result_dict = extlib.eventmonitor.event_delete(event_cron_timer)            …4
    print('EVENT DELETE!!')
except:                                                                         …5
    print('ERROR!! event_delete()') | 
                  
- 
                     
モジュールをインポートします。
 - 
                     
イベントを登録します。
 - 
                     
イベントが登録されたかどうか確認します。登録に失敗した場合,ログを出力して終了します。
 - 
                     
登録したイベントの監視イベントIDを指定して,監視を停止します。
 - 
                     
停止に失敗した場合,ログを出力します。
 
(e) イベントを受信する例
イベントを受信する例を次に示します。
import sys
import extlib.eventmonitor                                                      …1
 
try:
    event_cron_timer = extlib.eventmonitor.regist_cron_timer('0 23 * * *')      …2
except Exception as e:                                                          …3
    print('ERROR!!  event_cron_timer()',e)
    sys.exit()
 
dict = extlib.eventmonitor.event_receive(extlib.eventmonitor.BLOCK_ON , 0)      …4
 
if dict['event_id']== event_cron_timer:                                         …5
    print('EVENT OCCURRED!! ') | 
                  
- 
                     
モジュールをインポートします。
 - 
                     
イベントを登録します。
 - 
                     
イベントが登録されたかどうか確認します。登録に失敗した場合,ログを出力して終了します。
 - 
                     
イベント受信関数を呼び出します。受信タイムアウトなしのブロッキングモードで受信します。
 - 
                     
戻り値を参照して,意図した値かどうか確認します。
 
(2) 通知情報の廃棄
監視イベントの発生頻度が高い場合,イベント発生通知がスクリプトに通知される前に廃棄されることがあります。イベント発生通知の流れを次の図に示します。図中の1.および2.の通知受信キューが満杯になると,廃棄が発生します。
| 
                      | 
               
- 
                  
キューあふれ閾値は,優先度ごとに1024メッセージ
 - 
                  
キューあふれ閾値は,スクリプトごとに1024メッセージ
 
なお,廃棄の発生有無は,運用コマンドshow event manager monitorで表示されるイベント廃棄回数(discard)で確認できます。