【IoT監視】Raspberry Pi 4を使用して、GraphiteとGrafanaで可視化＆監視

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/24b057e3-6001-ae87-cf05-70ef68d1097b.png)

この投稿では、GraphiteとGrafanaによって監視されるRaspberry Pi 4の設定方法を紹介します。まず、メトリックを送信するようにデバイスを設定し、StatsDとCollectdを介してメトリックをMetricFireに送信し、Grafanaダッシュボードに情報を表示します。 IoTデバイスがRaspberry Piで実行されている場合、またはLinuxを使用している場合は、この記事を順を追って実行できます。別の機器を使用している場合でも、この記事はLinuxを使用するすべてのIoTデバイスに適用されます。

まず、[MetricFire](https://try.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20IoT%20with%20Graphite%20and%20Grafana%3A%20tutorial%20with%20Raspberry%20Pi%204)の[無料トライアル](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20IoT%20with%20Graphite%20and%20Grafana%3A%20tutorial%20with%20Raspberry%20Pi%204)にサインアップして、メトリックスを送信し、数分以内にプラットフォームで視覚化できます。 MetricFireは、Prometheus、Graphite、およびGrafanaをホストしているマネージドサービスであり、このチュートリアル全体で使用していきます。 MetricFireで監視システムをセットアップすると、セットアップとメンテナンスの時間を大幅に節約でき、自分で１からセットアップするより、大幅に楽なはずです。

下のグラフは最終的にどのように見えるかです。このパネルには、Raspberry Pi 4のCPU使用率/アイドル、およびボタンが押された回数が表示されます。どのようにそれを行ったかチェックしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/c56b122a-369e-315c-f334-5d6ab5297347.png)

最初に、Collectdを使用して、Raspberry PiからMetricFireにCPUメトリックを送信します。 次に、Raspberry PiでStatsDを使用して、ボタンがMetricFireに押された回数に関するデータを送信します。 MetricFireで情報を取得したら、MetricFireのHosted Grafanaダッシュボードで視覚化します。

このチュートリアルを実行するために、LinuxパッケージマネージャーからインストールされたCollectd、StatsD用のPythonライブラリ、およびMetricFireプラットフォームからダウンロードされた構成ファイルを使用します。 CollectdがMetricFireプラットフォームに簡単に接続できるように、Collectdのカスタム構成ファイルを使用する必要があります。

#モニタリング用のRaspberry Piのセットアップ
 

###Ubuntu Serverでデバイスを起動する
まず、起動可能なOSを使用するには、micro SDカードをフラッシュする必要があります。 今日はUbuntu Server 19.10を使用します。 Windowsの場合は、Rufusを使用します（推奨）。 LinuxまたはMacの場合は、Etcherを試してください。 マイクロUSBが点滅したら、それをRaspberry Pi 4に接続し、電源を接続します。 ログインプロンプトが表示されるまで少し時間がかかりますが、表示されたら、ユーザーとパスワードの両方にubuntuと入力します。 成功した場合は、デフォルトのパスワードを変更するように求められます。

###WiFiネットワークをセットアップする
次のコマンドを使用して、デバイスをWiFiに接続してください。

```
sudo cp
```

```
/usr/share/doc/netplan/examples/wireless.yaml /etc/netplan/
```

```
network:
  version: 2
  renderer: networkd 
  wifis:
    wlan0:
      dhcp4: yes
      dhcp6: no
      access-points:
        "WIFI_SSID":
          password: "WIFI_PASSWORD" 
```

###フォントサイズを設定する
ケースアドオンを備えた小さな画面の1つを使用している場合、最初は端末のフォントサイズはかなり小さくなります。 これを変更するには、次のコマンドを実行します。

```
sudo dpkg-reconfigure console-setup
```

フォントサイズのページが表示されるまで、すべてをデフォルトのままにしておきます。 フォントサイズを最も高い設定にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/a1a2ffb5-0286-ae72-0feb-35780c2f0545.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/a29b2e65-f7c3-123d-7829-4251db10a09b.png)

###更新とアップグレード
wifiが機能したら、次のコマンドを実行します。

```
sudo apt update &amp;&amp; sudo apt upgrade&nbsp;
```

