在 Nagiosgraph 中绘制多个磁盘卷
Graphing multiple disk volumes in Nagiosgraph
我想绘制单个服务器上所有 /dev/ 卷的可用磁盘 space 图 nagiosgraph.I 一直在学习教程 here
本教程使用 Ruby 脚本使用此代码检查整个磁盘结构:
used_space=`df -h / | grep -v "Filesystem" | awk '{print }'`
我有两个问题,如何最好地动态确定服务器有哪些卷,然后如何将每个卷的免费 space 输出到 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
更新:使用空格而不是新行连接,请参阅下面的 markhorrocks 评论。
假设您的脚本是 运行 在 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%
我想绘制单个服务器上所有 /dev/ 卷的可用磁盘 space 图 nagiosgraph.I 一直在学习教程 here
本教程使用 Ruby 脚本使用此代码检查整个磁盘结构:
used_space=`df -h / | grep -v "Filesystem" | awk '{print }'`
我有两个问题,如何最好地动态确定服务器有哪些卷,然后如何将每个卷的免费 space 输出到 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
更新:使用空格而不是新行连接,请参阅下面的 markhorrocks 评论。
假设您的脚本是 运行 在 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%