RubyからSNMPを使ってみる
RubyからSNMPを使ってみたかったので、自分用開発サーバのCPU負荷とメモリ負荷をゲットして、閾値を越えていたら@dabesaから自分宛にMentionを飛ばすようにしてみた。以下ソース。
#! /usr/bin/ruby -Ku require 'rubygems' require 'snmp' require 'oauth' require 'rubytter' begin mess = "" cpu=0,mem=0,mema=0,memb=0,memc=0,memp=0 manager = SNMP::Manager.new(:Host => 'localhost', :Community => 'COMMUNITY') response = manager.get(["1.3.6.1.4.1.2021.10.1.3.2"]) response.each_varbind {|vb| cpu = vb.value } response = manager.get(["1.3.6.1.4.1.2021.4.5.0"]) response.each_varbind {|vb| mem = vb.value } response = manager.get(["1.3.6.1.4.1.2021.4.6.0"]) response.each_varbind {|vb| mema = vb.value} response = manager.get(["1.3.6.1.4.1.2021.4.14.0"]) response.each_varbind {|vb| memb = vb.value} response = manager.get(["1.3.6.1.4.1.2021.4.15.0"]) response.each_varbind {|vb| memc = vb.value} memp = ((mem.to_f - (mema.to_f + memb.to_f + memc.to_f)) / mem.to_f) * 100 if cpu.to_f > 14 or memp.to_f > 80 then mess = "@smokeymonkey CPUの5分平均ロードアベレージが" + cpu + "、メモリ使用率が" + sprintf("%.2f", memp) + "% だべさ!" consumer = OAuth::Consumer.new( "CONSUMER_KEY", "CONSUMER_SECRET", :site => 'http://twitter.com' ) token = OAuth::AccessToken.new( consumer, "REQUEST_TOKEN", "REQUEST_TOKEN_SECRET" ) client = OAuthRubytter.new(token) client.update(mess) end manager.close rescue print "RuntimeError: ", $!, "\n"; end