在Nagiosgraph中绘制多个磁盘卷

时间:2016-01-29 13:48:02

标签: ruby ubuntu nagios

我想在单个nagiosgraph中为服务器上的所有/ dev /卷绘制可用磁盘空间。我一直在关注教程here

本教程使用Ruby脚本使用以下代码检查整个磁盘结构:

used_space=`df -h / | grep -v "Filesystem" | awk '{print $5}'`

我有两个问题,如何最好地动态确定服务器具有哪些卷,然后如何将每个卷的可用空间输出到nagios perfdata,以便我可以为服务器上的每个卷获取一行。

这是我的完整脚本 - 感谢下面的答案:

#!/usr/bin/env ruby

def largest_hash_key(hash)
  hash.max_by{|k,v| v}
end

filesystem = %x(df -h)

perfdata = filesystem.split("\n")
                 .grep(/\A\/dev/)
                 .map(&:split)
                 .map{ |e| "'%s'=%s" % [ e[-1], e[-2] ] }
                 .join(" ")

volumes = Hash[perfdata.split(" ").map {|str| str.split("=")}]

volumes = volumes.map{ |k, v| [k, v.to_i] }

full_disk = largest_hash_key(volumes)

pc_full = full_disk[1]

message = "#{perfdata} | #{perfdata}" 

if pc_full > 94
   puts "DISK CRITICAL - #{message}"
   exit 2
elsif pc_full > 89
   puts "DISK WARNING - #{message}"
   exit 1
else
   puts "DISK OK - #{message}"
   exit 0   
end

1 个答案:

答案 0 :(得分:1)

更新:使用空格而不是新行加入,请参阅下面的标记。

假设您的脚本在Linux机器上运行,并且this是您通过nagios perfdata引用的格式,您可以写:

%x(df -h)
  .split("\n")
  .grep(/\A\/dev/)
  .map(&:split)
  .map{ |e| "'%s'=%s" % [ e[0], e[-2] ] }
  .join(" ")

将输出

'/dev/sda3'=50%
相关问题