2020-08-29

【Raspberry Pi + InfluxDB + Telegraf】ラズパイのCPU温度を記録する方法

InfluxDB + TelegrafのデフォルトではDBに温度は記録されないので自分で実装する必要がある。その手順を記す。

Article Image

目的

Raspberry Pi 4(以下ラズパイ)にてCPU温度を時系列DBに記録する

使用するDBはInfluxDBに加えてTelegraという公式ツールを使う。

参考:前回のラズパイにInfluxDBをインストールする記事は次

Raspberry Pi 4でInfluxDBを稼働させる

Telegrafとは

プログラムを書かなくともこういったセンサのデータを記録するTelegrafだ。

こちらはInfluxDB公式のツール。

このツールのすごいところはとりあえずインストールしておけばホストPCのHDDやメモリの使用状況等が自動で記録開始される。

前回の記事にてダッシュボードに表示されているのは全てTelegrafが自動で収集したもの。

デフォルトでCPU温度は記録されない

ラズパイにはCPU温度を取得するセンサが付いておりコマンドラインからデータが取得できる。

しかしながらTelegrafの初期設定ではこれを取得することになっていないため設定を追加する必要がある。

シェルスクリプトによる温度取得

温度の取得はコマンドラインから行う。これを実行するシェルスクリプトを作る。

使用OSはRaspberry Pi OS (Raspbianから名称が変更された)なのでGUIがあるのでそちらで作ってもよいが

せっかくなのでラズパイでよく使われるnanoエディタで作ってみる。

※面倒ならGUIのエディタを使って作っても良い。

nanoエディタによるファイルの作成

pi@pi1:~ $ nano rpi-temp

rpi-tempというファイルを新規作成し、こちらにシェルスクリプトを書く。

エディタが現れるので次をそのままコピペ

#!/bin/bash

awk '{print $1/1000}' /sys/class/thermal/thermal_zone0/temp

※nanoは右クリックから貼り付けが可能。ctrl+uの貼り付けきーも下に出ているのでわかりやすい。

ctrl+oで書き込み。

なにやら下にオプションのようなものが出るがエンターキーを押せばそのまま書き込み。

ctrl+xで終了。

シェルスクリプトファイルの確認

lsコマンドを打つだけ

pi@pi1:~ $ ls
Bookshelf  Documents  Music     Public     Videos
Desktop    Downloads  Pictures  Templates  rpi-temp

右下にrpi-tempというファイルが出来ているのでOK

実行権限を付与

このままだと実行できないので実行権限を付与

pi@pi1:~ $ chmod 755 rpi-temp

※Linuxの場合実行するにも権限が必要。このあたりの詳細は省略。

このコマンドを打ち込んでも何も表示されないがそれでOK。

シェルスクリプトファイルの移動

スクリプトは完成したがWindowsで言うところの「マイドキュメント」にテキストファイルが入っただけの状態。

これを簡単に実行できるように指定のディレクトリに移動してやる必要がある。

次のコマンドを実行。

pi@pi1:~ $ sudo mv rpi-temp /usr/local/bin/

こちらもコマンド実行後になにも表示されなければ成功。

実行確認

/usr/local/bin/にスクリプトファイルが移動されると、そのファイル名をコマンドで打ち込むだけで対象のスクリプトが実行されるようになる。

次のコマンドで確認。

pi@pi1:~ $ rpi-temp
36.511

2行目に温度が表示されていれば正常。

※日本語版のOSであれば自動ローカライズで「セ氏(℃)」になっている模様。一応「カ氏(℉)」表示ではないことを確認しておきたい。

Telegrafの仕組み

これでシェルスクリプトを実行するだけで温度が取得できた。

Telegrafでは「スクリプトを実行し、帰ってきた値をDBに記録する」という便利な機能が備わっている。

つまり上のスクリプトをTelegrafから読み込んでやれば完了だ。

設定ファイルの書き換え

/etc/telegraf/telegraf.confに上のスクリプトを使って新しくデータを記録する設定を追記する。

pi@pi1:~ $ sudo nano /etc/telegraf/telegraf.conf

※このファイルはデフォルトで書き込み禁止設定なのでsudoで開いて追記

ファイルは長いのでctrl+endキーを押すと一瞬で一番下に移動できる。

一番下に次を追記して保存

[[inputs.exec]]
  commands = ["/usr/local/bin/rpi-temp"]
  name_override = "rpi_temp"
  data_format = "value"
  data_type = "float"

ちなみにこちらの文法はTOMLと呼ばれる形式。

保存したらラズパイを再起動

完成

以上でデータの取得が自動的に開始されており、InfluxDBに新しくMeasurementが追加されている。

image-20200826184723800

あとは各自データを利用する。

おまけ:Chronografのダッシュボードに追加

ここからはおまけ。Chronografの場合の視覚化手順を記述しておく。

http://{ラズパイのIPアドレス}:8888/にアクセスしてWEBのUIで操作する。

ダッシュボードへ移動

image-20200826184848632

右上「Add a Cell to Dashboard」

image-20200826184919914

※最初のデフォルト設定でダッシュボードを生成した状態からの作業。ワンクリックで自動生成だった記憶。

1,2,3の順でクリック。ここにrpi_tempが出来ていなければ設定のどこかで失敗していると思われる。

3は各自のラズパイ名

image-20200826185106956

valueにチェックを入れると上にグラフが表示される

image-20200826185341143

  1. Functionを開いてオプションを表示
  2. meanのチェックを切る(灰色になる)
  3. lastをチェック(青色になる)
  4. Applyをクリック

meanは「平均値」を表すので正確な現在のCPU温度が表示できないのでlast(最新の値)に変更する作業。

image-20200826185621402

不要かも:中段右「Submit Query」をクリック

image-20200826185406171

このままだとグラフの名前とメモリがわかりにくいので表示を変更する。

一番上のVisualizationをクリック

image-20200826190010193

CUSTOMIZEのタブでTitleY-Value's Suffixを変更

Suffixとは接尾辞なので単位の「°C」を入力した。バグがないように日本語変換の記号ではなく°Cの二文字。

image-20200826190532648

ダッシュボードのグラフ名は左上に入れておく。

とりあえず私はCPUとしておいた。

image-20200826190741379

image-20200826185900801

一番右上のチェックをクリックするとウィンドウが生成される。

image-20200826190822010

これでダッシュボードに上のグラフが追加される。

さいごに

image-20200826192309901

殆ど設定することなくこのような感じのダッシュボードができた。

とても簡単な作業だが、細かく解説していたら記事が長くなってしまった。

シェルスクリプトを使って他の項目追加にも応用出来ると思うので覚えておきたい。

参考URL

今回の記事を作るにあたりシェルスクリプト部分は次のBLOG記事を参考にさせていただいた。

How to measure a Raspberry Pi's temperature and CPU frequency with Telegraf



この記事をシェア


謎の技術研究部 (謎技研)