【Iot環境センシング下準備】InfluxDB設定+Grafana+telegrafでラズパイデータ可視化 カッコいいグラフを作ろう

InfluxDB2 ラズパイセンシングIoT

センシングしたデータを保存するInfluxDBは前回ラズパイに構築したので今回はGrafana+telegrafを入れて設定していきます。おまけとしてChromografとvcgencmdを使ってCPU温度やCPU使用率・ARMのデータを取得してInfluxDBにインサートするところまでやっていきます。

InfluxDB+Grafanaをラズパイに入れておけばデータの受け皿とデータを表示する準備完了、次回からは自宅環境センシングでセンサーから取得したデータをInfluxDBで収集しておいてGrafanaのグラフで表示させることができます。とうことで次回からが自宅Iotセンシングの本番で今まではちょいつまらない構築作業なのですが、今回はデータをグラフ表示するのでグラフ好きな方は面白いかもしれません。(自分はグラフが大好きなんです♪)

この記事は複数のページに別れています

以下、赤枠の部分のグラフをWebでカッコよく表示してくれるGrafanaとラズパイのCPUやメモリの状態をセンシングするTelegrafをインストールして設定していきます。オマケで特に必要は無いのですがChronografもインストールしていきます。こちらはInfluxDBを管理するWebツール。

InfluxDB2 ラズパイセンシング

ラズパイにRaspbianをインストール、InfluxDBのインストールは前のページで書きました。その続きが今回の記事です。

Linuxに詳しくない方で環境センシングに興味がある方は枠の部分の「$」から右の部分をラズパイのシェルにコピペして作業していってください。(失敗例は飛ばしてくださいね。)

  1. Grafanaインストール・設定
    1. インストール
      1. エラーが出た
    2. デーモンリロードしてGrafana起動・自動起動設定
    3. Grafana起動してるか確認
    4. GrafanaにWebブラウザからアクセスしてみる
  2. telegrafインストール
    1. Telegraf apt-getでインストール
    2. ダウンロード・インストール
    3. 起動
    4. 起動スクリプト
      1. telegraf.service
      2. サービス終了する場合
      3. rc.localに記入して自動起動させる
      4. 起動確認
    5. DB追加されてる
    6. TelegrafプラグインのnetとInfluxDBを有効にする
    7. Telegrafが重い時は設定変更
  3. Telegrafが収集したデータをGrafanaで表示してみる
    1. Grafanaの設定
    2. グラフを作る
    3. Grafana専用 Blendstatプラグインを入れる
  4. CPUの温度や電圧などを取得してInfluxDBに投げる
    1. vcgencmdコマンドでラズパイの状態を取得する
    2. ラズパイの電圧状態
    3. PythonのInfluxDBクライアント インストール
    4. プログラムの置き場所を作る
    5. Pythonプログラムをダウンロード
    6. InfluxDBのdatabaseとmeasurementなどの名前を決める
    7. Pythonプログラムcpu.pyをテスト実行する
    8. /proc/statでCPUの状態取得可能
    9. cronで一定時間置きにプログラムを実行させる
  5. GrafanaのRaspiグラフ
    1. Grafana用jsonファイルのダウンロード
    2. jsonファイルのインサート方法
    3. いらない項目の削除方法
    4. グラフページ・グラフを作成・変更したら保存しておこう
  6. Chronografを使ってみる
    1. インストール
    2. 初期設定
    3. InfluxDB操作
    4. ラズパイの状態をグラフ表示
  7. 次回から本格的に自宅環境センシング始めます♪

Grafanaインストール・設定

Webブラウザでカッコいいグラフや数値を表示してくれるツールです。InfluxDBと同じ会社のオープンソースソフトウェアなので親和性が高くすぐに使い始められます。

インストール

Download Grafana
Overview of how to download and install different versions of Grafana on different operating systems.

ラズパイの場合はARMv7をインストールする。

$ wget https://dl.grafana.com/oss/release/grafana-rpi_6.1.4_armhf.deb
$ sudo dpkg -i grafana-rpi_6.1.4_armhf.deb
$ rm grafana-rpi_6.1.4_armhf.deb