デバイスとしてサーバーを設定するため、アップグレードは重要です。 ロックファイルエラーが発生した場合は、そのプロセスが完了するまで待つか、エラーに表示されているプロセス番号が消えない場合は強制終了してください。 このエラーは、何かを同時にインストールまたはアンインストールしているときに発生します。そのプロセスは、すでに何かを実行している場合、アップグレードをロックするためです。

#Raspberry Piを監視用に設定する
 

###PCからRaspberry Piにファイルを送信する
SCPと同じwifiネットワーク上にあることにより、ファイルをRaspberry Piに送信します。 まず、ifconfigを使用してwifiのIPアドレスを取得しましょう。

ifconfigがない場合は、次を使用します。

```
sudo apt install net-tools
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/8ff6d9ec-a7ad-9942-8118-6afb95bda176.png)

ifconfigを実行したら、wlan0のIPアドレスを覚えておいてください。 下の画像を確認し、参照として赤い円を確認してください。 このIPアドレスを使用して、SCP経由でファイルを送信します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/746767df-3164-e9cd-9741-1a9df9c1623d.png)

メインPCからRaspberry PiにSSHで接続して、作業を簡単にします。 SSH ubuntu @ IP_FROM_IFCONFIGを実行すると、Raspberry Piのパスワードを要求されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/c2165686-ff82-14e5-4940-8f57eb6388b8.png)

次に、PCからファイルをRaspberry Pi 4にSCPで転送してみましょう。

```
scp TESTFILE ubuntu@IP_FROM_IFCONFIG:~/
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/25ed838a-1801-03e9-5c12-b8a65f697c8f.png)

###MetricFireからのカスタム構成ファイルの送信
CollectdでMetricFireを使用する最も簡単な方法は、MetricFireのカスタム構成ファイルを監視しているデバイスにインストールすることです。 Configファイルは、アドオンセクションの下のHosted Graphiteプラットフォームにあります。 Hosted Graphiteプラットフォームに移動し、アドオンをクリックして、Collectdをクリックすると、カスタム構成ファイルをダウンロードする場所が表示されます。

MetricFireアカウントからダウンロードしたカスタムcollectd 5.4 confファイルを送信します。

```
scp collectd.conf ubuntu@IP_FROM_IFCONFIG:~/
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/9150f1ed-d2a4-96c4-a5d8-1bc4e78891d2.png)

次に、下の画像のように、送信したファイルがそこにあることをRaspberry Pi 4で確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/a302f440-1447-db88-fc2b-59bb08d6b1d6.png)

ここでも、SSHとSCPを機能させるために、PCとRaspberry Piが同じwifiネットワーク上にあることを確認してください。

 

#Raspberry PiでCollectdを設定する
次に、collectdとMetricFireを使用してシステムモニターをセットアップします。 
collectdをインストールします：

```
sudo apt install collectd&nbsp;
```

Collectdに関するビデオチュートリアルをまだご覧になっていない場合は、Raspberry PiでMetricFireのCollectdの設定を続ける前に、[このチュートリアル](https://www.metricfire.com/blog/how-to-install-collectd-and-send-metrics-to-metricfire)をご覧になることをお勧めします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/29df9999-2289-7de7-e46b-06496a8acdfd.png)


Collectdをインストールしたら、Collectdをデーモンとして有効にし、次のコマンドで起動します。

```
sudo systemctl enable collectd
```

```
sudo systemctl start collectd
```

次のコマンドを使用して、collectdのステータスを確認できます。

```
sudo systemctl status collectd&nbsp;
```

SCP経由で送信したMetricFireからのカスタムファイルを含むCollectd構成ファイルを挿入します。 以下のコマンドで設定ファイルを上書きできます：

```
cp collectd.conf /etc/
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/26a88d8e-c28a-6d47-dfc0-35eb0a575913.png)

構成ファイルが上の画像のように正しい場所に配置されると（collectdのドキュメントを参照して、ご使用のOSのデフォルトディレクトリを見つけてください）、システムメトリックがMetricFireへの送信を開始します。 少し待ってから、メトリックが送信されていることをMetricFireダッシュボードで確認します。 ダッシュボードの[Metric]タブにあるメトリックツリーマップを確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/385e4d77-4e32-aff5-a5ac-4fbf567f254e.png)

