2020年5月14日木曜日

Grafana で Raspberry Pi の CPU、GPU 温度をグラフ表示



前回のブログ [Grafana で Raspberry Pi のメモリ使用率などリソース状態を可視化してみた] で CPU 使用率やメモリ使用率等のリソースを Grafana のダッシュボードで確認できるようにしましたが、下のキャプチャ画面のように CPU と GPU 温度に関しては現在の状態 (温度) の確認はできますが、過去の状態をグラフで確認することはできないようです。

CPU、GPU の現在の温度

今回は Grafana にダッシュボードを追加して、Raspberry Pi の CPU、GPU 温度のグラフを表示してみました。

環境

InfluxDB に保存されている CPU、GPU の温度データを確認

InfluxDB に保存されている CPU 温度のデータは実際の温度を 1,000倍した値が保存されており、GPU 温度はそのままの値が保存されているので確認してみました。

InfluxDB shell 起動

$ influx

telegraf データベースを指定

> use telegraf

CPU 温度データを確認

> select * from cpu_temperature limit 3
name: cpu_temperature
time                host  value
----                ----  -----
1587525500000000000 raspi 50464
1587525510000000000 raspi 50464
1587525520000000000 raspi 50464

CPU 温度は 50464 という値になっていますが、これは Telegraf で CPU データを取得するときに /sys/class/thermal/thermal_zone0/temp を参照しているためと思われます。実際は値を 1000 で割った 50.464度ですね。

ちなみに手動だと以下のように現時点の値を確認できました。

$ cat /sys/class/thermal/thermal_zone0/temp
54230

GPU 温度は以下のように、実際の温度が値として保存されていました。

> select * from gpu_temperature limit 3
name: gpu_temperature
time                host  value
----                ----  -----
1587525501000000000 raspi 50.5
1587525510000000000 raspi 49.9
1587525520000000000 raspi 50.5

CUP 温度とは異なり GPU 温度は以下のコマンドで取得しているためだと思われます。

$ /opt/vc/bin/vcgencmd measure_temp
temp=53.7'C

ダッシュボード追加

ブラウザで Grafana の GUI を開いて以下実行しました。

  • [Create (+ アイコン)] - [Dashboard]

  • CPU 温度を追加するために [Add Query] をクリック

  • 以下、Query のフォームで

    • [From] の [select measurement] をクリックして [cpu_temperature] を選択
    • [Select] の [field (value)]、[mean ()] に続く [+] をクリックして [Math] - [math] を選択
      • [math (/100)] が追加されたので [(/100)] をクリックして [(/1000)] に変更 (上で確認した通り、IfluxDB 上では 1,000倍された値なので 1,000 で割りました)
  • 画面右側の方の [Query Inspector] をクリックしてクエリを確認すると select 文でも / 1000 されていることが確認できました。

    SELECT mean("value") / 1000 FROM "cpu_temperature" WHERE time >= now() - 6h GROUP BY time(20s) fill(null)
    
  • 次に GPU 温度を追加するために [Add Query] をクリック

  • 追加された Query のフォームで

    • [From] の [select measurement] をクリックして [cpu_temperature] を選択
    • CPU 温度とは異なり、GPU 温度は InfluxDB に実温度が保存されている (1,000倍されていない) ので 1,000 で割る必要はありません
  • 画面上部のフロッピーアイコンの [Save dashboard] をクリックし、適宜ダッシュボード名等を入れて保存

CPU、GPU 温度のグラフを表示できました。

2020年5月11日月曜日

試しに Markdown で Sphinx ドキュメント作成



Sphinx はドキュメントを作成するためのツールであり reStructuredText を採用しています。

reStructuredText は Markdown と同様な軽量マークアップ言語のひとつで実際に使ってみるとなかなか使いやすいですが、Markdown と比べると Sphinx 以外では汎用的に採用されておりません。

そこで Sphinx で reStructuredText ではなく Markdown を使ってドキュメントを作成できるようにしてみました。

下にも書いてますが、何かワーニングが出ましたが一応 Markdown でドキュメントを書いて html に変換できました。

環境

  • Ubuntu 18.04.4 LTS (Windows10 WSL)

インストール

pipenv で Sphinx をインストールするのでまずは pipenv をインストール

$ sudo apt install pipenv

sphinx インストール用のディレクトリを作成して移動

$ mkdir /some/where/sphinx
$ cd /some/where/sphinx/

virtual environment 作成

$ pipenv --python $(which python3)

Sphinx インストール

$ pipenv install sphinx

Markdownパーサー recommonmark をインストール

$ pipenv install recommonmark

pipenv シェル起動

Sphinx をインストールした virtual environment でシェルを起動しました。

virtual environment に起動

$ cd /some/where/sphinx/

pipenv シェル起動

$ pipenv shell

Sphinx ドキュメントプロジェクト作成

上に描いた「pipenv シェル起動」を実行した状態で以下をやりました。

プロジェクト用のディレクトリを作成して移動

$ mkdir /some/where/document
$ cd /some/where/document/

プロジェクトファイル作成

$ sphinx-quickstart

いろいろ聞いてくるので以下のように入力してみました。

> Separate source and build directories (y/n) [n]: n
> Project name: test-markdown
> Author name(s): Nezuppo
> Project release []:
> Project language [en]: ja

以下のうようにディレクトリとファイルが作成されました。

$ tree -aF
.
├── Makefile
├── _build/
├── _static/
├── _templates/
├── conf.py
├── index.rst
└── make.bat

3 directories, 4 files

Markdown が使えるようにプロジェクトを設定

まずは conf.py を修正するのでバックアップをとる

$ cp conf.py{,.org}

以下のようになるよう、conf.py を修正。なお本題とは関係ありませんが好みで html_theme を bizstyle に変更しました。

$ diff -u conf.py{.org,}
--- conf.py.org 2020-05-10 14:51:51.652409000 +0900
+++ conf.py     2020-05-10 15:30:52.760240100 +0900
@@ -28,6 +28,7 @@
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
 extensions = [
+    'recommonmark'
 ]

 # Add any paths that contain templates here, relative to this directory.
@@ -51,9 +52,17 @@
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
 #
-html_theme = 'alabaster'
+html_theme = 'bizstyle'

 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 # so a file named "default.css" will overwrite the builtin "default.css".
 html_static_path = ['_static']
+
+
+
+source_suffix = {
+    '.rst': 'restructuredtext',
+    '.txt': 'markdown',
+    '.md' : 'markdown',
+}

Markdown でドキュメント作成

index.rst のファイル名を index.md に変更

$ mv index.rst index.md

この時点で index.md の中身はデフォルトで用意されたサンプルの reStructuredText なので、不要であることを確認して中身を削除し Markdown に書き換え

html に変換

$ make html

以下のワーニングが出ました。。。

/home/worker/.local/share/virtualenvs/sphinx-5rYzJHjd/lib/python3.6/site-packages/recommonmark/parser.py:75: UserWarning: Container node skipped: type=document
  warn("Container node skipped: type={0}".format(mdnode.t))

が、とりあえず _build/html が作成され、ブラウザで index.html を確認できました。

参考