エラーが出た

ラズパイ4でgrafanaを入れたら以下のようなエラーが出ました。

Selecting previously unselected package grafana.
(Reading database ... 41735 files and directories currently installed.)
Preparing to unpack grafana_6.4.4_armhf.deb ...
Unpacking grafana (6.4.4) ...
dpkg: dependency problems prevent configuration of grafana:
 grafana depends on libfontconfig1; however:
  Package libfontconfig1 is not installed.

dpkg: error processing package grafana (--install):
 dependency problems - leaving unconfigured
Processing triggers for systemd (241-7~deb10u1+rpi1) ...
Errors were encountered while processing:
 grafana

apt-getでlibfontconfig1をインストールしようとしたところ壊れているようなのでFixしました。

$ sudo apt-get install libfontconfig1
#壊れているようなのでFixする。
$ sudo apt --fix-broken install

もう一度dpkgするとちゃんとインストールできた。

デーモンリロードしてGrafana起動・自動起動設定

$ sudo systemctl daemon-reload
$ sudo systemctl enable grafana-server
Synchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable grafana-server
Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service.
$ sudo systemctl start grafana-server

Grafana起動してるか確認

$ systemctl status grafana-server
● grafana-server.service - Grafana instance
   Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; enabled; vend
   Active: active (running) since Sun 2019-01-20 12:13:37 JST; 1min 10s ago
     Docs: http://docs.grafana.org
 Main PID: 1984 (grafana-server)
   CGroup: /system.slice/grafana-server.service
           └─1984 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --p

 1月 20 12:13:49 raspberrypi grafana-server・・・省略

「Active: active」など、上記のように表示されたらOKです。終わらないので[Ctrl]+[c]を押すとプロンプトが表示されます。

GrafanaにWebブラウザからアクセスしてみる

Windowsからアクセスしてみます。ラズパイ本体からアクセスする場合はIPアドレスの部分をlocalhostにしてくださいね。

「http://192.168.31.53:3000」(192.168.31.53はラズパイのIPアドレスに置き換える)→「http://192.168.31.53:3000/login」にリダイレクトした。ID・Passはデフォルトでadmin・adminでした。

Grafana ブラウザからアクセス

admin・adminを入力してログインすると、新しいパスワードの変更画面↓が出るのでパスワードだけ変更する。IDはadminになる。

Grafana ブラウザからアクセス

ログインするとグラフのデータを設定するように言われますが、まだちゃんとしたデータが無いので先にラズパイの中身をセンシングしてくれるツールtelegrafを入れていきます。

telegrafインストール

グラフ表示するデータが欲しいのでラズパイのCPU・メモリの状態などをInfluxDBに送ってくれるtelegrafというGo言語で書かれていているメトリクスコレクタがあるので入れてみます。

GitHub - influxdata/telegraf: The plugin-driven server agent for collecting & reporting metrics.
The plugin-driven server agent for collecting & reporting metrics. - GitHub - influxdata/telegraf: The plugin-driven server agent for collecting & reporting met...

telegrafは別途プラグインを入れればかなりの数のデータを収集してくれます。デフォルトの設定でデータを収集してくれるのはラズパイのcpu,disk,diskio,system,kernel,mem,processesなどをセンシングしてくれます。こまかな設定をすれば他のApacheやSSHなどのデーモンのアクセスや状態のデータをInfluxDBにインサートしてくれますのでラズパイをWebサーバーなどで運用している場合はかなり役立ちそうです。まずはデフォルトのままラズパイのCPUやメモリなどを表示させてみましょう。

Telegraf apt-getでインストール

こちらでやったほうがてっとり早いです。ラズパイの場合は以下のページのDebianの項目通りにやればOK。

Installing Telegraf | Telegraf 1.12 Documentation
This page provides directions for installing, starting, and configuring Telegraf. Requirements Installation of the Telegraf package may require root or administ...
$ sudo apt-get update && sudo apt-get install telegraf
$ sudo service telegraf start
$ sudo systemctl status telegraf

以下、手動でインストール。Telegrafは上のapt-getでインストールしたほうが早いです。

