领事 - 如果驱动器已满则发出警报
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。
- 您看到的输出是由 Nagios 插件生成的 check_disk (https://www.monitoring-plugins.org/doc/man/check_disk.html)
- "Output" 字段由检查的标准输出填充。您的检查运行干净,没有产生任何输出。所以你什么都看不到。
- 要添加一些注释,只需在检查定义中添加一个 "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"
}
}
输出结果
在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。
- 您看到的输出是由 Nagios 插件生成的 check_disk (https://www.monitoring-plugins.org/doc/man/check_disk.html)
- "Output" 字段由检查的标准输出填充。您的检查运行干净,没有产生任何输出。所以你什么都看不到。
- 要添加一些注释,只需在检查定义中添加一个 "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"
}
}
输出结果