1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TWSNMP FC/FK ポーリング判定スクリプト (JavaScript) 解説

Last updated at Posted at 2026-01-22

TWSNMP FC/FK ポーリング判定スクリプト (JavaScript) 解説

TWSNMP FK(およびFC)では、多くのポーリング種別で「Script」欄にJavaScriptを記述することで、監視結果の判定ロジックを柔軟にカスタマイズできます。
基本的な判定は「戻り値が true なら正常、false なら異常(設定したレベル)」となりますが、変数の操作や過去の値との比較など高度な処理も可能です。

TWSNMPシリーズの公式サイトは、
https://lhx98.linkclub.jp/twise.co.jp/
です。

基本的な仕組み

  • エンジン: Go言語製のJavaScriptインタプリタ Otto を使用しています。ES5相当の機能が利用可能です(ES6以降の機能は一部非対応)。
  • 判定: スクリプトの最後の評価値(戻り値)が true の場合、ポーリング状態は「正常 (normal)」となります。 false またはそれ以外の場合、ポーリング設定で指定した「レベル (Level)」の状態(注意、重要、警報など)になります。
  • エラー: スクリプト実行中にエラーが発生した場合、ポーリング状態は「不明 (unknown)」となります。

共通で利用可能な関数・変数

すべてのスクリプト対応ポーリングで利用可能な機能です。

関数

関数名 説明 使用例
setResult(key, value) ポーリング結果 (Result) に任意のキーと値を保存します。保存した値は次回のポーリングで *_last 変数として参照したり、グラフ表示やログに利用できます。 setResult("myCalc", 123);
getResult(key) 現在のポーリング結果から値を取得します。 var v = getResult("rtt");
setLevel(level) 判定結果が異常の場合のレベルを動的に変更します。引数は low, high, warn などを指定します。 setLevel("warn");

変数

  • 前回値 (*_last): 前回のポーリング結果が、キー名に _last を付けた変数として利用可能です。
    • 例: 前回の count 値は count_last で参照可能。
    • 用途: count > count_last のように前回からの増加を確認するなど。
  • interval: ポーリング間隔(秒)。速度計算などに利用できます(※一部のポーリングでは未定義の場合があります)。

ポーリング種別ごとの利用可能な変数

各ポーリングタイプで、スクリプト実行時に自動的にセットされる変数です。

1. HTTP / HTTPS (Modeにより異なる)

変数名 説明 備考
status HTTPステータス文字列 例: "200 OK"
code HTTPステータスコード (数値) 例: 200, 404
rtt 応答時間 (ナノ秒)
getBody() レスポンスボディを取得する関数 ExtractorgetBody の場合のみ
jsonpath(selector) JSONPathで値を抽出する関数 Extractorjsonpath の場合のみ
goquery(selector) HTMLから要素を抽出する関数 Extractorgoquery の場合のみ
(抽出した値) Extractor (Grok/正規表現) で定義した名前付きキャプチャ

metrics モードの場合、パースされたメトリクス値(例: requests, workers など)も変数として利用可能です。

2. SNMP

変数名 説明 備考
(MIB名) 取得したMIBの値 sysUpTime, ifInOctets など。OIDの末尾インデックスは除かれる場合がある。
sysUpTime システム稼働時間
*_Delta 前回値との差分 Modeが delta / ps の場合
*_PS 1秒あたりの増加量 Modeが ps の場合
snmpGet(oid) 任意のOIDの値を取得する関数 Modeが script の場合のみ利用可能

3. Syslog / Trap (ログ監視)

変数名 説明 備考
count 期間内に受信した該当ログの件数
(抽出した値) Extractor で定義した名前付きキャプチャ 1件ずつの判定の場合

4. NetFlow

変数名 説明 備考
bytes 合計バイト数
packets 合計パケット数
bps 平均通信速度 (bits/sec)
pps 平均パケットレート (packets/sec)
srcCount, dstCount 送信元・宛先IP数 Countモード時
flows フロー数 Statsモード時

5. Command (Cmd) / SSH

変数名 説明 備考
exitCode コマンド終了コード 0が正常、それ以外はエラーなど
getBody() 標準出力を取得する関数 ExtractorgetBody の場合
(抽出した値) Extractor (Grok) で定義した名前付きキャプチャ

6. DNS

変数名 説明 備考
rtt 名前解決にかかった時間 (ナノ秒)
count 取得できたレコード数
addr, host, mx 解決されたレコードの内容 モードによる (配列または文字列)

7. MQTT

変数名 説明 備考
topic 受信したトピック Subscribeモード時
payload 受信したメッセージ本文 Subscribeモード時
rtt 接続応答時間 Connectモード時

8. その他 (Monitor, Certificate, etc.)

  • Monitor: cpu, mem, disk, load などのシステムリソース情報。
  • TwLogEye: count, errors, warns などの集計値。
  • gNMI: data (JSON文字列), last (取得時刻)。

スクリプト記述例

例1: HTTPのステータスコードと応答時間による判定

// ステータスコードが200、かつ応答時間が1秒(1,000,000,000ナノ秒)未満なら正常
code == 200 && rtt < 1000 * 1000 * 1000;

例2: SNMPでトラフィックが増加しているか確認 (前回値との比較)

// ifInOctetsが前回より増えていれば正常
// 初回(last変数が未定義)は正常とする
if (typeof ifInOctets_last === 'undefined') {
  true;
} else {
  ifInOctets > ifInOctets_last;
}

例3: 異常時のレベルを動的に変更する

// エラー数が10以上ならHigh(重要)、1以上ならWarn(注意)、0なら正常
if (errorCount >= 10) {
  setLevel("high");
  false;
} else if (errorCount > 0) {
  setLevel("warn");
  false;
} else {
  true;
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?