読者です 読者をやめる 読者になる 読者になる

シェルスクリプトで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とかいじるのかな・・。