ダウンロード・インストール

メルアドと名前登録が必要です、以下からtarball(しかないので・・・)をダウンロード。

Downloads

ダウンロードと解凍(ラズパイはarmhfのtarballを選びます。)

$ wget https://dl.influxdata.com/telegraf/releases/telegraf-1.11.2_linux_armhf.tar.gz
$ sudo tar xzvf telegraf-1.11.2_linux_armhf.tar.gz

必要なものだけ移動する。

$ sudo mv telegraf/usr/bin/telegraf /usr/bin/telegraf #バイナリ本体
$ sudo mv telegraf/etc/telegraf /etc/telegraf #telegraf.confなどのファイル
$ sudo mv telegraf/etc/logrotate.d /etc/telegraf
$ sudo cp telegraf/usr/lib/telegraf/scripts/init.sh /usr/local/bin/telegraf.sh

起動

起動すると以下のようになる。

$ telegraf
2019-01-20T07:43:24Z I! Starting Telegraf 1.9.2
2019-01-20T07:43:24Z I! Using config file: /etc/telegraf/telegraf.conf
2019-01-20T07:43:24Z I! Loaded inputs: inputs.disk inputs.diskio inputs.kernel inputs.mem inputs.processes inputs.swap inputs.system inputs.cpu
2019-01-20T07:43:24Z I! Loaded aggregators: 
2019-01-20T07:43:24Z I! Loaded processors: 
2019-01-20T07:43:24Z I! Loaded outputs: influxdb
2019-01-20T07:43:24Z I! Tags enabled: host=raspberrypi
2019-01-20T07:43:24Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"raspberrypi", Flush Interval:10s

以下も同様に表示された。ただシェルで動いているので[Ctrl]-[c]すると終了してしまう。

$ telegraf -config /etc/telegraf/telegraf.conf

起動するかテスト↓

$ /usr/bin/telegraf --config /etc/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d
2019-01-19T22:10:06Z I! Starting Telegraf 1.11.2
2019-01-19T22:10:06Z I! Loaded inputs: net cpu disk processes system diskio kernel mem swap
2019-01-19T22:10:06Z I! Loaded aggregators:
2019-01-19T22:10:06Z I! Loaded processors:
2019-01-19T22:10:06Z I! Loaded outputs: influxdb
2019-01-19T22:10:06Z I! Tags enabled: host=Raspi3B2
2019-01-19T22:10:06Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"Raspi3B", Flush Interval:10s

起動スクリプト

リブートしたときなど自動で起動するようにする。

telegraf.service

(過去の内容はtelegraf.serviceの置き場所が間違えてました。以前は/lib/systemd/systemに置いたからうまく動かなかった、直接置いちゃいけないみたい。正しくは/usr/lib/systemd/system/の中に置く)

$ sudo mv telegraf/usr/lib/telegraf/scripts/telegraf.service /usr/lib/systemd/system/
$ sudo systemctl daemon-reload
$ sudo systemctl start telegraf
$ sudo systemctl enable telegraf
Removed /etc/systemd/system/multi-user.target.wants/telegraf.service.
Created symlink /etc/systemd/system/multi-user.target.wants/telegraf.service → /usr/lib/systemd/system/telegraf.service.

