astamuse Lab

astamuse Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。

無線LANアクセスポイントのリソース状況を可視化した話

こんにちは。開発部の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、メモリ、筐体温度の情報を抜き出しています。

抜き出した情報を可視化する方法

使用したツール

リソース状況を可視化するツールとして、今回はInfluxDBGrafanaを使用しました。

ツールをインストールした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で作成したグラフが以下になります。

f:id:astamuse:20190415124459p:plain

munin等の場合、1つグラフに1の機器のグラフしか作成できませんが、Grafanaでは複数機器の値を一括で取得すると、1つのグラフに複数機器の状態を重ねて表示できるところができるので便利です。

まとめ

今回は無線LANアクセスポイントのリソース状況を可視化するあたり工夫した点について紹介させていただきました。 少しでも無線LANアクセスポイントの運用されている方のお役に立てれば幸いです。

弊社では引き続きエンジニア・デザイナーを募集中ですので、ご興味のある方は下からご応募いただければと思います。

Copyright © astamuse company, ltd. all rights reserved.