サーバーのリソースを見るgostatを作りました¶
最近go言語を勉強し始めています。
ということで、勉強の一環として、サーバーのリソースを表示してくれる gostat というものを作成してました。
https://bitbucket.org/r_rudi/gostat
使い方¶
% mkdir gostat
% cd gostat
% export GOPATH=`pwd`
% go get bitbucket.org/r_rudi/gostat
で、gostat/bin/gostatという実行ファイルが出来上がります。
なにができるの?¶
iostatや dstat と同じように、 サーバーのリソース状態を表示してくれます。
現時点では
load avg
mem
cpu
aio
が取得できます。module構造にしているので、どんどん増やせますが、今はこ れぐらいです。
実行するとこんな感じです。
% ./bin/gostat
time:2013-05-30 21:35:33.781308848 +0900 JST tag:load load1:0.00 load5:0.00 load15:0.00
time:2013-05-30 21:35:33.78152943 +0900 JST tag:memory usage MemFree:168052 Buffers:133404 Cached:537612
time:2013-05-30 21:35:33.981724611 +0900 JST tag:cpu usr:0.00 sys:0.00 idl:0.00 wai:83.33 hiq:0.00
-i をつけると、指定した秒数ごとに表示を繰りかえします。
出力形式¶
さっきの表示を見て、iostatと違うな…、と思った方も多いと思います。標準 では LTSV 形式で標準出力に出します。
この他、
whitespace
csv
という表示形式に加えて、
http
mqtt
に対応しました。
これらは -o オプションで指定できます。
% ./bin/gostat -o csv
aio,load1,load5,load15,MemFree,Buffers,Cached,usr,sys,idl,wai,hiq,siq,stl
0,0.00,0.00,0.00,168176,133408,537612,0.00,0.00,0.00,125.00,0.00,0.00,0.00
http¶
httpを指定した場合、任意のURLにPOSTします。
% ./bin/gostat -o http http://fluentd.example.com:9880
ペイロードは、jsonというkeyでJSON形式を送ります。これはつまり、 fluentdのin_http が受け取 る形式と同じです。
mqtt¶
MQTT (MQ Telemetry Transport) とはM2M、 Machine-to-Machineでの通信のために作られたプロトコルです。オーバーヘッ ドがかなり小さい、publish/subscribe型のプロトコルです。
ブローカーと呼ばれるサーバーに対してpublish/subscribeを行います。 gostatは指定したブローカーに対してpublishします。
% ./bin/gostat -o mqtt -i 5 test.mosquitto.org:1883 gostat/rudi/
こうしておけば、
% mosquitto_sub -h test.mosquitto.org -t "gostat/rudi/#"
{"aio":"0","tag":"aio","time":"2013-05-30 12:51:59.28449373 +0000 UTC"}
{"load1":"0.00","load15":"0.00","load5":"0.00","tag":"load","time":"2013-05-30 12:51:59.284621107 +0000 UTC"}
{"Buffers":"133424","Cached":"537616","MemFree":"167648","tag":"memory usage","time":"2013-05-30 12:51:59.28478457 +0000 UTC"}
というように、JSON形式で受け取れます。
MQTTは AWSのmidiumサイズのインスタンスで100Kの同時接続をさばいたという 話 がある ようにかなり大規模に使えるプロコトルです。AMQPのようなQueueとしては(名 前に反して)使えませんが、大規模に通知する場合には使えるかと思います。
MQTTの話はまたの機会に。
まとめ¶
go言語の勉強として、リソースを取得してくれるgostatを作ってみました。単 に表示するだけでは面白くないので、LTSVにしてみたり、httpやMQTTを送って みたりといろいろ試してみました。
ちなみに中身はdstatをかなり真似しています。そしてdstatはLinuxべったりな んですよね…
あと、特色としてはMQTTに対応したところですね。MQTTは組み込みなど省リソー ス向けですし、go言語はクロスコンパイルが容易ですから相性はいいかもな、 と思っているところです。
まだまだ実装した部分は少ないので、需要があればもっといろいろな情報を取 れるように実装していきます。
Comments