harry’s memorandum

おれおれメモ

rubyでssh(Net::SSH) - 2

リモートサーバに接続して色々できるということなので、nagiosでリモートサーバのメモリ監視をする簡単なpluginを書いてみた。
ここでのsshの認証はパスワードが生になっているけど、運用で使うには公開鍵認証にしないとね。

#!/usr/bin/env ruby

require 'net/ssh'

# nagios exit code
# exit status
# 0   OK
# 1   Warinig
# 2   Critical
# 3   Unknown

def usage
  puts "usage: #{__FILE__} host user password warning critical"
  exit
end

usage unless ARGV.size == 5

host,user,password,warning,critical = ARGV[0],ARGV[1],ARGV[2],ARGV[3],ARGV[4]
stdout = ""
Net::SSH.start(host, user, :password => password) { |ssh|
    ssh.exec!("free") { |channel, stream, data| stdout << data if stream == :stdout }
}

total = free = percent = 0
stdout.each {|s|
  a = s.split
  total = a[1].to_i if a[0] =~ /Mem:/
  free = a[3].to_i if a[1] =~ /cache:/
}
percent = ((total - free) * 100) / total

title = "Linux Used Memory - Free Command"
if critical.to_i < percent
  puts "CRITICAL - #{percent}% | #{title}"
  exit 2
elsif warning.to_i < percent
  puts "WARNING - #{percent}% | #{title}"
  exit 1
else
  puts "OK - #{percent}% | #{title}"
  exit 0
end

上記をcheck_mem.rbというコマンドで$NAGIOSHOME/libexec以下あたりに置いておいて、commands.cfgにコマンド登録すればOK。

define command{
  command_name    check_mem_rb
  command_line    $USER1$/check_mem.rb $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$ $ARG4$
}