SNMP非対応の一般のご家庭用ルーターをZabbixで可視化した話

#SNMP非対応の御家庭向け機器を可視化したい
逸般のご家庭ではSNMPに対応したルーターを使う事が多いとおもいますが、
残念ながらわが家で利用しているASUSのWiFiルーターRT-AC87UはSNMPに対応していません。

でもやっぱりZabbixマスターとしては、ネットワーク機器は可視化したいですよね！

幸いな事にASUS RT-AC87U はSSHログインに対応しています。
そして、起動logを見る限りBusyboxで動作しています。
となれば、使うしか無いじゃないですか！　ZabbixのSSHエージェントを！

ということで、Zabbix ssh エージェントでネットワーク機器のリソース情報を可視化した方法をお伝えします。

#SSHエージェント
ZabixにはSSHエージェントという機能があります。
Agentが導入できないSNMPにも対応していないというような機器に対して、SSHで実際にログインをして、指定されたコマンドの結果を取得してくる機能がSSHエージェントの役割です。
![SSHエージェント設定画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/33df3cb6-9e1b-8a86-6eb6-c8228cd9fa58.png)

## 設定項目
アイテム名:任意
アイテムタイプ:SSHエージェント
アイテムキー:ssh.run[任意の一意文字列]
認証方式:パスワード認証か公開鍵認証かを選択
ユーザー名:ssh ユーザー名
パスワード:パスワード認証方式の場合に入力
秘密鍵ファイル:公開鍵認証方式の場合にzabbix_server.confのSSHKeyLocation= に指定されたディレクトリ内の秘密鍵ファイル名を入力
公開鍵ファイル:公開鍵認証方式の場合にzabbix_server.confのSSHKeyLocation= に指定されたディレクトリ内の公開鍵ファイル名を入力
パスフレーズ:秘密鍵にパスフレーズが設定されている場合に入力
実行するスクリプト:ログイン後に実行するコマンドを入力します。

##実際の設定
今回はRT-AC87Uに合わせてパスワード方式を選択しテンプレートを公開しても良いように、ID/PWは直接入力せずに、テンプレートマクロとして設定を行いました。
![実際の設定画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/aefc15a9-dafe-2d5a-0e14-d302d5d086c9.png)
スクリプトは10秒毎にtopコマンドを実行し、その結果をテキスト形式で取得しています。
今回はこのテキスト形式で取得してきているのが肝だったりします。

#値の前処理と依存アイテム
SSHコマンドは対象に対象に対してログインを行うためあまり頻繁に実施したくはありません。
そこで、今回の監視では10秒毎に1回ログインをしてTOPコマンドの結果を取得しそのデータをパースして各種データを可視化するようにしています。
これが依存アイテムの役割になります。

##値の前処理
TOPコマンドでは以下のような結果が返ってきます。
![TOPコマンド結果![2020-11-30_15h31_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/5069cb09-e6a3-4c3d-9d15-dcb40913113c.png)
](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/98fb6d0b-1b8b-f908-6cc3-5af60ba42306.png)


このままでは値を取り出しにくいので値の前処理でCPU使用率の行だけを取り出しています。
Zabbix 3.4 以降では値の前処理として正規表現が利用できるようになっています。
このためわざわざawk等でスクリプトのワンライナーを書かなくても、Zabbix上で簡単に値を取り出す事ができるようになりました。
![前処理正規表現](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/38ac6cc0-2612-d79d-43ab-900ba348ee24.png)
正規表現で`CPU:.*` を指定してCPU使用率の行だけを取り出します。
![正規表現結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/7500998e-4df9-2711-2763-d0efaed912ca.png)
値の前処理でTOPコマンドの結果からCPU使用率のデータだけを取り出すことができました。

そして、このTOPコマンドの結果は依存アイテムの処理に利用するだけですので、
ヒストリの保存期間を`ヒストリを保存しない`に設定しています。
これにより中間の文字列データをDBに保存しないため、無駄な保存容量の消費を避ける事ができます。
![ヒストリの保存期間、保存しない](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/43cd9ab5-adf5-4fa2-ffd5-2abfddf82b06.png)

##依存アイテム
取得してきた別のアイテムの値をパースして個別のアイテムとして保存する機能を**依存アイテム**といいます。
先ほどのTOPコマンドを結果を取得していくるSSHエージェントアイテムをマスターアイテムとして、そこからidleやsystem など個別のCPU使用率を取得するアイテムを依存アイテムとして作成します。
![依存アイテム設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/e221b960-e3f6-693e-ec67-bf0ea9a7971f.png)

###設定項目
アイテム名:任意
アイテムタイプ:依存アイテム
アイテムキー:任意の文字列
マスターアイテム:既存のアイテムを選択します。

###値の前処理
マスターアイテムを選択するだけでは、同じ内容をコピーしてデータ型や単位を変えるだけになってしまいますので、値をパースするためにここでも値の前処理を設定します。
複雑な正規表現を書ける人であれば1つの正規表現にまとめる事も可能かもしれませんが、
Zabbixの値の前処理では処理を多段で実行することができるため1つ1つは単純な処理としてそれを繰り返すことで、複雑化させずに設定をシンプルにすることができます。
![値をパースする正規表現](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/196b9522-c197-3659-9072-d0057e88b32a.png)
この正規表現では1つめの処理で`idle`の文字列を含む値をパースし
2つめの正規表現で数値だけを取り出す処理を行っています。
![値の前処理テスト結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/03c6b450-c26b-7c80-4e9f-8c07cca4b5a1.png)

#結果
1つのマスターアイテムから複数の依存アイテムを作成することができるので、TOPコマンドの結果から7項目のCPU使用率アイテムを生成することができました。
![最新の値](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/8832dd1d-accc-0c5e-2476-98eb4c22df89.png)

値さえ取得できればあとはAgentによるサーバー監視やSNMPによる機器監視と同じなので
CPU使用率やCPUとPing性能の複合グラフを作成して性能を可視化することができるようになります。

![ASUS-CPU使用率グラフ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/e9df31db-0a99-79b5-3540-683dd017bc66.png)
![CPUとPingTimeグラフ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102020/7088100c-ea7d-774c-0e59-f4d6a7713971.png)

#まとめ
SSHエージェントと依存アイテム、値の前処理を組み合わせることでSNMPに対応していない一般の御家庭向けWiFiルーターでもルーター負荷を可視化することができるようになりました。

インターネットがなんとなく遅いなというときに実は帯域の問題ではなくルーターのCPUがいっぱいになりパケ詰まりを起こしているなどを判断する事ができるようになります。
これで回線契約を見直す前にルーターを新しくしようという判断ができるようになります。

適切なサービスや製品を選ぶためにも自宅Zabbixは有効ですね。

ASUSルーターをご利用の方はSampleとしてこのテンプレートをご利用いただけます。
https://share.zabbix.com/network_devices/asus-rt-ac87u