CloudWatchのCustom Metricsを使ってみた(二番煎じ)

という記事を書こうとしたら、もうすでにid:mikedaさんの同じタイトルの記事が!
同じテーマを使ってらっしゃるので、一瞬自分で書いたのかと思ってしまうほどでしたw

せっかく(?)なので、AWSのリソースとはまったく関係ない数字だってモニタできますよ、という記事にしてみました。

CloudWatchのCustom Metricsとは?

AWSの監視サービスCloudWatchに新しく加わった機能で、ユーザが定義した任意の数値を監視することができます。
たとえば、OS内部でしか取れない情報(プロセス数とか)や、アプリケーションレベルの数値(例:ゲームのアクティブユーザ数)を監視することができます。
詳しくは「【AWS発表】 クラウド監視サービスAmazon CloudWatchでカスタムのメトリクスが使用可能に - Amazon Web Services ブログ」 をご覧ください。

何をモニタするのか?

これから夏にかけて部屋の温度をモニターしたいなと思いましたが、あいにくTCP/IPをしゃべれる温度計は持っていないので、常時稼動しているmacminiのHWモニター機能から温度をモニタしてみることにしました。

どうやって数字を得るか

temperature macos commandlineでググるこのサイトがひっかかりました。インストールしてみます。
マニュアルによれば、TemperatureMonitor.appの中にCLIツールtempmonitorが入ってるようです。試しに実行してみると、

$ /Applications/TemperatureMonitor.app/Contents/MacOS/tempmonitor -a -l
SMART Disk Hitachi HTS725050A9A362 (100526PCG420VLJ13N9C): 45 C
SMART Disk Hitachi HTS725050A9A362 (100526PCG420VLJ16ZAC): 44 C
SMB NORTHBRIDGE CHIP DIE: 72 C
SMB NORTHBRIDGE CHIP DIE: 77 C
SMC AMBIENT AIR: 43 C
SMC CPU A DIODE: 77 C
SMC CPU A HEAT SINK: 70 C
SMC CPU A PROXIMITY: 67 C
SMC DRIVE BAY 1: 39 C
SMC MAIN LOGIC BOARD: 59 C
SMC MEMORY BANK A POS 1: 66 C
SMC NORTHBRIDGE POS 1: 59 C
SMC OPTICAL DRIVE: 47 C
SMC POWER SUPPLY SENSOR 1: 55 C
SMC WLAN CARD: 55 C

みたいなoutputが得られました。こりゃ使える!ってことで、パースしてmon-put-dataに食わせます。

スクリプト

#!/bin/sh
/Applications/TemperatureMonitor.app/Contents/MacOS/tempmonitor -a -l | perl -pe '
($name,$value)=split(/:/);
$name=~s/\ /_/g;
$value=~s/\D//g;
$_="mon-put-data -namespace macmini -metric-name Temperature -dimensions \"location=$name\" -value $value &\n"
' | tee /dev/stderr | sh

非常に適当な作りですね。あとはこれを5分毎など、任意の間隔で実行するだけです。

$ while [ 1 ] ; do ./update_temp.sh ; sleep 300 ; done
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMART_Disk_Hitachi_HTS725050A9A362_(100526PCG420VLJ13N9C)" -value 45 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMART_Disk_Hitachi_HTS725050A9A362_(100526PCG420VLJ16ZAC)" -value 44 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMB_NORTHBRIDGE_CHIP_DIE" -value 73 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMB_NORTHBRIDGE_CHIP_DIE" -value 79 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_AMBIENT_AIR" -value 42 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_CPU_A_DIODE" -value 78 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_CPU_A_HEAT_SINK" -value 70 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_CPU_A_PROXIMITY" -value 68 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_DRIVE_BAY_1" -value 39 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_MAIN_LOGIC_BOARD" -value 60 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_MEMORY_BANK_A_POS_1" -value 66 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_NORTHBRIDGE_POS_1" -value 59 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_OPTICAL_DRIVE" -value 47 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_POWER_SUPPLY_SENSOR_1" -value 55 &
mon-put-data -namespace macmini -metric-name Temperature -dimensions "location=SMC_WLAN_CARD" -value 56 &

動作確認

しばらく走らせたら、Management Console側でグラフをチェックしてみます。

おお、ちゃんと描画されてる!

最後に注意事項

ひとしきり動かして満足してから、CloudWatchのPricingをチェックしてみました。

Asia Pacific(Tokyo)
Amazon CloudWatch Custom Metrics
$0.525 per metric per month

思わず2度見しました。この実験のために20metricsくらい作っちゃいました・・・。
監視するのは本当に必要な物だけにしましょう!