$ sudo systemctl status  telegraf #成功例
● telegraf.service - The plugin-driven server agent for reporting metrics into I
   Loaded: loaded (/usr/lib/systemd/system/telegraf.service; enabled; vendor pre
   Active: active (running) since Sat 2019-07-20 15:37:47 JST; 8min ago
     Docs: https://github.com/influxdata/telegraf
 Main PID: 3838 (telegraf)
   CGroup: /system.slice/telegraf.service
           └─3838 /usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-

 1月 21 15:37:47 Raspi3B2 systemd[1]: Started The plugin-driven server agent for
 1月 21 15:37:48 Raspi3B2 telegraf[3838]: 2019-07-20T06:37:48Z I! Starting Telegr


$ sudo systemctl status  telegraf #失敗例(telegraf.serviceを/etc/systemd/systemに置いていたのが原因)
● telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB
   Loaded: loaded (/etc/systemd/system/telegraf.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Mon 2019-01-21 11:24:47 JST; 23min ago
     Docs: https://github.com/influxdata/telegraf
 Main PID: 1775 (code=exited, status=217/USER)

 1月 21 11:24:47 raspberrypi systemd[1]: telegraf.service: Unit entered failed state.
 1月 21 11:24:47 raspberrypi systemd[1]: telegraf.service: Failed with result 'exit-code'.
 1月 21 11:24:47 raspberrypi systemd[1]: telegraf.service: Service hold-off time over, scheduling r
 1月 21 11:24:47 raspberrypi systemd[1]: Stopped The plugin-driven server agent for reporting metri
 1月 21 11:24:47 raspberrypi systemd[1]: telegraf.service: Start request repeated too quickly.
 1月 21 11:24:47 raspberrypi systemd[1]: Failed to start The plugin-driven server agent for reporti
 1月 21 11:24:47 raspberrypi systemd[1]: telegraf.service: Unit entered failed state.
 1月 21 11:24:47 raspberrypi systemd[1]: telegraf.service: Failed with result 'exit-code'.

Active:の部分がactiveで起動成功、failedで起動失敗。

サービス終了する場合

$ sudo systemctl disable telegraf

rc.localに記入して自動起動させる

上のやり方が正しいのでこちらは省略します。

正規のやり方でないかもしれませんが、以下のようにして自動起動させる。

$ sudo chmod +x /usr/local/bin/telegraf.sh
$ sudo vim /etc/rc.local
#以下の行をexit 0 の前に追加
/usr/local/bin/telegraf.sh start 

これでリブートしてps aux | grep telegrafで確認したら起動してた。

起動確認

$ ps aux | grep telegraf
pi        2024  1.5  3.8 844412 36372 pts/0    Sl+  11:58   1:11 telegraf -config /etc/telegraf/telegraf.conf
pi        3960  0.0  0.0   3852   532 pts/1    S+   13:14   0:00 grep --color=auto telegraf

DB追加されてる

注:新しいバージョンのInfluxはこちらの↓Webページは廃止されています。表示されなくても正常です。

そしてWebブラウザのhttp://192.168.31.53:8083/にアクセスしてDatabasesを見るとtelegraf DBが追加されてる。

試しにcurlでtelegrafのcpuの中身を見て(Telegrafが収集したデータを表示させるクエリー)みると↓データがたくさん蓄積されていた。

$ curl -G 'http://localhost:8086/query?db=telegraf&pretty=true' --data-urlencode 'q=SELECT *

TelegrafプラグインのnetとInfluxDBを有効にする

Telegrafでラズパイのnetのアクセスの状態を収集させるように設定します。

以下のようにtelegraf.confを開いて「# [[inputs.net]]」の部分の先頭のコメントを外すだけです。

$ sudo vim /etc/telegraf/telegraf.conf
#InfluxDBのクエリー 以下の左側のコメント「#」を外す
 [[inputs.influxdb]]
   urls = [
     "http://localhost:8086/debug/vars"
   ]
   timeout = "5s"

[[inputs.net]]  #Newwork 左側のコメント「#」を外す
$ sudo systemctl reload telegraf

以上でTelegrafの設定は完了です。

Telegrafが重い時は設定変更

ラズパイでInfluxDBを運用していて、Telegrafを使っていると重くなりました。

Telegrafというより、Influxdが300%を超えるCPU占有率になってしまってラズパイ3だと動かなくなる、ラズパイ4だとなんとか耐えますがInfluxDBにアクセスできなくなります。

そこで、Telegrafの設定を少し変えてみました。

$ sudo vim /etc/telegraf/telegraf.conf

[agent]

interval = “30s” collection_jitter = “20s” flush_interval = “10s”

上のように[agent]のインターバルやcollection_jitterの値を上げてあまり頻繁にデータを収集しないようにしました。

これでInfluxdはtopコマンドでCPU使用率が最大30%ほどになりましたが、しばらく様子見です。

Telegrafが収集したデータをGrafanaで表示してみる

先ほどGrafanaにログインした状態からの続きです。

Grafanaの設定

telegrafが集めてInfluxDBが保存しておいてくれたデータをGrafanaで表示してみます。

最初に「http://localhost:3000」にアクセスすると以下のような画面が表示されていると思います。

設定するところはHTTPのURL「http://localhost:8086」かWifi内のパソコンからアクセスするときはラズパイのIPアドレスをlocalhostに置き換えます。

その他は、Databaseにtelegraf、ユーザー・パスワードはInfluxDBの設定時にコチラで設定したものです。

もし、他のページに行って設定ページが分からなくなった場合は左側の歯車アイコンを押して、InfluxDBを押しましょう。↓(InfluxDBがない場合は右上の緑色「Add data source」を押してデータソースの設定をしましょう。)

InfluxDBを押す

設定完了したら下にある「Save & Test」を押してうまくいくと「Data source is working」となる↓

グラフを作る

いよいよtelegrafが保存してくれたデータを表示してみます。まずは左の「+」を押してNew dashoboardを選択。

(グラフを作るのが面倒な場合・・・は、下のほうで作ったグラフをダウンロードできるようにしておきました。よかったらそれをご自分のGrafanaにアップして使ってください。)

グラフを押します。

「Panel Title」のEditoを選択。

すると以下のようにFROM部分とSelect部分を選択するとグラフが表示されました。

一つの表に複数のグラフを書きたい場合はAdd Queryを押して同じように追加していくと以下のようになります。

タイトルは左側のGeneralタブを押して変更可能。

最終的にこのようになって↓とりあえずの目標は達成!

下の「Grafana用jsonファイル(Raspi-test.json)」の項目でグラフをまとめてダウンロードできるようにしておきました。

Grafana専用 Blendstatプラグインを入れる

こちらのBlendstatプラグインは下のほうで紹介するGrafana用jsonファイル(Raspi-test.json)で使用するので入れておきましょう。

詳しい説明は以下のページにあります。

/docs/grafana/v7.5/panels/visualizations/stat-panel/

以下のようにスピードメーターのようなパネルを表示してくれます。

Blendstat

以下のように簡単にインストールして最後にGrafanaをリスタートさせます。

$ sudo grafana-cli plugins install farski-blendstat-panel
installing farski-blendstat-panel @ 1.0.1
from url: https://grafana.com/api/plugins/farski-blendstat-panel/versions/1.0.1/download
into: /var/lib/grafana/plugins
✔ Installed farski-blendstat-panel successfully
Restart grafana after installing plugins . <service grafana-server restart>
$ sudo service grafana-server restart

Blendstatを使う時はNew PanelのAddでBlendstatを選ぶと使うことができます。

Blendstat

CPUの温度や電圧などを取得してInfluxDBに投げる

Telegrafで取得していないラズパイのCPU温度や周波数・CPU電圧と電圧の状態をPythonで取得してグラフに表示させてみましょう。

この項目、CPUの温度や状態を取得する必要なければ特にプログラムを設置する必要はありませんので飛ばしてください。

vcgencmdコマンドでラズパイの状態を取得する

vcgencmdの使い方はこちらに詳細が書いてあります。

RPI vcgencmd usage - eLinux.org

温度は/sys/class/thermal/thermal_zone0/tempの中にも数値がありますが、vcgencmdでも取得可能、実際に取得してみます。

$ cat /sys/class/thermal/thermal_zone0/temp
48312
$ vcgencmd measure_temp #CPU温度
temp=47.8'C

ラズパイの温度が上がりすぎる(85度くらい?)とシステムダウンするので温度は監視しておいたほうがよさそうです。

その他に以下のようにvcgencmdコマンドでラズパイの中の状態を取得できます。

$ vcgencmd measure_volts #CPUの電圧
volt=1.2000V
$ vcgencmd measure_clock arm #周波数
frequency(45)=600000000
$ vcgencmd get_throttled #電圧の状態
throttled=0xd0000

cpuの電圧と周波数はほぼ決まっているのであまり参考になる数値は取れないと思いますが、データはたくさんあったほうがカッコいいグラフができるので取得しちゃいます。

ラズパイの電圧状態

「vcgencmd get_throttled」電圧の状態というのはラズパイの電源の電圧が足りているかどうかの状態を表します。0~5までの数字は自分が勝手に作ったもので、「0xd0000」などの16進数の数値がvcgencmd get_throttledを打つと「throttled=0xd0000」などと返ってくる。3~5(0x50005~0x80008)になるとラズパイの状態がヤバイことになっているということです。以下のようになります。

  • 0:0xd0000 ????
  • 1:0x0         正常
  • 2:0x50000 過去に低電圧状態になった。今は正常
  • 3:0x50005 低電圧!
  • 4:0x80000 熱でクロックダウン
  • 5:0x80008 今現在熱でクロックダウン

「0xd0000」というのは正常だと思うのですが?よくわかりませんでした。

上記vcgencmdコマンドの4項目を一定時間ごとにプログラムで打ってInfluxDBに投げるPythonプログラムを作っていきましょう。といってもプログラムは完成しているのでダウンロードして5項目ほどご自分の環境に変更設定・アップロードするだけです。

PythonのInfluxDBクライアント インストール

Pythonプログラムで使うInfluxDBにPythonから接続するためにInfluxDBクライアントモジュールをpipでインストールしておきます。

$ sudo pip install influxdb

これを実行するだけなので簡単ですね。

プログラムの置き場所を作る

プログラムを置いておく場所を決めます。仮に「/home/pi/script」の中に置くようにしましょう。

$ mkdir script #scriptというプログラムファイルの置き場所(ディレクトリ)を作る

今後作っていくセンサーのプログラムなどもこの場所に置くことにします。

Pythonプログラムをダウンロード

こちらのcpu.pyというPythonスクリプトをダウンロードしてお使いください。

https://bey.jp/wp-content/uploads/download/cpu.py

プログラムは以下の方を参考にInfluxDBにインサートするように改造させていただきました。ありがとうございますm(_ _)m

Raspberry Pi CPU周波数、CPU温度、CPU使用率の取得Pythonスクリプト | ある計算機屋さんの手帳
CPU周波数、CPU温度、CPU使用率 2017年10月、Raspberry PiでCPU周波数、CPU温度、CPU使用率を取得するPythonスクリプトを作成しました。 画面の最終行を例として説明します。 ・CPU周波

InfluxDBのdatabaseとmeasurementなどの名前を決める

Pythonプログラムを実行する前に少しだけ環境に合わせて変更する箇所があります。上記のPythonプログラムcpu.pyをダウンロードしたら、8~10行目を確認してください。

以下の3行の中の「’」と「’」で囲まれている日本語が入っている5箇所を変更します。

client = InfluxDBClient(host='localhost', port=8086, username='ユーザー名', password='パスワード', database='DB名')
measurement = 'テーブル名'
tags = {'host': 'ラズパイ名'}
  • database:DB名                → sensor #cpu.pyに書かれている文字
  • measurement:テーブル名 → cpu
  • username:ユーザー名       → root
  • password:パスワード       → xxxxx
  • host:ラズパイ名               → raspi3B+

上記5箇所をご自分の環境に合わせて変更しましょう。

ユーザー名・パスワードの部分はアクセス制限で決めたユーザーとパスを設定します。

databaseはtelegrafのデータベースを使うとタグなどがかぶる場合があるので、独自にsensorというデータベースを作ってcpuというmeasurementを作ってそこにデータを置くことにします。

その他にタグとしてhostを作りました。これにラズパイの名前を記入してください。例として「raspi3B+」が記入されていますので変更してください。

influxコマンドでInfluxDBに入ってデータベース「sensor」を作成してmeasurementの「cpu」とデータを追加しましょう。sensor,cpuは別の名前でも構いません。その場合は後ほど紹介するGrafanaのjsonファイルの中のsensor,cpuも名前を変えてくださいね。

$ influx
> CREATE DATABASE sensor
> use sensor
> INSERT cpu,host=test cpu_temp=45.025213452336,cpu_volt=1.2,arm=600.0

上記「cpu_temp=45.025213452336,cpu_volt=1.2,arm=600.0」は初期のダミーデータです。最初に少数点のあるデータをアップしておかないで整数をアップしてしまうとフィールドがinteger(整数)専用になってしまって小数点のある数値をアップするとエラーになるので最初のダミーデータが必要になります。このフィールドタイプを変更できないところがInfluxDBで問題になっているところ。

Pythonプログラムcpu.pyをテスト実行する

テストでシェルからcpu.pyを実行してみましょう。

$ python script/cpu.py #以下のように表示されればOK
[{'fields': {'cpu_temp': 59.6, 'cpu_volt': 1.2, 'arm': 600.0}, 'tags': {'host': 'raspi3B+'}, 'measurement': 'cpu'}]

もしエラーになった場合はエラー内容をよく見てdatabaseやmeasurementの指定などが間違っていないか確認しましょう。

/proc/statでCPUの状態取得可能

さらに以下のようにすればCPUの状態を詳細取得できますが、すでにTelegrafのほうであらかた取得しているようなので使わないことにします。

$ cat /proc/stat | grep cpu
cpu  5553245 0 484899 22060211 169663 0 5483 0 0 0
cpu0 1335895 0 116669 5500712 57595 0 3205 0 0 0
cpu1 1412327 0 122902 5517073 34319 0 722 0 0 0
cpu2 1405978 0 122525 5519048 37900 0 762 0 0 0
cpu3 1399045 0 122803 5523377 39848 0 794 0 0 0

cronで一定時間置きにプログラムを実行させる

試しにPythonファイルを実行してうまくいったら以下のようにCronで一定時間置きにプログラムを実行させておきましょう。例↓として1分置きに実行させています。5分おきの場合は以下の「1」を「5」に置き換えて追加してくださいね。

$ crontab -e
#以下の行を追加
*/1 * * * * /usr/bin/python /home/pi/script/cpu.py

以上でPythonプログラムの設定は完了です。あとは完全放置でcronが勝手にファイルを実行していってデータを蓄積してくれます。

GrafanaのRaspiグラフ

今までの作業を全て実行していくと最終的に以下のようになりましたのでよかったらダウンロードしてjsonファイルをアップして簡単にラズパイのグラフを表示させてみてください。

Grafana ラズパイ

Grafana用jsonファイルのダウンロード

以下のjsonファイル(Raspi-test.json)をダウンロードしてあなたのラズパイで試してみてくださいね。

https://bey.jp/wp-content/uploads/download/Raspi-test.json

ダウンロードしたらファイルの一番下から3~4行目にある以下の2行を編集しましょう。

  "title": "Raspi-test",
  "uid": "test-uid",
  • Raspi-test:好きなグラフページの名前
  • test-uid:ランダムな文字列(半角英数字)

両方共編集しなくても大丈夫ですが、好みで変更してください。uidは一意なランダムな文字列をGrafanaが作るようで、URLの一部です。

http://localhost:3000/d/test-uid/raspi-test

のようになります。

jsonファイルのインサート方法

ダウンロードしたjsonファイル(Raspi-test.json)のインサート方法を説明します。

Gurafanaの画面で左上のほうの「+」をマウスオーバーするとCreate項目が出てきて一番下の「Import」を押します。

Grafana Import

以下の画面になるので「Upload.json File」を押して先程ダウンロードしたjsonファイル(Raspi-test.json)ををアップロードします。もしくはjsonファイルの中身を全てコピーして「Or paste JSON」に貼付け後「Load」ボタンを押す。

Grafana Import ファイル選択

以下のような画面になりますが、Name・uidともに一意な文字列(他に無い名前)でないといけないので以下のような「・・・already exists」エラーになった場合はNameやuidを変更しましょう。

Grafana Import 選択エラー

またFolderはデフォルトでGeneralになっていますが、下の階層に保存したい場合はフォルダーを作って保存することもできます。

いらない項目の削除方法

jsonファイルをインサートしてしばらく(10分程度)様子をみているとデータが表示されていきます。もしデータが表示されない部分は「No data points」になります。それといらないグラフは削除していきましょう。

以下のようになっていますので、タイトル部分、例では「Panel Title」をクリックすると操作できるようになります。

Grafana いらない項目

一番下のRemoveを押すとグラフを削除できます。

Grafana いらない項目 Remove

グラフページ・グラフを作成・変更したら保存しておこう

グラフページやグラフを変更した場合は保存しておかないと、リロードしたら以前の設定にもどってしまいます。

右上にあるフロッピーディスクアイコンを押す。↓

Grafana Save

Save changes画面が出るので「Save」ボタンを押す。どういう状態で変更したのかメモすることも可能ですが空欄でも可能。

Grafana Save 空欄

以上、これでラズパイは完璧とまではいかないまでもある程度は可視化できた気がします。

Chronografを使ってみる

こちらはInfluxDBをWebで操作するツール。センシングするだけだったら特にインストールする必要はないので読み飛ばしてください。もしInfluxDBをより深く知りたい場合は入れておいて損はないと思います。

Webでコチラのページでhttp://127.0.0.1:8083/にアクセスして操作できるツールがInfluxDBを入れた時に使えましたが、開発終了とのことで今後はChronografに移行するようです。

インストール

Shellで以下のようにインストールして終わりです。

$ sudo apt-get install chronograf

初期設定

http://localhost:8888/にアクセスすると以下のようなページに。最初の初期設定です。

1 Chronograf

アクセスできたら設定していきます。UsernameとPasswordはコチラのInfluxDBのアクセス制限で設定したユーザーとパスワードを入れて、その他はそのままでOK。

Influxdb ログイン設定
Influxdb ログイン設定

これからいくつか聞かれます。この設定↓ダッシュボードに表示させるグラフのソースを選ぶ設定、最初はSystemしかないと思いますので「S」を選びます。

Connectedを押した

Kapacitorの設定は特に使わないのでそのままでContinueを押す。

なにやら警告がでてるけど構わずに設定を完了させました。

InfluxDB操作

冠アイコンでDB作成・DBのポリシーやデータの消費期限など設定できます。Usersでユーザーの追加削除も可能。

Chronographは機能が多くてシンプルではないので、いまいち使い方がわかりませんでした。理解すればかなり使えそうなツールです。

Status画面↓これはよくわかりませんでした。InfluxDataのニュースとかかな?

ラズパイの状態をグラフ表示

ChronographでもTelegraphが収集したデータを表示することができます。左側の目玉アイコンでraspberrypi(自分でつけた名前)を押すと、

以下のようなグラフが表示されます。

Telegrafの内容がグラフで表示された
Telegrafの内容がグラフで表示された
InfluxDB Chronograf
以前はなかったけど最近?InfluxDBのグラフも表示されるようになった。

その他に表アイコンを押すとApacheやDockerなどが表示されて、Telegrafで設定完了していてリンクを押すとグラフが表示されます。

Chronograf

Apache(Webサーバー)はラズパイに入れてない+Telegraphで設定していないのでなにも表示されませんでした。↓

Chronograf

唯一グラフが表示されたのはラズパイのCPUやDiscの状態をグラフにしてくれるSystemでTelegrafが集めてくれたデータを表示することができました。(Networkは設定して無い時)

こちらのグラフ↓もカッコいいですね♪

このグラフのクエリーを参考に上のGrafanaのRaspiグラフを作りました。

Chronograf

以上、Chronografはまだ使いこなせていませんのでもっと便利な使い方もあるかもしれません。

次回から本格的に自宅環境センシング始めます♪

ここまで読んでいただいて設定されたかた長々とお疲れ様ですm(_ _)m

今回まではあまり面白みのないDBのインストールやらグラフツールのインストールなどでしたが、次回からは実際にセンサーを買ってきて、センシングしたデータをラズパイのInfluxDBに入れていきます。

まずは5千円ほどで買えるWeathernews WxBeacon2を使ってセンシングしたデータを取得してInfluxDBにインサートしていきましょう。

この記事は複数のページに別れています

コメント

タイトルとURLをコピーしました