Jupyter
SORACOM
SORACOMDay 18

SORACOM API + Jupyter notebookでネットワーク利用状況の分析

ど〜もみなさん、おはこんばんにちは(言ってみたかった)。SORACOMの中の人の@imai_factoryです。

SORACOM Advent Calendar 2017の12/18分の記事です。もともとはSORACOM Endorseの話もしくは時系列データの話をします、という前フリをしていたのですが、SORACOM APIを使ったアプリケーションやネットワーク利用状況の監視/可視化について書いてみたいと思います。

IoTアプリケーションには様々なユースケースがありますが回線やデバイスの数が数千や数万を超えてくるということも珍しくはありません。こうなってくると回線の利用料やエラーの発生状況などを手動でトラッキングするのは無理が出てくるのは言うまでもありません。

例えば「大量の回線の全体の利用量や、ほかと比べてずば抜けて大量の通信をしている回線を把握したい。更にSORACOM BeamやSORACOM Funnel、SORACOM Harvestなど各種サービスにおいて特に気にすべきエラーが発生していないかを把握したい」という状況を仮定しましょう。

下記はすべて、そうった要件を実現するために、Jupyter notebookを使ってSORACOMプラットフォームの利用状況を可視化したものです。

例えばまずは全体の利用量を把握するところから始めることにしましょう。下記は、あるSORACOMアカウントのすべてのSIMについて過去7日間の下り方向通信量(単位:MB)を、速度クラスごとに合計して可視化したものです。

image.png

これは、exportAirStatsというAPIを利用して実現しています。

なんとなく全体の利用量が見えるようになったので、こんどはSIMごとの通信量を可視化してみましょう。下記のグラフは、同じAPIで取得した過去7日かんのデータのうち、ダウンロード通信量Top10のSIMについて回線ID(IMSI)ごとに可視化をしたものです。

image.png

明らかに1回線だけ、他と較べて大量の通信をしているものがいますね。ただ、回線IDだけでは、どのSIMなのかが読み取りづらいですね。では、これをもう少し読みやすくするために、回線IDではなく、SIMに付けられた名前でグラフを書き直してみましょう。実はこれも先程取得した同じデータからグラフ化が可能です。

image.png

名前をそのままお見せすることができないのでモザイクを掛けていますが、今度はSIMに付与した名前毎にグラフが描画されました。こうなってくるとなんとなく「誰が何に使っているSIMだ」みたいなことが検討付けやすくなりますよね。

前述のとおり、これはexportAirStatsで取得したデータをつかっているのですが、この「名前」はSORACOMコンソールで付与しているSIMの名前によってグルーピングしているのです。

さらに、SORACOMではエラーログをAPI経由で取得することもできます。getLogsというAPIなのですが、これを使うと、SORACOM Beam、SORACOM Funnel、SORACOM Endorse、SORACOM Harvestなどのアプリケーションレイヤのサービスのエラーログを取得することができます。例えば「設定がされていないのにSORACOM Beamを使おうとしているSIMがいる」といったようなエラーです。

下記は、同APIにて取得した、過去7日分のデータを使ってエラーメッセージの種別毎に回数を数えたものです。文字が小さくて見えづらいですが「Configuration for SORACOM Harvest is not found」というエラーメッセージで、これはharvest.soracom.ioにデータが送信されてきたが、実際に当該SIMに対してSORACOM Harvestの設定がされていない、という状況を表します。

image.png

こうなってくると当然、「どのSIMでその問題が起こっているのか?」というのを確認したくなりますよね。もちろん簡単です。先程取得したデータのグルーピングを「エラーメッセージごと」から「エラーメッセージx回線IDごと」に変えてやれば以下のようにどのSIMで問題が発生しているのかがさっと可視化できます。

image.png

結果として、ある特定の2枚のSIMにおいてSORACOM Harvestの問題が多発していることがわかりました。あとはやることは簡単ですよね?そのSIMの設定を見直してやればOKです。

というように、SORACOMのAPIを利用すると、回線数が増えてきてもいろいろ便利に管理できるよというお話でした!

今回お見せしたグラフ化のためのnotebookは下記にアップロードしておきました。

https://gist.github.com/imaifactory/a0ac981598216ec1f014a4b8bb14bbda

下記のコマンドラインを、環境変数をご自分の環境のものに書き換えて起動していただければ、上記のコードをそのままみなさんの環境で実行可能です。

operatorId=YOUR_SORACOM_OPERATOR_ID authKeyId=YOUR_SORACOM_API_KEY_ID authKey=YOUR_SORACOM_API_KEY jupyter notebook

コード自体はたいしたものではありませんが、SORACOMのAPIを使った回線管理に触れるためのきっかけになれば幸いです。