こんにちは。開発部のtorigakiです。 弊社では無線LANアクセスポイントにYamaha WLXシリーズを使用しているのですが、最近社内のwifi環境が不調になることがあります。
そこで何が原因なのか探るためアクセスポイントのリソース使用状況を可視化することを試みました。
WLXシリーズにはWebUIが用意されており、CPUやメモリ使用状況などブラウザから確認することもできるのですが、このWebUI上からでは過去の状況を把握することができず、不調になったときの状況がわからないため、定期的にリソース情報を取得し、グラフ化して時系列で状況を把握することができるようにしましたので、今回はそのお話をさせていただければと思います。
リソース情報を取得する
無線アクセスポイントからリソース情報を取得する方法は色々あるかと思いますが、今回はtelnetとexpectを組み合わせて、定期的にアクセスポイントにログインして情報を収集する方法にしました。
以下は情報を収集するスクリプトの例です。 「IP」にはリソース取得対象のアクセスポイントのIPアドレスを指定します。
#!/bin/bash expect -c " set timeout 5 spawn telnet ${IP} expect Password:\ ; send \"XXXXX\n\" expect \"> \" ; send \"show environment\n\" expect \"> \" ; send \"exit\n\" " > ${IP}_log
WLXシリーズは、showコマンドにて様々な情報をとることができます。 「show environment」を実行すると、以下のような結果が得られます。
CPU: 20%(5sec) 31%(1min) 36%(5min) メモリ: 40% used ファームウェア: internal 設定ファイル: 0 起動時刻: 2019/04/11 13:33:03 +09:00 現在の時刻: 2019/04/12 16:47:14 +09:00 起動からの経過時間: 1日 03:14:11 セキュリティクラス レベル: 1, FORGET: ON, TELNET: OFF 筐体内温度(℃): 47 電源: PoE 連携状態: RT連携
上記の結果をテキストファイルに保存し、必要な情報を抜き出します。 今回の場合、CPU、メモリ、筐体温度の情報を抜き出しています。
抜き出した情報を可視化する方法
使用したツール
リソース状況を可視化するツールとして、今回はInfluxDBとGrafanaを使用しました。
ツールをインストールしたOSは「Ubuntu 18.04.2 LTS」です。
InfluxDB
InfluxDBはオープンソースの時系列データベースで、ログなどの時間を軸とした連続したデータを蓄積、検索することを得意としているデータベースです。
以下はインストール例です。 設定はデフォルトのままです。
wget https://dl.influxdata.com/influxdb/releases/influxdb_1.7.4_amd64.deb sudo dpkg -i influxdb_1.7.4_amd64.deb systemctl start influxdb
Grafana
Grafanaはデータ時系列の分析用ダッシュボードのツールです。
以下はインストール例です。 設定はデフォルトのままです。
wget https://dl.grafana.com/oss/release/grafana_6.0.2_amd64.deb sudo dpkg -i grafana_6.0.2_amd64.deb systemctl start grafana-server
InfluxDBにデータをインサートする
無線アクセスポイントから取得した情報(CPU、メモリ、筐体温度)をInfulxDBにインサートしていきます。 インサート方法はcurlコマンドを使用しました。
以下はインサートスクリプトの例です。 「TAG」に無線アクセスポイントのIPアドレス、「TIME」に情報を取得した時間をunixtimeに変換して入れています。 「DB」はInfluxDBに予め作成したDB名が入ります。
# CPU curl -o /dev/null -s -i -XPOST "http://localhost:8086/write?db=${DB}&precision=s" --data-binary "${TAG}_cpu,ip=${TAG} cpu=${CPU} ${TIME}" # MEM curl -o /dev/null -s -i -XPOST "http://localhost:8086/write?db=${DB}&precision=s" --data-binary "${TAG}_mem,ip=${TAG} mem=${MEM} ${TIME}" # Temperature curl -o /dev/null -s -i -XPOST "http://localhost:8086/write?db=${DB}&precision=s" --data-binary "${TAG}_temp,ip=${TAG} temperature=${TEMP} ${TIME}"
上記を実行すると、InfluxDBには以下のようにインサートされます。
# テーブル一覧 > show measurements; name: measurements name ---- 192.168.11.101_cpu 192.168.11.101_mem 192.168.11.101_temp # データ内容 > select * from "192.168.11.101_cpu" limit 10; name: 192.168.11.101_cpu time cpu ip ---- --- -- 1553585400000000000 57 192.168.11.101 1553585700000000000 52 192.168.11.101 1553586000000000000 60 192.168.11.101 1553586300000000000 52 192.168.11.101 1553586600000000000 54 192.168.11.101 1553586900000000000 61 192.168.11.101 1553587200000000000 54 192.168.11.101 1553587500000000000 68 192.168.11.101 1553587800000000000 61 192.168.11.101 1553588100000000000 53 192.168.11.101 >
1分ごとに取得しているので、DBには1分ごとの情報がインサートされていきます。 各IPアドレスごとに、CPU、MEM、TEMPのテーブルが作成されデータがインサートされていきます。
Grafnaで可視化する
Grafanaにブラウザでアクセスし、グラフを作成します。
InfluxDBからデータを取得するクエリですが、以下のように指定します。 以下はCPUステータスを取得する場合の例です。
select cpu from /.*_cpu.*/ where $timeFilter order by asc
上記のように、ワイルドカードを指定することにより、IPアドレスごとに作成したテーブル情報を一括で取得することが可能です。 このクエリを実行できるようにするために、InfluxDBにはテーブル名にIPアドレスを入れて、CPUステータスだけを入れるテーブル、メモリステータスだけを入れるテーブルという感じでインサートしていくことがポイントとなります。
実際にGrafanaで作成したグラフが以下になります。
munin等の場合、1つグラフに1の機器のグラフしか作成できませんが、Grafanaでは複数機器の値を一括で取得すると、1つのグラフに複数機器の状態を重ねて表示できるところができるので便利です。
まとめ
今回は無線LANアクセスポイントのリソース状況を可視化するあたり工夫した点について紹介させていただきました。 少しでも無線LANアクセスポイントの運用されている方のお役に立てれば幸いです。
弊社では引き続きエンジニア・デザイナーを募集中ですので、ご興味のある方は下からご応募いただければと思います。