GainerとRubyで行うサーバ監視

Preview:

DESCRIPTION

サーバのロードアベレージが上がったらパトランプを点灯させるというシステムを作ってみました。

Citation preview

GainerとRubyで行うサーバ監視

CSNAGOYA 豊吉隆一郎

2

自己紹介

• 豊吉隆一郎(とよしりゅういちろう)• 1981年生まれ 名古屋在住• Blog http://www.jamboree.jp• フリーランスWebプログラマー• CSNAGOYA所属

3

CSNAGOYAについて

• カジュアルスタディ名古屋• http://www.jamboree.jp/cs/• 2007年2月11日発足• 毎週開催

4

今日の発表

5

GainerとRubyでつくるサーバの監視ツール

6

サーバ監視といってもいろいろある

何を監視するか

7

今回は

ロードアベレージCPUの処理待ちのプロセス数

8

1を超えると注意一概にそうとは言えないhttp://d.hatena.ne.jp/naoya/20070518/1179492085

9

サーバ監視普通のやりかた

10

有名なツール

HobbitNagios

SNMP+MRTGRRDTool+cacti

11

どう使われるか

緊急時に通知が来る

12

こういうメールがくる

13

あれ?

14

メール来るだけ?

15

地味じゃない?

16

緊急時というのは

17

有名アニメの例

18

有名海外ドラマの例

19

有名潜入ゲームの例

20

こうあるべき

21

そこで

22

「Gainer」

23

Gainerとは

• IOモジュールを中心としたフィジカルコンピューティングのための環境のこと

• 「ActionScript」「Max/MSP」「Processing」「Ruby」などから簡単にセンサやアクチュエータが扱える

公式サイト http://gainer.cc/

24

これを使って

25

ロードアベレージが上がったら

26

パトライトを点灯

27

テンション↑

28

製作物紹介

29

プログラム

30

Rubyスクリプト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

31

回路図

32

Gainerのanalog outの信号を5Vに増幅してリレーのスイッチを切り替えている。

33

デモ

34

まとめ

• サーバのロードアベレージを監視し、状況に応じてパトランプを点灯させるシステムを構築した

• GainerとRubyを使うことにより、IOの制御がとても簡単に行えた

35

今後の課題

• 既存の監視システムはいくつもあるので、それらと組み合わせるという形で、安価なパトランプ点灯ツールとして完成させる。

36

ご清聴有難う御座いました

Recommended