パトランプでサーバ監視 with Gainer,Ruby
CSNagoyaのLTで「RubyとGainerで行うサーバ監視」というタイトルで発表しました。
概要
「サーバがピンチだっていうのにアラートメールが届くだけなんて地味すぎだろ」
というコンセプトのもとに、サーバのロードアベレージをチェックし、高いようであればパトランプを点灯させるというものを作ってみました。本来のサーバ監視という意味ではロードアベレージだけチェックするのはいまいちですが、そのあたりは改良していきたいと思います。むしろRubyとGainerだけで、こんなに簡単にできるんだということが伝われば幸いです。
動作している様子
といっても、パトランプが点灯するだけですが。仕事中に突然これが光りだすのはエキサイティングです。
システム概要
非常に単純ですね。調査もとのマシンから、監視対象サーバにSSHでログインしてロードアベレージをチェックします。その後ロードアベレージが一定の値を超えていたらGainer経由でパトランプを点灯させます。
回路
パトランプは12Vで動くものです。ネタのためだけに欲しかっただけなのに6000円もして悲しかった。
回路図はこんな感じです。Gainerから出る信号は弱い(多分3Vぐらい?)なので当然パトランプを直接点灯させられません。そこでパトランプにはリレーと12Vの電源をつけてやり、そのリレーのON/OFFをトランジスタによるスイッチで行いました。
コード
たったこれだけのコードでできるというのが驚きです。Gainerとのやり取りはFunnelというソフトを使いました。GainerやArduinoに対応した便利なツールキットのことでIOのフィルタなどをいい感じにやってくれるものです。
-
require 'rubygems'
-
require 'net/ssh'
-
require 'funnel'
-
-
def get_load_average(str)
-
return str.slice(/load average: ([^,]+)/,1).to_f
-
end
-
-
module Funnel
-
la = 0.0
-
Net::SSH.start(ARGV[0], ARGV[1], :password => ARGV[2]) do |ssh|
-
la = get_load_average(ssh.exec!('uptime'))
-
end
-
-
if la> 2
-
gio = Gainer.new(Gainer::MODE1)
-
gio.aout(0).value = 1
-
sleep(300)
-
end
-
end
発表資料
まとめ
今回はGainerとRubyでパトランプを点灯させてみました。Gainerについて興味をもったかたは以前エントリーを書きましたのでそちらをご覧下さい。
また8月に開催されるOSC NAGOYAには開発者の小林茂さんが講演に来てくださいます。
お近くのかたは是非ご参加ください。