Le monitoring de la mémoire est fait maison via un code shell ancestral transmit de geek en geek dont l'origine se perd dans epoch.
#!/bin/bash
#nagios exit code
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
help () {
local command=`basename $0`
echo "NAME
${command} -- check memory status
SYNOPSIS
${command} [OPTION]
DESCRIPTION
-w warning=
-c critical=
USAGE:
$0 -w 50% -c 60%" 1>&2
exit ${STATE_WARNING}
}
check_num () {
local num_str="$1"
echo ${num_str}|grep -E '^[0-9]+$' >/dev/null 2>&1 || local stat='not a positive integers!'
if [ "${stat}" = 'not a positive integers!' ];then
echo "${num_str} ${stat}" 1>&2
exit ${STATE_WARNING}
else
local num_int=`echo ${num_str}*1|bc`
if [ ${num_int} -lt 0 ];then
echo "${num_int} must be greater than 0!" 1>&2
exit ${STATE_WARNING}
fi
fi
}
#input
while getopts w:c: opt
do
case "$opt" in
w)
warning=$OPTARG
warning_num=`echo "${warning}"|sed 's/%//g'`
check_num "${warning_num}"
;;
c)
critical=$OPTARG
critical_num=`echo "${critical}"|sed 's/%//g'`
check_num "${critical_num}"
;;
*) help;;
esac
done
shift $[ $OPTIND - 1 ]
[ $# -gt 0 -o -z "${warning_num}" -o -z "${critical_num}" ] && help
if [ -n "${warning_num}" -a -n "${critical_num}" ];then
if [ ${warning_num} -ge ${critical_num} ];then
echo "-w ${warning} must lower than -c ${critical}!" 1>&2
exit ${STATE_UNKNOWN}
fi
fi
datas=`awk -F':|k' '$2~/[0-9]+/{datas[$1]=$2}END{for (data in datas) {print data"="datas[data]}}' /proc/meminfo | grep -Ev '[)|(]'`
var=`echo "${datas}"|sed 's/ //g'`
eval "${var}"
MemUsed=`echo ${MemTotal}-${MemFree}-${Cached}-${Buffers}|bc`
MemUsage=`echo "${MemUsed}/${MemTotal}*100"|bc -l`
MemUsage_num=`echo ${MemUsage}/1|bc`
#echo ${MemUsage_num}
MemTotal_MB=`echo ${MemTotal}/1024|bc`
MemUsed_MB=`echo ${MemUsed}/1024|bc`
MemFree_MB=`echo ${MemFree}/1024|bc`
Cached_MB=`echo ${Cached}/1024|bc`
Buffers_MB=`echo ${Buffers}/1024|bc`
message () {
local stat="$1"
echo "MEMORY is ${stat} - Usage: ${MemUsage_num}%. Total: ${MemTotal_MB} MB Used: ${MemUsed_MB} MB Free: ${MemFree_MB} MB | Used=${MemUsed_MB};; Cached=${Cached_MB};; Buffers=${Buffers_MB};; Free=${MemFree_MB};;"
}
[ ${MemUsage_num} -lt ${warning_num} ] && message "OK" && exit ${STATE_OK}
[ ${MemUsage_num} -ge ${critical_num} ] && message "Critical" && exit ${STATE_CRITICAL}
[ ${MemUsage_num} -ge ${warning_num} ] && message "Warning" && exit ${STATE_WARNING}
L'intégration icinga2 :
object CheckCommand "memory" {
command = [ PluginDir + "/check_mem.sh" ]
arguments = {
"-c" = {
value = "$memory_critical$"
required = true
}
"-w" = {
value = "$memory_warning$"
required = false
}
}
vars.memory_critical = 95
vars.memory_warning = 80
}
apply Service "Check memory" {
import "generic-service"
check_command = "memory"
command_endpoint = host.vars.client_endpoint
assign where host.address && !host.vars.external
}