【IoTの監視】MQTTとGraphiteを使用してGrafanaダッシュボードでIoTデバイスメトリックを監視・可視化してみた

#はじめに

IoTデバイスの普及により、私たちの身の回りには、さらに多くのデータで溢れるようになってきました。しかし、データ自体は、それに基づいて行動を起こすことができない限り、有用なものではありません。データを有効に活用していくために、IoTデータを視覚化させテイクことが必要で、この記事ではその方法を解説していきます。また、この記事では、IoT データとメトリクスという用語を互換性を持って説明させて頂きます。

[MQTT](http://mqtt.org/) (クライアント、ブローカー、チャネル)、[Graphite] (https://graphiteapp.org/) (時系列データ収集)、[Grafana] (https://github.com/grafana/grafana) (ダッシュボード)について全く馴染みがない場合は、次のセクションで簡単な紹介をします。すでにご存知の方は、その次のセクションにまでお進みください。

#用語の説明
###MQTT

MQTT: ブローカー、チャンネル、クライアント(発行者/購読者)

MQTTは、特にバッテリーが少なく、ネットワーク接続が理想的でないIoTデバイスで使用するために設計された軽量なプロトコルです。
MQTTは、「チャンネル」という概念に基づいた[パブリッシュ・サブスクライブ通信パターン](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern)に基づいています。簡単に言えば、あなた（加入者）がMQTTチャンネルに加入していれば、そのチャンネルに送信する任意のIoTデバイス（パブリッシャー）からIoTデータを受信することが出来ます。
 
MQTTチャンネルはMQTT "ブローカー"によって管理されており、これを"サーバー"と考えるたとき、パブリッシャーと加入者は"クライアント"と考えることができます。

###Grafana
Grafanaとは、簡単に言えば、Grafanaが[プラグインを持っているデータソース]((https://medium.com/@khor/the-simplest-introduction-to-grafana-46e8c15171b6))から、あらゆるデータを表示することができる、美しくて強力なダッシュボードシステムです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/7eb8e941-ed44-ae69-2243-c9df48c20b24.png)


各Grafanaプラグインは、以下のことを理解するアダプターとして機能します。

- データストアがデータを保存する形式
- データストアからデータを取り出す方法
- データストアから取得したデータを、Grafanaがダッシュボードに表示するために使用するデータ形式に変換する方法

###Graphite
Graphiteは時系列データ収集システムです。Graphiteに格納された時系列データは、APIのエンドポイントからデータを取得することができます。

#構造イメージ: MQTT、Graphite、Grafana
すべてのコンポーネントをまとめてアーキテクチャ図を作ると以下のようになります。

<img width="632" alt="スクリーンショット 2020-06-03 9.23.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/8fec0925-49ab-e9c0-055c-eab5594796d3.png">

#MQTT, Graphite, Grafanaの実装方法
これらを実際に行っていく方法は2つあります。どちらを選択するかは、あなたがどのような人であるか、何らかの形で依存しています。あなたはどちらですか？

#####方法1: 「私は普段忙しく、設定の失敗でさらに忙しくなる思いをしたくない方」

- ホストサービスを利用する
- 所要時間5分(最低限のスキルセット)

#####方法2: 「私は本物のエンジニアであるという方」

- すべて自分で設定してください
- 所要時間は少なくとも10時間以上(スキル等による)

##実装の手順

それぞれの方法に必要な簡単な手順をご紹介します。
#####方法1：ホストサービスを使用する（5分

1. MQTTチャネルを使用して、MQTTプロトコルを介してMQTTブローカーにデータを送信するようにIoTデバイスを設定
2. GraphiteからIoTを取得して表示するようにGrafanaを設定

#####方法2：すべてを自分で設定する（> 10時間

1. MQTTブローカーの設定
2. Graphiteのセットアップ
3. Grafanaの設定
4. MQTTチャネルを使用して、MQTTプロトコルを介してMQTTブローカーにデータを送信するようにIoTデバイスを設定
5. MQTTブローカーにサブスクライブするためのMQTTクライアントの設定
6. Carbonプロトコルを介してIoTデータをGraphiteに送信するためにMQTTクライアントを設定
7. GraphiteからIoTを取得して表示するようにGrafanaを設定

##実際に実装していく
###方法1：ホスティングサービスを利用する
この記事では、より簡単な方法１のみを紹介し、より複雑な方法２は近い将来、ゴリゴリの詳細と共に記事にしたいと思います。

1. ホストされたMQTT/Graphite/Grafanaサービスにサインアップします。（推奨ツール：[Metricfire](https://try.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Visualize%20your%20IoT%20device%20metrics%20on%20Grafana%20dashboards%20using%20MQTT%20%26%20Graphite) ([無料トライアル](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Visualize%20your%20IoT%20device%20metrics%20on%20Grafana%20dashboards%20using%20MQTT%20%26%20Graphite)あり)

2. ダッシュボードから MQTT ブローカーのエンドポイントとチャネルを取得します。

<img width="600" alt="スクリーンショット 2020-06-03 10.02.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/30d9c8c5-b753-10ee-b955-58accf0b01f8.png">

3. MQTTブローカーのエンドポイント/チャンネルに送信するようにIoTデバイスを設定します。

これはお使いのIoTデバイスにもよりますが、一般的には、前のステップからMQTTブローカーのホスト名/IPアドレスとMQTTチャネルにIoTデバイスのMQTTクライアント(パブリッシャー)をポイントするだけです。

4. 左メニューのGrafanaをクリックして、ダッシュボードを可視化します。

 <img width="270" alt="スクリーンショット 2020-06-03 10.04.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/88da5617-d0c0-56e1-0df2-9e6f3350e46a.png">

 実際にGrafanaにIoTデータのダッシュボードを作る方法はこちらの[「Grafanaを基礎から解説 〜実際に導入までしてみる〜](https://qiita.com/TomoEndo/items/bbf10dbd60c6b85ccee0)をご参照ください。

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/a554a7bf-5ffc-30ac-c276-afa1984e08c3.png)


データを可視化出来たら、あとはダッシュボードを好きなようにカスタマイズ、そしてアラート設定を行い、自分、またはチームメートと共に使用しやすいものに改良していきます。

#最後に

いかがだったでしょうか？監視は導入が大変というイメージがあるかもしれませんが、非常に簡単にセットアップできたはずです。
また、この時代、IoTにも監視は付き物となってきますので、是非こちらの方法をご検討ください。MetricFireでは無料相談やデモも行っているようなので、さらに詳しい内容をお求めの方はMetricFireに直接お話いただければと思います。ご希望の方は[こちら](https://calendly.com/metricfire-chatwithus/chat?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Visualize%20your%20IoT%20device%20metrics%20on%20Grafana%20dashboards%20using%20MQTT%20%26%20Graphite)から

それでは、またの記事でお会いしましょう！