印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux Aterm WD701CV のリンクアップ速度を Zabbix で表示する

hi-ho ADSL で使っているモデム Aterm WD701CV のリンクアップ速度を Zabbix で表示する。

■ ■ ■

自宅の ADSL 回線として,昨年から hi-ho(ハイホー) を使っている (nlog(n): 自宅 ADSL のプロバイダ乗り換え手続き (Nexyz.BB → hi-ho))。ADSL 12M 用に送られてきたモデムは NEC Aterm WD701CV であった (nlog(n): hi-ho ADSL のモデムは Aterm WD701CV)。

今回は,この ADSL モデムのリンクアップ速度を Zabbix グラフで表示する。

動作環境

NEC Aterm WD701CV, Vine Linux 6.3, w3m 0.5.3, Zabbix 2.4.8 である。Aterm は telnet でもアクセスが可能なので,expect を使うことも検討したが,応答から数値を抽出するのは簡単ではないので却下した。Telnet でのアクセスについて解析してくれている方がいる (telnet in WBR75H - Tatsuyoshi tech diary)。

実装方法

モデムからの数値の取得 (w3m を使う方法)

実装は,w3m でモデムの情報ページを表示し,数値を抽出してログ出力,Zabbix でこのログの最新行を読み取ることにする。

Aterm のリンクアップ速度については,以前 Aterm WD734GV を対象として MRTG でグラフ化したことがある (nlog(n): Aterm WD734GV のリンクアップ速度を MRTG で表示する)。基本的には同じだが,出力された文字列をよく見ると,数値の後ろに全角の空白文字が入っていることに気がついた。今回は正確を期すため,これを tr コマンドで取り除くことにする。

PASSWD には自分で決めたパスワードを使い,次のコマンドで出力されるかを確認する。

$ w3m -dump http://admin:your_password@192.168.0.1/mainte_info.html | grep kbps | gawk '{print $2, $3}' | tr -cd '[:digit:] \n'

tr の -cd オプションは,「後ろに続く文字列以外を取り除く」であるから,残す文字列だけを記述する。Aterm からの応答は,文字コード Shift_JIS で帰ってくるが,この指定をしておけば文字コードが何であってもいいし,Linux 側の文字コードも気にする必要がないという利点がある。'[:digit:] \n' を指定することで,数字,半角スペース,改行「以外」の文字を取り除いている。

確認できたら,ログ出力用に例えば次のようなシェルスクリプトを書く。ファイル名は aterm.sh としておき,ディレクトリ /path/to/aterm に保存しておく。プロセス番号と時刻表示は Zabbix 風にしたが,これでなくてもよい (nlog(n): Freetel の通信量を Zabbix 2.4 でグラフ化)。

#!/bin/sh
USER=admin
PASSWD=your_password
echo "$$:" | tr -d '\n'
date +"%Y%m%d:%H%M%S.%3N" | tr '\n' ' '
w3m -dump http://${USER}:${PASSWD}@192.168.0.1/mainte_info.html | grep kbps | gawk '{print $2, $3}' | tr -cd '[:digit:] \n'

ログを1行にするために,echo や date の出力の最後の改行を tr で除去している。このスクリプトも動作確認をする。

$ sh aterm.sh
31214:20161012:221952.157 6240 928

スクリプトに実行許可を与えるかどうかはお好みで。5分毎に自動実行させるために crontab に登録する。

*/5 * * * * cd /path/to/aterm && sh aterm.sh >> aterm.log

シェルスクリプトの出力を aterm.log に追記している。

Zabbix Agentd の設定

Zabbix agentd の設定は,/usr/local/etc/zabbix_agentd.conf に次を追加する。

UnsafeUserParameters=1
UserParameter=ADSL-hi-ho.DownStream,cat /path/to/aterm/aterm.log | tail -1 | gawk '{print $2}'
UserParameter=ADSL-hi-ho.UpStream,cat /path/to/aterm/aterm.log | tail -1 | gawk '{print $3}'

UnsafeUserParameters は,すでに設定済みであれば不要である。

モデムからの数値の取得 (wget を使う方法)

上では w3m を使ったが,wget を使って取得する方法もある。ただし,上り下りの速度を同時に取得できないので,2回モデムにアクセスする必要がある。wget でアクセスしたときの応答は次のようになる。

$ wget -O - -o /dev/null --http-user=${USER} --http-passwd=${PASSWD} http://192.168.0.1/mainte_info.html | grep -A 2 'msgShow(event,4)' | nkf -w
    <TD><LABEL onMouseOver=msgShow(event,4) onMouseOut=msgHide()>回線速度[リンク速度(kbps)]</LABEL></TD>
    <TD>6240 </TD>
    <TD>928 </TD>

この場合のシェルスクリプト aterm.sh は次のようになる。

#!/bin/sh
USER=admin
PASSWD=your_password
echo "$$:" | tr -d '\n'
date +"%Y%m%d:%H%M%S.%3N" | tr '\n' ' '
wget -O - -o /dev/null --http-user=${USER} --http-passwd=${PASSWD} http://192.168.0.1/mainte_info.html | grep -A 1 'msgShow(event,4)' | tail -n 1 | sed 's/[^0-9]*\([0-9]*\)[^0-9]*/\1/' | tr '\n' ' '
wget -O - -o /dev/null --http-user=${USER} --http-passwd=${PASSWD} http://192.168.0.1/mainte_info.html | grep -A 2 'msgShow(event,4)' | tail -n 1 | sed 's/[^0-9]*\([0-9]*\)[^0-9]*/\1/'

やり方は Aterm のグローバル IP アドレスを取得する方法 (sedを使ったテキスト書き換え処理を覚えよう (番外編) - ttt) と同じである。

Zabbix Server の設定

Zabbix Server では,Web インターフェイスで Create item し,下り速度用にアイテムを登録する。

  • Name: ADSL hi-ho (down stream connection speed)
  • Type: Zabbix agent
  • Key: ADSL-hi-ho.DownStream
  • Host interface: 127.0.0.1:10050
  • Type of information: Numeric (unsigned)
  • Data type: Decimal
  • Units: bps
  • Use custom multiplier: 1000
  • Update interval (in sec): 30
  • Store value: As is
  • Show value: As is

取得した数値は kdps なので,単位を bps にして値を 1000 倍にしておく。こうしておけば,数値が 1000 を超えていても Kkbps のように変態にはならずに Mbps と表示される。

上り速度用のアイテムも同様に登録して完了である。

まとめ

Aterm WD701CV から回線速度を取得し,Zabbix でグラフ化した。

現在12Mbps の回線だが,安定化のために帯域調整したので約 6 Mbps となっている (nlog(n): hi-ho の ADSL 回線を帯域調整)。それがよく分かるようになってしまった。もう少し早いと嬉しいが,今のところ問題ない。

Posted by n at 2016-10-12 22:30 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?