æ°ç¾å°ã®ãµã¼ãã«å¯¾ãã¦
- CPU
- ã¡ã¢ãª
- HDD
ã®ä½¿ç¨ç¶æ³ããµã¯ãã¨ãã§ãã¯ããããªã¼ã¨æã£ãã®ã§ããããããã«muninã®ã°ã©ãã§è¦ãã®ã¯ãã«ãããã
ã¨ããããã§æ¥æ¬¡ã§ãããããã¼ã¸ãä½ã£ã¦ãã§ãã¯ããããã«ãã¾ããã
ä¸è¨ã®æ
å ±ãæ°åã§ãã¼ã£ã¨ä¸¦ãã§ã¦ãã¤ãã§ã«ç°¡åã«è²ä»ãã¨ããmuninã¸ã®ãªã³ã¯å¼µãã¨ããåé
ç®ã§ã®ã½ã¼ãæ©è½ä»ãããã¨ãããã£ã¦ã¾ãã
CPUã¨ã¡ã¢ãªã®ä½¿ç¨çã¯åæ¥ã®å¹³åããã£ã¹ã¯ä½¿ç¨çã¯ãããå®è¡æã®å¤ã§ãã
æåã¯muninã®RRDãã¡ã¤ã«ããä½ãããã¨æã£ãã®ã§ããï¼gistï¼ããã®ç¨åº¦ã®æ å ±ãªãsysstatãdfã®çµæããä½ãã»ããç°¡åãªã®ã§ãsshã§éãã¦ãããã¨ã«ãã¾ããã
ã¨ããããHTMLã«åºåãã¦ã¾ãããCSVã§åºãããDBã«çªã£è¾¼ãã ãããã°å種調æ»ã«ä¾¿å©ã§ããï¼
ã½ã¼ã¹ã³ã¼ã
Ruby1.9çã§ã
#!/usr/local/bin/ruby require 'net/ssh' require 'json' require 'erb' require 'pp' server_list_file = "/home/mikeda/check_servers/sv.list" # ãã®ãã¡ã¤ã«ã«èª¿æ»å¯¾è±¡ã®ãã¹ããè¨è¼ erb_template_file = "/home/mikeda/check_servers/resource.html.erb" def summarize_cpu(sar_cpu) _, _, user, nice, system, iowait, steal, idle = sar_cpu.split(/\s+/) { user: user.to_f, nice: nice.to_f, system: system.to_f, iowait: iowait.to_f, steal: steal.to_f, idle: idle.to_f } end def summarize_memory(sar_memory) _, kbmemfree, kbmemused, memused, kbbuffers, kbcached, kbcommit, commit = sar_memory.split(/\s+/) mem = { kbmemfree: kbmemfree.to_i, kbmemused: kbmemused.to_i, memused: memused.to_i, kbbuffers: kbbuffers.to_i, kbcached: kbcached.to_i, kbcommit: kbcommit.to_i, commit: commit.to_f } total = ( mem[:kbmemfree] + mem[:kbmemused] ) / 1024 used = ( mem[:kbmemused] - mem[:kbbuffers] - mem[:kbcached] ) / 1024 { total: total, used: used, usage: (100 * used.to_f / total).to_i } end def summarize_disk(df) disk = {} df.split("\n").each do |d| filesystem, size, used, avail, usage, mount = d.split(/\s+/) disk[mount] = { filesystem: filesystem, size: size.to_i, used: used.to_i, avail: avail.to_i, usage: usage.chop.to_i } end # /varãåå¥ã«ãã¦ã³ãããã¦ããã°ãã®æ å ±ããã以å¤ã¯/ã®æ å ±ãè¿ã disk['/var'] || disk['/'] end servers = open(server_list_file).readlines.map(&:chomp) resources = {} YESTERDAY_SAR = "/var/log/sa/sa#{(Date.today - 1).strftime("%d")}" servers.each do |host| begin Net::SSH.start(host, 'mikeda') do |ssh| resources[host] = {} sar_cpu = ssh.exec!("LANG=C sar -f #{YESTERDAY_SAR} | tail -1") resources[host][:cpu] = summarize_cpu(sar_cpu) sar_memory = ssh.exec!("LANG=C sar -r -f #{YESTERDAY_SAR} | tail -1") resources[host][:memory] = summarize_memory(sar_memory) df = ssh.exec!("LANG=C df -lmP | sed 1d") resources[host][:disk] = summarize_disk(df) end rescue => e STDERR.puts "#{host}: #{e.message}" end end ### HTMLåºåç¨ def color(value, warn, critical) if value > critical 'red' elsif value > warn 'yellow' else '' end end def color_cpu_usr(usage); color(usage, 30, 60) end def color_cpu_sys(usage); color(usage, 5, 10) end def color_cpu_io(usage); color(usage, 5, 10) end def color_memory(usage); color(usage, 60, 80) end def color_disk(usage); color(usage, 60, 80) end puts ERB.new(File.read(erb_template_file)).result ### JSONåºåç¨ #puts JSON.pretty_generate(resources)
ã¨ããããã³ã¤ããcronã§æ¯æ¥å®è¡ãã¦ã¾ã
7 7 * * * /home/mikeda/check_servers/check_server_resource.rb > /var/www/html/files/check_servers/resource/resource_`date +\%Y\%m\%d`.html
ERBãã³ãã¬ã¼ã
åé ç®ã§ã½ã¼ãã§ããããã«コレ使ã£ã¦ã¾ã
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ãµã¼ããªã½ã¼ã¹ãã§ãã¯</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript" src="/files/js/joequery-Stupid-Table-Plugin/stupidtable.min.js"></script> <script type="text/javascript"> $(function(){ $("table").stupidtable(); }); </script> </style> </head> <body> <table border="1"> <thead> <tr> <th data-sort="string">Host</th> <th data-sort="float">user</th> <th data-sort="float">system</th> <th data-sort="float">io</th> <th data-sort="float">idle</th> <th data-sort="int">ã¡ã¢ãªä½¿ç¨ç</th> <th data-sort="int">ãã£ã¹ã¯ä½¿ç¨ç</th> </tr> </thead> <% resources.each do |host, r| %> <tr> <td><a href="http://munin.mikeda.jp/server/<%= host %>/index.html#system"><%= host %></a></td> <td align="right" bgcolor="<%= color_cpu_usr(r[:cpu][:user]) %>"><%= r[:cpu][:user] %></td> <td align="right" bgcolor="<%= color_cpu_sys(r[:cpu][:system]) %>"><%= r[:cpu][:system] %></td> <td align="right" bgcolor="<%= color_cpu_io(r[:cpu][:iowait]) %>"><%= r[:cpu][:iowait] %></td> <td align="right" ><%= r[:cpu][:idle] %></td> <td align="right" bgcolor="<%= color_memory(r[:memory][:usage]) %>"><%= r[:memory][:usage] %>%</td> <td align="right" bgcolor="<%= color_disk(r[:disk][:usage]) %>"><%= r[:disk][:usage] %>%</td> </tr> <% end %> </table> </body> </html>
ãªãã§ãããã§ãmuninãZabbixã®ã°ã©ãã§è¦ããã¨ããã®ã¯éå¹ççã§ããï¼