
定期的にルーターの状態を監視し、異常を検出した場合にメールで通知するLuaスクリプトです。
以下の状態毎に閾値を指定し、閾値を超えた場合に異常が発生したと見なしてメールを送ります。
- CPU使用率
- メモリ使用率
- 筐体内温度(※)
- PPインタフェース回線使用率(送信負荷、受信負荷)
- IPマスカレードで使用中のポート数
(※) 筐体内温度の計測に対応した機種を使用する場合だけ監視を行います。
RTX1200の設定例
| LANの インタフェースの設定 (LAN1ポートを使用) |
ip lan1 address 192.168.0.1/24 |
|---|---|
| WANの インタフェースの設定 (LAN2ポートを使用) |
pp select 1 |
| NATの設定 |
nat descriptor type 1 masquerade |
| DHCPの設定 |
dhcp service server |
| DNSの設定 |
dns server (ISPより指定されたDNSサーバーのIPアドレス) |
| フィルタの設定 |
ip filter source-route on |
| Luaスクリプトのスケジュール設定 |
schedule at 1 startup * lua (Luaスクリプトファイル名) |
Luaスクリプト例
| 設定値 |
-- 監視間隔 (1-864000 秒) -- CPU使用率を監視する単位時間("5sec", "1min" または "5min") -- 監視する相手先情報番号(1 - 30) -- 使用状況を監視するIPマスカレードのNATディスクリプタ番号(1 - 2147483647) -- 各状態の閾値 -- 連続で閾値を超えたら異常と判断する回数、または正常な状態に復帰したと判断する回数(1, 2 ..) -- 正常な状態に復帰した場合にもメールを送るか否か(送る:true / 送らない:false) -- メールの設定 -- メールの送信に失敗した時に出力する SYSLOG のレベル(info, debug, notice) |
|---|---|
| 指定した単位時間のCPU使用率を取得するための検索文字列を設定する関数 |
function set_cpu_ptn(key) if (key == "5sec") or (key == "1min") or (key == "5min") then return nil |
| ルーターのハードウェアリソースの使用状況を取得する関数 |
function rt_res_status(t) return rtn, str |
| PPインタフェースの回線負荷率を求める関数 |
function pp_load_info(num) rtn, str = rt.command(cmd) if (t[1]) then return rtn, rcv, snd, str |
| IPマスカレード使用ポート数を返す関数 |
function natmsq_use_status(id) return rtn, num, str |
| 各状態の数値が閾値を超えた時、または正常に復帰した時にメッセージを返す関数 |
function make_msg(t, val, th, down) if (val) then return str |
| 閾値を超えた(または下回った)連続回数をカウントする関数 |
function count_proc(t, val, th) if (val > th) then return rtn end |
| 現在の日時を取得する関数 |
function time_stamp() t = os.date("*t") |
| メインルーチン |
-- ハードウェアリソース情報テーブル local rtn, str, nat_use res_tbl.cpu.ptn = set_cpu_ptn(cpu_time) while (true) do -- CPU使用率, メモリ使用率 (,筐体内温度 RTX1200のみ) -- PPインタフェース 回線負荷率 -- IPマスカレード 使用ポート数 if (mail_tbl.text:len() > 0) then rt.sleep(idle_time) |