auのPHOTO-Uをサーバ監視システムにしてみた
aquappleさんの本体価格0円のAndroidスマートフォン「IS01」を購入、月額料金8円で運用する方法に触発されて、週末にIS01を2台ゲット。
近場を5軒ほど回って、6軒目で「PHOTO-Uと抱き合わせなら初期費用0円で」との事だったので、渋々PHOTO-Uも一緒に契約する事にしました。月390円/台なのでたかが知れてますけどね。
IS01のレビューはまた後ほどエントリにする事にして、PHOTO-Uの使い道をアレコレ模索してみる事にしました。
そもそもPHOTO-Uって
「デジタルフォトフレーム」といって、端末毎に固有のメールアドレスが発行されて、そのメアドに画像添付して送る事で、液晶端末に画像が表示される物です。
一般的には遠く離れた家族に元気な姿を見せるとか、田舎に住んでいるおじいちゃんおばあちゃんに孫の姿を気軽に見てもらうとか、玄関の飾りとして画像を表示させる、といった使い方をするみたいなのですが、、
同じ月390円/台払うなら、何か変わった使い方したいじゃないですか。
普通にiPhoneなんかで撮った写真をローテーションさせてもつまんないじゃないですか。
そうだ、サーバ監視に使っちゃおう
普段外部に置いているVPS×5と、占有サーバ×1はcactiに監視させていて、iPhoneに最適化してないのでちょっと見るにはしんどい。Macも常に起動させている訳ではないので、PHOTO-Uに表示させちゃいましょう。
仕組みは
ざっくりとこんな感じ。
- cactiのグラフを収集
- 4つのグラフを1つの画像に結合、その時にJPEGに変換。
- PHOTO-U端末のメールアドレスに送信
試しにフォトショで手動で結合した画像をPHOTO-Uに送ってみたところ、
意外といけてるかも!
その前に、PHOTO-Uの設定をします。
初期状態では携帯ドメインからのみの受信設定なので、cactiサーバからも受信できるようにします。
詳しい手順は割愛。
cactiのグラフ画像を結合して、メールで送る。
- 画像を扱いやすいImageMagickをcactiサーバにインストールしました。
yum -y install ImageMagick
- cactiからグラフを取得する方法ですが、自動化の為にwgetで行います。cron化させる為に簡単なシェルスクリプトを組みました。即興で作ったのでエラー処理なんかは無視です。
#!/bin/shtime1=`date +%s`time1=`expr $time1 – 86400`time2=`date +%s`wget -O sv1_traf.png “http://localhost/cacti/graph_image.php?local_graph_id=1&rra_id=0&graph_height=120&graph_width=300&graph_nolegend=true&view_type=tree&graph_start=$time1&graph_end=$time2”wget -O sv1_disk.png “http://localhost/cacti/graph_image.php?local_graph_id=2&rra_id=0&graph_height=120&graph_width=300&graph_nolegend=true&view_type=tree&graph_start=$time1&graph_end=$time2”wget -O sv1_cpu.png “http://localhost/cacti/graph_image.php?local_graph_id=3&rra_id=0&graph_height=120&graph_width=300&graph_nolegend=true&view_type=tree&graph_start=$time1&graph_end=$time2”wget -O sv1_mem.png “http://localhost/cacti/graph_image.php?local_graph_id=4&rra_id=0&graph_height=120&graph_width=300&graph_nolegend=true&view_type=tree&graph_start=$time1&graph_end=$time2”
★変数time1,time2は取得期間をUNIXタイムで指定します。ここでは過去24時間分=86400秒でレンジを指定しました。また、引数のlocal_graph_id=はcactiのブラウザ画面で画像のURLを参照して取得しました。
- 取得した画像をImageMagickで結合します。あまり効率がよくないのですが、左側と右側でそれぞれ結合、最後にまとめて結合しています。
convert -append sv1_traf.png sv1_disk.png sv1_left.png
convert -append sv1_cpu.png sv1_mem.png sv1_right.png
convert +append sv1_left.png sv1_right.png sv1.jpg
- 画像の結合はこれでうまく行きますが、メール送信は添付付きの場合コマンド1個で、という訳には行かなかったので、(uuencodeはPHOTO-Uのゲートウェイサーバが受け付けてくれない)簡単なperlスクリプトを噛ます事にしました。これも即興なのでエラー処理などは省いています。
#!/usr/bin/perl
use Jcode;
use MIME::Lite;
$maildata = “”;
&mail_send;
print “mail送信完了\n”;
exit;
sub mail_send {
$mail = ‘xxxxxx@photo-u.jp’;
$mailfrom = ‘daisuke@hoge.hoge’;
$subject = $ARGV[0];
$maildata = jcode($maildata)->jis;
my $msg = MIME::Lite->new(
From => “$mailfrom”,
To => “$mail”,
Subject => “$subject”,
Type => ‘multipart/mixed’
);
$msg->attach(
Type => ‘text/plain; charset=”iso-2022-jp”‘,
Data => “$maildata”
);
$msg->attach(
Type => ‘image/jpeg’,
Path => $ARGV[1],
Filename => $ARGV[2],
Encoding => “Base64”,
Disposition => ‘attachment’
);
$msg->send();
}
- 前述で結合した画像をメール添付して送ります。
perl mailsend.pl ‘sv1’ ./sv1.jpg sv1_$time2.jpg
- wget〜メール送信までを、PHOTO-Uに表示させたい台数分だけ繰り返します。
- 作成したスクリプトは、cronで30分に1回回す事にしました。
PHOTO-Uにcacti画像を表示させるデメリット。
PHOTO-Uに内蔵のメモリ、もしくはSDメモリ内にある画像をループするので、時間が経ったcacti画像まで延々にループする事になります。
当然この様な用途は想定されていないので、手動で画像削除をする必要が出て来ます。
1日に1度はメモリ内画像を全消去した方が良いかもしれません。
PHOTO-U側で表示させる画像を直近○枚、とか、○時間以内にメールで届いた物、とかに設定できれば完全自動化、まではいかないものの、手間を掛けずに済むかもしれません。
細かく制御するなら、もう1台のIS01に自作Androidアプリを入れて、そこで実行させた方が効率は良いのかも。