投稿日

【Ask SA!】SORACOM の各種サービスの利用状況をダッシュボード化する

こんにちは。ソリューションアーキテクトの今井/factory です。ソラコムのソリューションアーキテクトおよびプロフェッショナルサービスコンサルタントがSORACOM を活用する技術情報をお届けするAsk SA シリーズの投稿です。

はじめに

SORACOM は SORACOM Air と呼ばれるセルラー通信を始めとする無線通信サービスに始まり、通信ペイロードの暗号化、クラウドとの安全な接続、データのストレージや可視化など IoT システムを実現する際に手助けとなる多岐に渡るサービスを提供しています。また SORACOM の大きな特徴のひとつとして、すべてのサービスが API で管理可能になっているということが挙げられます。

極端な話をすると SIM の購入からアクティベート、解約といった一連のライフサイクル管理を API を利用することによりプログラムから実行可能ということです。また、システムが成長してきて、管理するデバイスの台数が増えてきても SIM グループに対して一括したオペレーションを行ったり、そのグループに所属する SIM のトラフィック利用状況の合計値を算出したりであったり、予め設定した有効期限が切れたSIMを自動的に休止させつつ社内システムに情報を通知するといったような、様々なインテグレーションが可能です。ご存知の方もいらっしゃるかと思いますが SORACOM ユーザーコンソールもAPIを使って実装されたひとつのアプリケーションであり API 利用事例のひとつなのです。

SORACOM ユーザーコンソール

この記事では API を使った代表的なユースケースのひとつである SIM の管理を実現するためのひとつの方法をご案内していきたいと思います。

SIMを管理する?より具体的には何がしたい?

SORACOM ユーザーコンソールは SORACOM のサービスを1回線からお使いいただけるように設計されています。そのため、例えば多数の回線をお持ちの方が「“オンライン” となっている回線数をサマリーとして知りたい」といった、業務に特化した情報を表示したい場合にAPIの出番となるわけです。今回はそういった「自分がほしいコンソール」を実装するためのひとつのアイデアをご紹介します。

今回は以下のような機能を提供するコンソールを作ってみたいと思います。イメージ的には回線とその利用状況の棚卸し処理、みたいな感じですね。

  • SIM のステータス(準備中、利用中など)ごとの SIM の枚数
  • スピードクラスごとの SIM の枚数
  • オンラインの SIM の枚数
  • デイリートラフィック
  • エラーログ

はい、出来上がりました。こんなかんじです。3分間クッキングみたいですね!

各種メトリクス

SORACOM report

エラーログ

SORACOM error log

どう実装したの? 

上記のスクリーンショットで気づかれている方もいらっしゃると思いますが、Jupyter Notebook を使っています。

SORACOM の API としては、下記を利用しています。

  • listSubscribers – オペレータ( SORACOM アカウント)に紐づく SIM の一覧を取得するAPIです。 SORACOM ユーザーコンソールを開いたときに表示される SIM 一覧を作るのにも利用されている API です。この API のレスポンスには SIM のステータスや速度クラス、オンライン状態が含まれますので、これらを利用して様々な切り口での SIM の枚数集計が可能です。
  • exportAirStats – SORACOM Air の通信量を CSV で出力する API です。 SORACOM ユーザーコンソールで、利用量の CSV をダウンロードするところで利用されている API です。この API のレスポンスは単位時間x SIM 単位での SIM のトラフィック( Upload/Download )が含まれますので、時系列にデータを可視化することが可能です。
  • getLogs – 各種ログを出力するAPIです。例えば SORACOM Beam や SORACOM Funnel のエラーログなど含まれますので、これを監視することでアプリケーションの問題に気づくことが可能になります。

使ってみたいんだけど?

はい、もちろん可能です。 Notebook は下記にアップロードしてあります。

https://github.com/soracom/soracom-notebooks

もっともお手軽であろう Docker を使った起動方法は下記のようになります。${YOUR_SORACOM_ACCESS_KEY_ID} と$ {YOUR_SORACOM_ACCESS_KEY}は、ご自身の SAM ユーザーの認証キー ID と認証キーに書き換えてください。

# レポジトリをクローン
git clone https://github.com/soracom/soracom-notebooks.git
cd soracom-notebooks

# クローンしたNotebookをマウントしたJupyter NotebookのDockerコンテナを起動
docker run --rm -v "$PWD":/home/jovyan/work -p 8888:8888 -e ACCESS_KEY_ID=${YOUR_SORACOM_ACCESS_KEY_ID} -e ACCESS_KEY=${YOUR_SORACOM_ACCESS_KEY} jupyter/pyspark-notebook

コマンドを実行すると、ターミナルにノートブックの URL が出力されますので、そこにブラウザでアクセスしてください。こんな画面が表示されると思います。

Jupyter Notebook 1
work というディレクトリの中にある SORACOM-Operator-Essential-Dashboard.ipynb というファイルを開きます。

Jupyter Notebook 2
Notebook が開けました。あとは「早送り」のようなボタンを押していただくだけです。これによって、記述されている処理がすべて実行され、本記事の冒頭で掲載したようなレポートが表示されます。

Jupyter Notebook 3
どうでしょうか。レポートは表示されましたか?

まとめ

いかがでしたか? SORACOM の API の便利さと強力さを感じていただけたでしょうか。 SORACOM は単なる通信サービスではなく、「 API で管理可能な」通信サービスなのです。 SORACOM ユーザーコンソールは強力なツールですが、デバイスの数が増えてくると無理が出てくる部分もあります。例えば今回紹介したような Jupyter Notebook などのツールを API を組み合わせることで、管理はぐっと簡単に、そして柔軟に行えるようになってきます。是非みなさまも API を活用していただけると嬉しいです。

こぼれ話

いろいろ考えた結果、今回は Jupyter Notebook を Docker で動かす形でご案内してきましたが、実は最初は Google が提供する Colaboratory (以下 Colab )というマネージド Python ランタイム、いやもっと端的に(誤解を恐れずに)いえばマネージド Jupyter Notebook を使って実装をしていました(実際、わたし自身は普段しごとで SORACOM API を使ったレポート作成などには Colab を使っています)。これを使うと Docker すら用意しなくて済むことと Google Drive にドキュメントとして格納、共有することができるので本当に便利です。

いろいろ考えた結果 Docker にしたというのは、社内で利用しているノートブックドキュメントをパブリックに公開することに若干のリスク(公開する内容にリスクはありませんが、オペミスなどの事故を恐れた)を感じたことと、その公開ノートブックコピーして利用される方が、自分の Google アカウントで、ノートブックを公開状態のままレポートを作成してしまう( Jupyter Notebook の仕組み上、コードだけではなく実行結果であるレポートまでノートブックファイルに記述される)という事故を恐れたためです。このあたりの問題が起こり得ない環境であれば Colab 、本当におすすめです!