ruby - 在 Nagiosgraph 中绘制多个磁盘卷

标签 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

最佳答案

更新:加入空格而不是新行,请参阅下面的 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%

关于ruby - 在 Nagiosgraph 中绘制多个磁盘卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35086133/

相关文章:

ruby - ruby 文档中的 module_function 示例

ruby - 在没有电子邮件的情况下在 ruby​​ 上使用电子邮件

c - 预期 ‘;’ 在 ‘{’ token 行 28 之前

apache - 无法查看神经节仪表板

ruby - 如何更改 Ruby 中 FFI 调用的 STDOUT?

Ruby 未定义方法 '+' 为 nil :NilClass

ubuntu - 如何在 Ubuntu 20 上下载 gcc v4.4.3 版本?

ubuntu - 回声HADOOP_HDFS_HOME的环境变量不起作用

ubuntu - 安装 pycharm Ubuntu

linux - 无法为 nagios 配置远程 nrpe 插件