コンフィグレーションガイド Vol.1


17.4.3 イベント監視機能の設定

ここでは,eventmonitorモジュールを使用して,イベントを登録,削除,および受信する方法を説明します。

eventmonitorモジュールは,装置やネットワークの状態などの監視と連携して,監視対象の状態変化(イベント)を起動中のスクリプトに通知する機能をサポートします。イベント監視機能に関連する関数一覧を次の表に示します。

表17‒19 イベント監視機能に関連する関数一覧

機能種別

関数名

説明

イベント登録

regist_sysmsg

監視するシステムメッセージを登録します。

regist_cron_timer

cronタイマを登録します。

regist_interval_timer

intervalタイマを登録します。

イベント削除

event_delete

登録したイベントを削除します。

イベント受信

event_receive

イベントが発生したときにイベントを受信します。

〈この項の構成〉

(1) スクリプトファイルの例

(a) システムメッセージをイベントとして監視する例

システムメッセージをイベントとして監視する,イベントの登録例を次に示します。

図17‒24 スクリプト記載例1
import sys
import extlib.eventmonitor                                                      <-1
 
try:
    event_sysmsg=extlib.eventmonitor.regist_sysmsg(event_level=3,
    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!!')
  1. モジュールをインポートします。

  2. イベントを登録します。次の条件を満たすシステムメッセージの出力を監視します。

    • イベントレベルS3

    • メッセージ識別子abcd1234

    • メッセージテキストに文字列“Error”または“error”を含む

  3. イベントが登録されたかどうか確認します。登録に失敗した場合,ログを出力して終了します。

  4. イベント受信関数を呼び出します。

  5. 戻り値を参照して,意図した値かどうか確認します。

(b) cronタイマによってイベントを監視する例

cronタイマによってイベントを監視する,イベントの登録例を次に示します。

図17‒25 スクリプト記載例2
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!!')
  1. モジュールをインポートします。

  2. 毎日23時に発生するイベントを登録します。

  3. イベントが登録されたかどうか確認します。登録に失敗した場合,ログを出力して終了します。

  4. イベント受信関数を呼び出します。

  5. 戻り値を参照して,意図した値かどうか確認します。

(c) intervalタイマによってイベントを監視する例

intervalタイマによってイベントを監視する,イベントの登録例を次に示します。

図17‒26 スクリプト記載例3
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!!')
  1. モジュールをインポートします。

  2. 1800秒ごとに発生するイベントを登録します。

  3. イベントが登録されたかどうか確認します。登録に失敗した場合,ログを出力して終了します。

  4. イベント受信関数を呼び出します。

  5. 戻り値を参照して,意図した値かどうか確認します。

(d) 登録したイベントを削除する例

登録したイベントを削除する例を次に示します。

図17‒27 スクリプト記載例4
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()')
  1. モジュールをインポートします。

  2. イベントを登録します。

  3. イベントが登録されたかどうか確認します。登録に失敗した場合,ログを出力して終了します。

  4. 登録したイベントの監視イベントIDを指定して,監視を停止します。

  5. 停止に失敗した場合,ログを出力します。

(e) イベントを受信する例

イベントを受信する例を次に示します。

図17‒28 スクリプト記載例5
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!! ')
  1. モジュールをインポートします。

  2. イベントを登録します。

  3. イベントが登録されたかどうか確認します。登録に失敗した場合,ログを出力して終了します。

  4. イベント受信関数を呼び出します。受信タイムアウトなしのブロッキングモードで受信します。

  5. 戻り値を参照して,意図した値かどうか確認します。

(2) 通知情報の廃棄

監視イベントの発生頻度が高い場合,イベント発生通知がスクリプトに通知される前に廃棄されることがあります。イベント発生通知の流れを次の図に示します。図中の1.および2.の通知受信キューが満杯になると,廃棄が発生します。

図17‒29 イベント発生通知の流れ

[図データ]

  1. キューあふれ閾値は,優先度ごとに1024メッセージ

  2. キューあふれ閾値は,スクリプトごとに1024メッセージ

なお,廃棄の発生有無は,運用コマンドshow event manager monitorで表示されるイベント廃棄回数(discard)で確認できます。