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

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

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

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

InfluxDB2 ラズパイセンシング

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

自宅のIot化でLED照明オンオフ(Xiaomi LED)や玄関鍵の開閉(セサミ スマートロック)、壁スイッチのオンオフ、部屋の空気の状態を表示させたりしていますが、不満点は専用のアプリでないと操作できないこと。それと同じメーカーでないと他のメーカーのIot製品は表示・操作できないことが歯がゆい。 Iotの...
自宅環境センシングの2回目の記事として今回はラズパイ(Raspberry Pi)にデータベースのInfluxDBを入れて将来的にセンシングしたデータをInfluxDB保存していきます。 そして次回は、GrafanaというデータをWebで美しく表示してくれるデータ可視化ツールとラズパイのCPUやRAM使用率な...

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

目次

Grafanaインストール・設定

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

Grafana Feature overview, screenshots, videos, feature tours

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

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

Grafana起動してるか確認

「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言語で書かれていているメトリクスコレクタがあるので入れてみます。

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

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

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

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

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

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

起動

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

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

起動するかテスト↓

起動スクリプト

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

telegraf.service

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

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

サービス終了する場合

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

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

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

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

起動確認

DB追加されてる

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

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

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

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

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

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

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

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)で使用するので入れておきましょう。

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

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

Blendstat

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

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

Blendstat

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

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

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

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

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

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

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

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

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でインストールしておきます。

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

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

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

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

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

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

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

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

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

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

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

  • 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も名前を変えてくださいね。

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

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

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

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

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

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

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

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

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

GrafanaのRaspiグラフ

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

Grafana ラズパイ

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

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

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

  • 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で以下のようにインストールして終わりです。

初期設定

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にインサートしていきましょう。

スポンサーリンク

コメントを残す