こちらの記事 では、ヘルスモニタのセンサー値を ^%SYSMONMGR ユーティリティを使用して変更する方法をご紹介しました。
今回は、ヘルスモニターセンサー値を コマンド(プログラム)で変更する方法をご紹介します。
ヘルスモニタは、CPUUsage(CPU使用率)、DBLatency(DBからのランダム読取に要する時間)、DiskPercentFull(DBのディスク使用率)などの該当しきい値を超えた場合に、通知を生成します。
※ヘルスモニタのセンサー値(閾値)について
センサーのしきい値を超えると、IRISのシステムログ(messages.log)に以下のようなメッセージが記録されます。
[SYSTEM MONITOR] CPUusage Warning: CPUusage = 81 ( Warnvalue is 75).
[SYSTEM MONITOR] DBLatency(c:\xxx\) Warning: DBLatency = 1092.228 ( Warnvalue is 1000).
[SYSTEM MONITOR] DiskPercentFull(/hs-connect/sys/mgr/) Alert: DiskPercentFull = 99.00, 99.02, 99.03 (Max value is 99).
[SYSTEM MONITOR] DBLatency(c:\xxx\) Warning: DBLatency = 1092.228 ( Warnvalue is 1000).
[SYSTEM MONITOR] DiskPercentFull(/hs-connect/sys/mgr/) Alert: DiskPercentFull = 99.00, 99.02, 99.03 (Max value is 99).
センサー値のしきい値は、センサー名をキーにして %SYS ネームスペースで変更することが可能です。
※変更には、システムモニタの停止が必要です。
以下の例は、DiskPercentFullのセンサー値を 95% -> 80% でWaning (1)、99% -> 90% でAlert (2) に変更しています。
zn "%SYS"
set sc = ##class(%SYS.Monitor).Stop() ;; システムモニタを停止
set SensorObj=##class(SYS.Monitor.Health.SensorObject).%OpenId("DiskPercentFull")
write SensorObj.WarnValue_","_SensorObj.AlertValue ;; 現在の値 --> 95,99
set SensorObj.WarnValue = 80 ;; 新しい値
set SensorObj.AlertValue = 90 ;; 新しい値
set sc = SensorObj.%Save()
set sc = ##class(%SYS.Monitor).Start() ;; システムモニタを開始
ObjectScriptObjectScript
センサー名を一覧で見たい場合は、以下のようにして確認できます。
zn "%SYS"
set oSensors=##class(SYS.Monitor.Health.Control).%New()
do oSensors.LoadSensors()
zwrite oSensors
ObjectScriptObjectScript
実際に設定されている AlertValue, WarnValue を見たいときは以下のようにします。
zn "%SYS"
Set rset = ##class(%ResultSet).%New("SYS.Monitor.Health.SensorObject:SensorsMaxVal")
Set sc = rset.Execute()
while rset.Next() { write rset.%GetData(1)_", "_rset.%GetData(2)_", "_rset.%GetData(3),! }
;; AlertValue が設定されているセンサーのみリスト
;; SensorsMaxVal : SELECT Sensor,AlertValue,WarnValue FROM SensorObject WHERE AlertValue <> 0
ObjectScriptObjectScript