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
 