次に、メトリック用のダッシュボードをすばやく作成します。 CPUのアイドル、システム、ユーザーの使用状況を追跡するダッシュボードを作成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/ff46d6c4-b14a-d63e-d14b-44248e8787f3.png)

これで、Ubuntu Serverを実行しているRaspberry Pi 4のシステムモニターができました。

#Raspberry PiでのStatsDのセットアップ

最後に、すべてのIoTデバイスには、ユーザーの使用状況データ用のある種の統計トラッカーが必要です。そのためにStatsDを使用します。 このセクションでは、Raspberry Piでボタンが押された回数の統計を収集し、MetricFireに送信します。 StatsDを実行する方法の詳細については、StatsDの設定に関する記事をご覧ください。 この例では、Pythonを使用するので、Python 3のpipをインストールします。

```
sudo apt-get install python3-pip
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/52b6e486-a24f-088d-be3e-3c1a1a420abc.png)


次に、Python用のstatsdパッケージをインストールします。

```
sudo pip3 install statsd
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/c8641168-f994-8be1-683d-1a5d0f59139f.png)

次に、IoT機能用のディレクトリを作成し、実行権限を持つfunction.pyを作成します。

```
touch function.py
```

```
chmod u+x function.py&nbsp;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/1a95c193-2fe6-316c-1a42-b5d7d20d3c1c.png)

このRaspberry Piで押されているボタンを表す単純な印刷機能を作成します。 ボタン機能を実行するたびに、ボタンが5回押されたことを示します。 以下の画像のように、またはコードスニペットから、コードをコピーしてfunction.pyに貼り付けます。 このボタンには、ボタンが押された回数を追跡するStatsDがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/2c104dfc-99d8-a66a-8339-eef41dd1ed6a.png)

```
#!/usr/bin/env python3
import statsd
c = statsd.StatsClient("statsd.hostedgraphite.com", PORT_NUMBER, prefix="YOUR_STATSD_KEY")
def press_button():
   c.incr("metric.iotButton", 1)
   print("iot button has been pressed.")
if __name__ == "__main__":
   press_button()
```

たった今作ったボタンを押しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/43448ee8-a0de-652c-4e51-3a6d8c84b3a0.png)


少し待ってから、メトリックツリーマップで確認して、StatsDからの新しいカウンターメトリックがあるかどうかを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/34937531-cf64-af48-a170-cc1af3fd3920.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/74c5952d-e3a1-de53-35df-97118f883cd2.png)

下の画像の例のグラフを作成するために、ボタンを30回以上スパム送信しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/9fb96949-2eed-c7c7-5e2e-33adf327b95c.png)


これで、デバイスが持つすべての機能のカウンター、レート、およびゲージを追跡するようにStatsDがセットアップされました！

#Raspberry Pi 4上のUbuntu Server 19.10 —ハウスキーピングのヒント
再起動またはシャットダウンして、ターミナルの代わりにデスクトップ環境がある場合は、ctrl-alt-f2を押してターミナルに戻ります。 システムを適切に更新およびアップグレードした場合、これは発生しません。

安全にシャットダウンするには、次のように入力します。

```
sudo shutdown -h now
```

再起動するには、次のように入力します。

```
sudo reboot
```

スクロールするには、

```
shift-pageup/pagedown&nbsp;
```
‍
このガイドが、Raspberry Pi 4にUbuntu Server（IoT）19.10とMetricFireを問題なくセットアップできるようになることを願っています。 デバイスを監視することで、製品をより効率的に改善できます。

自分で試してみたい場合は、[MetricFire](https://try.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20IoT%20with%20Graphite%20and%20Grafana%3A%20tutorial%20with%20Raspberry%20Pi%204)の[無料トライアル](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20IoT%20with%20Graphite%20and%20Grafana%3A%20tutorial%20with%20Raspberry%20Pi%204)にサインアップしてください。 Graphite、Prometheus、GrafanaをインストールせずにRaspberry Piを監視できます。 大規模なIoTモニタリングに興味がある場合は、[デモを予約](https://calendly.com/metricfire-chatwithus/chat?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20IoT%20with%20Graphite%20and%20Grafana%3A%20tutorial%20with%20Raspberry%20Pi%204)して直接お問い合わせください。 MetricFireがどのようにあなたの会社を助けることができるか,是非ご相談いただければと思います。

それでは、次の記事で！