USBRH+Cactiで室温モニタリング(2)
さて。USBRHが動くようになったところで、Cacit でグラフ作ってみよう。グラフの作り方についてはマニュアル参照。
- Cacti Manual
- PDF版とかは このへんから落とせる。
- 検索してみたら日本語訳があるのか… サバカン | 技術情報 > The Cacti Manual 日本語訳
グラフ作るあたりの情報は
にある。
Step.1: Data Input Method の作成
Data Input Method はそのまま、データを取得する方法の定義のこと。SNMPで値を get するもよし、何らかのスクリプトを起動してデータを取得するもよし。
Cacti Manual は Data Input Methods を参照。
- [Console]-"Collection Methods" [Data Input Methods]
- Data Input Methods 一覧の右上 [Add] で新規作成画面へ
- 以下の項目をいれて [Create]
sh <path_cacti>/scripts/my_room_rh.sh
スクリプトはこんな感じで用意しておく。単にデータとって表示するだけ…なのだけど、データの出力フォーマットにルールがあるので注意(後述)。デバイスアクセスしているときにLED光らせて動作が見えるようにする……というのがやりたいがためにわざわざ Driver プログラムいじったりね…。
#!/bin/sh usbrh_dir="/proc/usbrh/0" src_temp=${usbrh_dir}/temperature src_humi=${usbrh_dir}/humidity src_led=${usbrh_dir}/led echo 1 > $src_led val_temp=`cat $src_temp` val_humi=`cat $src_humi` echo "temperature:$val_temp humidity:$val_humi" echo 0 > $src_led
実行してみる。
$ sh my_room_rh.sh temperature:29.55 humidity:60.36
- [Create]クリック Save すると、"Input Fields" / "Output Fields" の項目が出てくる。
- "Input Fields" はデータ取得用スクリプトに渡すデータ(引数)の定義なのだけど、今回は特にないので放置。
- "Output Fields" はスクリプトを実行して得られるデータを定義する。今回は、"temperature", "humidity" の二つの値を取得する。Making Your Scripts Work With Cacti に書いてあるとおり、スクリプトがひとつのデータを返す場合は、値だけを出力する/複数のデータを返す場合はラベルをつけて返す、というルールがある。
: : ... :
-
- で、ここで設定するラベル(fieldname) は、"Data Input Method" で設定する "Output Fields" の Field Name とマッチさせる必要がある。
Step.2: Data Template の作成
これは要するに、RRDTool の Data Source の定義のこと。この Data Template と 次の Graph Template は RRDTool でグラフを作る上で必要な情報の定義なので、RRDTool の話がわからない場合はそちらを参照する必要がある。
- [Console]-"Templates" [Data Templates]
- Data Templates 一覧の右上 [Add] で新規作成画面へ
- 以下の項目をいれて [Create]
- "Data Templates Name" は適宜
- "Data Source"
- 中身については RRDTool の知識が必要…なのだけど、まあ、そのほかのグラフとあわせてしまうのが手っ取り早い。それで困ることはまあないと思うので。
- "Data Input Method" でどこから取得したデータについて Data Source 定義をするのかを指定。
- "Data Source Item"
- USBRHからとれるデータが二つ(temperature/humidity)あるので、2つまとめたグラフを作るとする。
- グラフを作る上では少なくとも一つは Data Source を定義する必要があるので、とりあえず temperature について項目を入れる。--"Data Source Type" : 温度は連続値なので GAUGE を選択。そのほかについてはTemplates を参照。
- "Outpu Fields" : "Data Source" で指定した Data Input Methods 内にある Output Field が選択できるので、temperature を指定。
- Create をクリックして Save すると、"Data Source Item" で "temperature" タブができる。右端の [New] をクリックして同様に "humidity" について情報を入れる。
Step.3: Graph Template の作成
引き続き RRDTool 周りの設定で、グラフ句作性で必要なオプション、CDEFなどの定義をする。
Cacti Manual は Graph Templates を参照。
- [Console]-"Templates" [Graph Templates]
- Graph Templates 一覧の右上 [Add] で新規作成画面へ
- 以下の項目をいれて [Create]
- Graph Template Name は適宜。
- "Graph Template"
- だいたいデフォルトでよい。あるいはほかのグラフの内容を元に決めてしまうのが手っ取り早い。
- Create クリックして Save すると、"Graph template Items", "Graph Item Inputs" の項目が出てくる。
- "Graph Template Items" : グラフ描画項目(つまり、グラフの「線」の定義)、凡例そのほかの項目定義。グラフ描画するもの(線) の場合、Data Source (Data Template) との関連づけを "Data Source" 欄で指定する。
- "Graph Item Inputs" : 線以外にも、グラフ内に数値情報を埋め込んだりできるのだけど(最大値・最小値など)、それらの項目をどのデータソースの情報からとるか、を設定する。
"Graph Template Item" の設定画面はこんな感じ。
"Graph Item Inputs" の設定画面はこんな感じ。
Step.4: Host Template の作成
Graph Template まででグラフ作る上で必要な情報は終わりなのだけど、どうせなので Host Template にも入れてみる。Cacti の場合、最初にモニタリング対象を登録したときに Host Template を割り当てて、Host Template 内で関連づけられている Graph から必要なものを選択して作っていくという流れになる。ということで、Host Template へのグラフ割り当てを行うことで新しいデバイス登録時のグラフ作成の手間を減らしたり作り忘れを防いだりというのができる。
Cacti Manual は Host Templates
Step.5: ホストへのグラフ追加
あとは適宜グラフを追加したいホストを選んでグラフを作る。USBRH の場合もちろん localhost に作る。
- [Console]-"Management" [Devices]
- Device 一覧から localhost を選択する。
- "Associated Graph Templates"
- 追加したい Graph Template を指定して [Add]
で終わり。(まあ、USBRH についてはとりあえず localhost にしかないので、Host Template への追加は蛇足ですが…)
確認
これでこんなのが出ます。
- 最上段(Last Day): 〜0:00 くらいまではエアコンつけてる。湿度・温度ともに小刻みに変化しているのはそのせい。その後、窓あけて就寝〜8:00 くらいには窓閉めて出勤。日中はほとんど温度変化が内。20:00 過ぎに帰宅して窓開放したので温度・湿度が変化。今日は雨で気温が低い。
- 2段目(Last Week): 7/11 の最初のあたりは USBRH driver じゃなくて、アプリの方(usbrh-0.05)でやっていたのだけど、driver 版に切り替えたら全体的に湿度の数値が上がった。卓上湿度計の数字に近いのは driver 版なのだけど、その辺値に違いがあるのかとかは切り分けはしていない…。
Cacti なので、最初の Template 作成とかは面倒だけど、一度作ってしまえばあとはとても楽。グラフの設定変更なども WebUI 上でいじればよいしね。