领事 - 如果驱动器已满则发出警报

Consul - Alert if drive is full

在consul的demo中,有对磁盘利用率和内存利用率的检查。

http://demo.consul.io/ui/#/ams2/nodes/ams2-server-1

您如何编写配置来执行演示显示的操作? 10% 的警告和 5% 的严重错误?

这是我正在尝试的

{
  "check": {
     "name": "Disk Util",
     "script": "disk_util=$(df -k | grep '/dev/sda1' | awk '{print }' | sed 's/[^0-9]*//g' ) | if [ $disk_util >  90 ] ; then echo 'Disk /dev/sda above 90% full' && exit 1; elif [ $disk_util > 80 ] ; then echo 'Disk /dev/sda above 80%' && exit 3;  else exit 0; fi",
     "interval": "2m"
     }
}

这是相同的脚本,但更易读

disk_util=$(df -k | grep '/dev/sda1' | awk '{print }' | sed 's/[^0-9]*//g' ) | 
if [ $disk_util >  90 ] 
 then echo 'Disk /dev/sda above 90% full' && exit 1
elif [ $disk_util > 80 ] 
 then echo 'Disk /dev/sda above 80%' && exit 3
else exit 0; fi

检查似乎有效,但没有打印出任何文本。我怎样才能验证这是有效的,并打印输出?

健康检查依赖于检查的退出代码。要测试 Consul 服务器是否正在读取健康检查,您可以编写一个始终以 1 退出的脚本,然后您将看到健康检查失败。然后将其替换为始终 returns 0 的脚本,您应该会看到健康检查已通过。

如果您想 return 文本到 ui,请将 output 字段添加到 json。

  1. 您看到的输出是由 Nagios 插件生成的 check_disk (https://www.monitoring-plugins.org/doc/man/check_disk.html)
  2. "Output" 字段由检查的标准输出填充。您的检查运行干净,没有产生任何输出。所以你什么都看不到。
  3. 要添加一些注释,只需在检查定义中添加一个 "notes" 字段,如文档中所述:https://www.consul.io/docs/agent/checks.html

您的支票 json 文件看起来像这样:

{
  "check": {
    "name": "disks",
    "notes": "Critical 5%, warning 10% free",
    "script": "/path/to/check_disk -w 10% -c 5%",
    "interval": "2m"
  }
}

您的警告状态的退出代码应为 1,严重时为 2 或更高。 (请参阅 https://www.consul.io/docs/agent/checks.html 中的 "Check Scripts"),因此您可能想要交换退出线。

您的 'OK' 状态(磁盘使用率 < 80%)没有给出任何输出,这很可能是您看到空白输出的原因。

我支持使用 nagios 插件而不是自己开发插件的想法。许多操作系统都会有一个 yum/apt 安装的 nagios-plugins 包。

consul 似乎只分析 stdout 而不是 stderr。我已经在服务检查文件配置中使用重定向( 2>&1 )进行了测试。这似乎行得通!

JSON 配置

{
  "check": {
    "name": "disks",
    "notes": "Critical 5%, warning 10% free",
    "script": "/path/to/check_disk -w 10% -c 5% 2>&1",
    "interval": "2m"
  }
}

输出结果