![具有自定义视图/模板的监控工具?](https://linux22.com/image/565306/%E5%85%B7%E6%9C%89%E8%87%AA%E5%AE%9A%E4%B9%89%E8%A7%86%E5%9B%BE%2F%E6%A8%A1%E6%9D%BF%E7%9A%84%E7%9B%91%E6%8E%A7%E5%B7%A5%E5%85%B7%EF%BC%9F.png)
我目前正在寻找开源监控解决方案,例如 zabbix 和 icinga。虽然这两个软件似乎在监控硬件和软件的一般状态方面都非常强大,但我缺少对我来说很重要的功能信息,或者我无法通过阅读它们的文档来弄清楚它是如何工作的。
我想在这样的监控工具中集成一些作业队列。一方面,我需要了解队列的摘要信息,如通用可用性等,这些信息与这些工具之一集成起来没有问题。另一方面,我想获得有关队列中正在发生的事情的更多详细信息。
我想开发一个插件,它可以返回任意数量的详细数据 - 比如有关存储在队列中的每个作业的信息 - 我可以填写自定义视图/模板,然后可以很好地将其集成到其中一个监控工具中。
使用 zabbix、icinga 或任何其他开源监控解决方案可以实现这一点吗?
答案1
您考虑过 Nagios 吗?它允许人们编写插件(使用任何语言),并且通常可以轻松地将它们集成到监控框架中。事实上,所有运行 Nagios 的用户都可能有一个插件可以满足您的要求。
为了在队列中存储有关作业或特定内容的更多具体信息,您可以考虑使用 Nagios 收集代理构建一些简单的 Web CGI 脚本以从服务器获取所需的数据。
由于 Nagios 在 Apache 下运行,因此这可能是一种可行的方法。
答案2
由于您添加了nagios
标签,我会用它和 NRPE 为您提供一个示例。
首先,用你喜欢的语言编写你自己的插件。记住返回代码:
0 - OK
1 - WARNING
2 - CRITICAL
3 - UNKNOWN
以下是用于监视 Redis 中列表长度的 shell 脚本片段:
#!/bin/sh
help()
{
echo "Usage: $0 <host> <port> <key> -w <warning> -c <critical>"
}
case "$1" in
--help)
help
exit
;;
esac
if [ $# -eq 0 ]; then
help
exit 3
fi
if [ $# -ne "7" ]; then
help
exit 4
fi
if [ $4 !="-w" -o $6 !="-c" ]; then
help
exit 5
fi
REDIS_CLI="/usr/local/bin/redis-cli"
LLEN=`echo "$3" | $REDIS_CLI -h $1 -p $2 llen`
if [ $LLEN -lt $5 ]; then
echo "$3.llen:$2 OK - $LLEN | $3.llen:$2=$LLEN;$5;$7"
exit 0
elif [ $LLEN -ge $5 -a $LLEN -lt $7 ]; then
echo "$3.llen:$2 WARNING - $LLEN | $3.llen:$2=$LLEN;$5;$7"
exit 1
elif [ $LLEN -ge "$7" ]; then
echo "$3.llen:$2 CRITICAL - $LLEN | $3.llen:$2=$LLEN;$5;$7"
exit 2
fi
其次,在中定义一个命令/etc/nagios/nrpe.cfg
,如下所示:
command[check_queue]=/usr/lib64/nagios/plugins/check_queue.sh <host> <port> \
<queue_name> -w <warning_threshold> -c <critical_threshold>
第三,在 Nagios 服务器上,可以使用以下命令调用此插件:
define service{
use generic-service
host_name <remote_server>
service_description <queue_name>
check_command check_nrpe!check_queue
contact_groups admin-sms
}