シェルスクリプトでYAMAHAルータ RTX系のNAT変換セッショ数を取得

概要

YAMAHAルータ RTX系のNAT変換セッショ値を
Linuxサーバからcronでシェルスクリプト回して5分ごとの値を取得する。

シェルスクリプトの内容

・expectコマンド(対話型)を使ってルータにアクセスし、必要情報を取得
・取得したテキストを加工して、セッション値、日付等を取り出し。

準備

・expectコマンドのインストール
 yum install expect

・ルータ内のコマンド
 NATの動作状態確認
 show nat descriptor address all
 
 ルータ環境確認
 show enviroment

サンプル

※cronで回すので、シェルは絶対パスで書く。

ルータにアクセスして必要情報を取得するシェル(rtxnat.sh)

参考:
expectコマンドの使い方 – No:158 – Linuxで自宅サーバ構築(新森からの雑記)

#!/bin/sh

#----config
RTXIP=ルータIP
PASS=ルータパスワード

#----command
EXPECT=/usr/bin/expect


#----EXEC
${EXPECT} -c"
spawn telnet ${RTXIP}
expect \"Password:\"
send \"${PASS}\r\"
expect \">\"
send \"show nat descriptor address all\r\"
expect \">\"
send \"show environment\r\"
expect \">\"
send \"exit\r\"
close
"
テキスト加工し、セッション値、日付等を取得するシェル(rtxnat_edit.sh)

参考:
sed コマンド | コマンドの使い方(Linux) | hydroculのメモ
正規表現は出力されるデータに併せて変更してください。
 汎用的に記載できず、力不足です。

#!/bin/sh

#----config
RTXSHE=/home/user/rtxnat.sh
RTXTXT=/home/user/rtxnat_data.txt
NEWTXT=/home/user/rtxnat_session.txt

#----command
SEDEXE=/bin/sed

#----EXEC
${RTXSHE} > ${RTXTXT}

${SEDEXE} -n -e 's/.*\(2016[0-9\/]\{6\}\)\s\([0-9:]\{8\}\).*/\1\t\2/gp' ${RTXTXT} |tr '\n' '\t'  >> ${NEWTXT}
${SEDEXE} -n -e 's/^.*44096-49151 *\([0-9]*\).*/\1/gp' ${RTXTXT} >> ${NEWTXT}
cronでまわす

5分おきにプログラムの実行

*/5 * * * * /home/user/rtxnat_session.sh > /dev/null 2>&1

参考:
crontabの書き方 | server-memo.net
※クローンの標準・標準エラーを出力する(デバック)
 シェル > output.txt 2> output.txt
 標準出力:output.txt、標準エラー出力:output.txt
※ リダイレクト、ファイル・ディスクリプタについて
[Bash]標準出力・標準エラー出力の全て(1>&2とか)まとめ | Coffee Breakにプログラミング備忘録

出力結果(例:rtxnat_session.txt)
2016/01/25	07:44:55	583
2016/01/25	07:49:54	579
2016/01/25	07:54:55	579
・・・

今後

・シェル2つにわけっちゃったけど、1つにまとめてもいいかな。
・グラフにするのはテキストからExcellでグラフ作成してますが・・。
・Zabbixのグラフに反映させたいな・・。ZabbixのDBとかいじるのかな・・。