NSD-G1000Tのトラフィックを監視する

スポンサーリンク

最近NUROに回線を変えました。そんで、NSD-G1000TのWAN側のトラフィックをzabbixとかでグラフ化したいなと思ったので、やったことをメモします

コンシューマ向けのルータのトラフィックなんて監視できるの?

普通は、コンシューマ向けのルータのトラフィックなんて取得できないので、「監視したいけどできるわけないよなぁ」となるわけですが、Webの設定画面を見てみると面白そうな項目がありました。

そうです。今までに転送した量(byte)が見れるわけです。

こいつを使ってうまいことグラフ化できないかなとググっていたら、先人がいました。

GitHub - symysak/Get-traffic-from-NSD-G1000T: NSD-G1000TからTraffic情報を取得するプログラム
NSD-G1000TからTraffic情報を取得するプログラム. Contribute to symysak/Get-traffic-from-NSD-G1000T development by creating an account on GitHub.

先人様のプログラムを使ってzabbixでグラフ化

zabbixの設定

zabbixの監視対象のホストで作業します。今回は、面倒くさいのでzabbix serverをインストールしたときに付いてくるagentに設定します。

wget https://raw.githubusercontent.com/symysak/Get-traffic-from-NSD-G1000T/master/get-bytes.py

vi /etc/zabbix/zabbix_agentd.conf

#こいつを追加します
UserParameter=NURO,python /root/get-bytes.py

:wq

systemctl restart zabbix-agent

今回は依存アイテムを使ってうまいことしようと思います。

まず、出力を取ってくるために下記のアイテムを追加します、タグと保存前処理は不要です。

次に、受信のアイテムを追加します

少し見にくいですが、JSONPathの部分は$.rxと書いています。

最後に、送信のアイテムを追加します。

少し見にくいですが、JSONPathの部分は$.txと書いています。

コードの変更

readmeを見るとわかるんですが、値の出力形式が<受信>,<送信>になってます

これをzabbixに取り込むのは少し面倒なので、jsonで出力するように変更します。

84行目~96行目を抜粋しています

"""
GET bytes from API
"""
APIURL = "http://" + ip + "/api/support/wan&csrf_token=" + csrf_data

APIreq = request.Request(APIURL,headers=cookie_header)
with request.urlopen(APIreq) as APIres:
    APIresults = json.load(APIres)

received = APIresults["ipv4_recvd_bytes"] + APIresults["ipv6_recvd_bytes"]
transmitted = APIresults["ipv4_trans_bytes"] + APIresults["ipv6_trans_bytes"]

#以下の部分をコメントアウトして、変更します
#print(str(received) + "," + str(transmitted))
out_data = '{"rx": "' + str(received) + '", "tx": "' + str(transmitted) + '"}'
print(out_data)

最後に、コードの最初の方にあるpassword_plain = ""にパスワードを入力して終わりです。

あ、pythonのライブラリは事前にインストールしておいてください

実行してみます

いい感じですね。

これで、値がbpsで取れていると思うので、あとは適当にグラフ化したら完成です。

最後に

grafanaとかでグラフを作れば割とよさげな見た目になりました

https://github.com/symysak/Get-traffic-from-NSD-G1000T
作者様、ありがとうございました。

コメント

タイトルとURLをコピーしました