我正在尝试配置 nagios 在 ubuntu 服务器上执行内存检查。我已经有了基本配置,但当尝试启动 nagios 时,会显示以下错误消息:
主机“xxxx”的服务“当前内存使用情况”中指定的服务检查命令“check_mem”未在任何地方定义!
除了commands.cfg之外,还有什么地方可以定义要执行的命令?
提前致谢,致以最诚挚的问候!
答案1
芮:
好的,这更清楚了。答案是 NAGIOS 可以在其任何配置文件中采用任何有效的配置语句,并且这些语句的数量可以不受限制。我有一个带有 136 个配置文件的 NAGIOS 服务器;其中任何一个都可以包含命令定义。
因此,如果您有一个正在运行的配置,它在某处定义,但不在commands.cfg中,那么坏消息是它可能在其任何配置文件中,而这些文件可以位于任何地方。
如果我想找到它,我会查看 nagios.cfg 以查看配置文件所在的目录,然后自动执行查找过程,也许使用
find /config/directory1 /config/directory2 /you-get-the-idea -type f -exec grep check_mem {} /dev/null \;
并查看找到什么匹配项。
答案2
你很可能想使用nagios nrpe 服务器在受监控的机器上并定义哪个插件应该执行此检查。
顺便说一句,也许你应该检查交换使用情况?
答案3
我找不到合适的脚本来检查内存,所以我写了下面的脚本。我按照上面的建议将它与 nrpe 一起使用。
主机配置中服务器上的服务定义:
define service { use generic-service host_name <hostname> service_description Memory Usage check_command check_nrpe_1arg!check_memory }
这需要在客户端的 /etc/nagios/nrpe.cfg 中定义,并修改您想要检查的值:
command[check_memory]=/usr/lib/nagios/plugins/check_memory.sh -w 85 -c 90
示例输出:
#:~$ ./check_memory.sh -w 80 -c 90
Memory OK. 44% used.
#:~$ ./check_memory.sh -w 40 -c 50
Memory WARNING. 44% used.
剧本:
#!/bin/bash
#
# Script to check memory usage on Linux. Ignores memory used by disk cache.
#
# Requires the bc command
#
print_help() {
echo "Usage:"
echo "[-w] Warning level as a percentage"
echo "[-c] Critical level as a percentage"
exit 0
}
while test -n "$1"; do
case "$1" in
--help|-h)
print_help
exit 0
;;
-w)
warn_level=$2
shift
;;
-c)
critical_level=$2
shift
;;
*)
echo "Unknown Argument: $1"
print_help
exit 3
;;
esac
shift
done
if [ "$warn_level" == "" ]; then
echo "No Warning Level Specified"
print_help
exit 3;
fi
if [ "$critical_level" == "" ]; then
echo "No Critical Level Specified"
print_help
exit 3;
fi
free=`free -m | grep "buffers/cache" | awk '{print $4}'`
used=` free -m | grep "buffers/cache" | awk '{print $3}'`
total=$(($free+$used))
result=$(echo "$used / $total * 100" |bc -l|cut -c -2)
if [ "$result" -lt "$warn_level" ]; then
echo "Memory OK. $result% used."
exit 0;
elif [ "$result" -ge "$warn_level" ] && [ "$result" -le "$critical_level" ]; then
echo "Memory WARNING. $result% used."
exit 1;
elif [ "$result" -gt "$critical_level" ]; then
echo "Memory CRITICAL. $result% used."
exit 2;
fi
答案4
问题是 nagios 服务器找不到check_nrpe_1arg
的定义。您可以在其他地方定义命令,例如 nagios-plugins
这里我通过插件中的define命令来解决问题
deploy@code:/etc/nagios-plugins/config$ pwd
/etc/nagios-plugins/config
deploy@code:/etc/nagios-plugins/config$ cat check_nrpe.cfg
# this command runs a program $ARG1$ with arguments $ARG2$
define command {
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}
# this command runs a program $ARG1$ with no arguments
define command {
command_name check_nrpe_1arg
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
要使用check_nrpe
或check_nrpe_1arg
,必须确保存在。在 Debian 系统中,您可以在 Nagios 服务器上/usr/lib/nagios/plugins/check_nrpe
安装包。nagios-nrpe-plugins