<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kako</id>
	<title>OpenVZ Virtuozzo Containers Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kako"/>
	<link rel="alternate" type="text/html" href="https://wiki.openvz.org/Special:Contributions/Kako"/>
	<updated>2026-05-14T19:16:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Talk:UBC_systemwide_configuration&amp;diff=8409</id>
		<title>Talk:UBC systemwide configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Talk:UBC_systemwide_configuration&amp;diff=8409"/>
		<updated>2010-04-01T06:08:17Z</updated>

		<summary type="html">&lt;p&gt;Kako: Undo revision 8408 by 212.235.107.153 (Talk) SPAM deleted&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== script to check all this formulas ==&lt;br /&gt;
After searching some time I couldn't find a script to check all this formulas, so I wrote one myself ([[User:Kako/check_vpsconf_ressources.sh|check_vpsconf_ressources.sh]]). Maybe it use usefull for anyone else. It would be glad to receive some feedback to see if it works also for others. &lt;br /&gt;
--[[User:Kako|Kako]] 11:08, 12 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=User:Kako/check_vpsconf_ressources.sh&amp;diff=7472</id>
		<title>User:Kako/check vpsconf ressources.sh</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=User:Kako/check_vpsconf_ressources.sh&amp;diff=7472"/>
		<updated>2009-08-12T14:06:33Z</updated>

		<summary type="html">&lt;p&gt;Kako: checking now mem by using vzmemcheck&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# This script should check all formulas writen down in &lt;br /&gt;
# http://wiki.openvz.org/UBC_systemwide_configuration&lt;br /&gt;
# The result is &lt;br /&gt;
# - human-readble&lt;br /&gt;
# - machine-readable (result-code)&lt;br /&gt;
#&lt;br /&gt;
# Conding infos:&lt;br /&gt;
# On the wiki-pages of openvz &amp;quot;soft limit/barier&amp;quot; and &amp;quot;hard limit/limit&amp;quot; are used often as sinonyms.&lt;br /&gt;
#   I used &amp;quot;soft&amp;quot; for &amp;quot;barier&amp;quot; and &amp;quot;hard&amp;quot; for &amp;quot;limit&amp;quot;&lt;br /&gt;
# Variable names are defined in dependence of their units &lt;br /&gt;
#   *_b =&amp;gt; bytes&lt;br /&gt;
#   *_kb =&amp;gt; kilobytes&lt;br /&gt;
#   *_mb =&amp;gt; megabytes&lt;br /&gt;
# Calculation is done with KB, but displayed are MB, because the numbers are smallers&lt;br /&gt;
#&lt;br /&gt;
# @author	Claudio Thomas, 2009&lt;br /&gt;
# @version	$Id: check_vpsconf_ressources.sh,v 1.3 2009/08/12 14:04:50 thomas_c Exp $&lt;br /&gt;
# @license	LGPL&lt;br /&gt;
# @see		http://wiki.openvz.org/UBC_systemwide_configuration&lt;br /&gt;
# @uses		egrep, grep, expr, bc, df, tr, cut (in other words, it should run on every linux server :-)&lt;br /&gt;
# @return 	0 - all OK, 1 - at least one warning&lt;br /&gt;
# ------------------------------------------------------------------&lt;br /&gt;
# Project/User specific values&lt;br /&gt;
VZVPS_PATH='/vz';			# Directory where die VPS files are hold (to find out amount of free disk space)&lt;br /&gt;
&lt;br /&gt;
# OpenVZ Values&lt;br /&gt;
VZCONF_PATH='/etc/vz/conf';	# Directory where the VPS-configurations can be found&lt;br /&gt;
MAX_VAL='2147483647';		# Maximal/highest number in /proc/user_beancounters&lt;br /&gt;
&lt;br /&gt;
# internal vars&lt;br /&gt;
w=0;&lt;br /&gt;
# ------------------------------------------------------------------&lt;br /&gt;
# Functions&lt;br /&gt;
# ------------------------------------------------------------------&lt;br /&gt;
ok() {&lt;br /&gt;
	echo &amp;quot;\033[0;32mOK $1\033[0m&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
warn() {&lt;br /&gt;
	echo &amp;quot;\033[1;33mWARN $1\033[0m&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
err() {&lt;br /&gt;
	echo &amp;quot;\033[0;31mERR $1\033[0m&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
incWarnings() {&lt;br /&gt;
	w=`expr $w + 1`;&lt;br /&gt;
}&lt;br /&gt;
checkDisk() {&lt;br /&gt;
	# DISKSPACE&lt;br /&gt;
	diskspaces=`egrep ^DISKSPACE $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	diskspace_real=`df -k $VZVPS_PATH | grep $VZVPS_PATH | tr -s &amp;quot; &amp;quot; |cut -d ' ' -f 2`&lt;br /&gt;
	sum_soft=0;&lt;br /&gt;
	sum_hard=0;&lt;br /&gt;
	for limit in $diskspaces; do&lt;br /&gt;
		soft=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft=`expr $sum_soft + $soft`;&lt;br /&gt;
		sum_hard=`expr $sum_hard + $hard`;&lt;br /&gt;
	done;&lt;br /&gt;
	echo -n &amp;quot;DISKPACE:  &amp;quot;; # Angabe in KBytes&lt;br /&gt;
	echo -en &amp;quot;\tSOFT: `expr $sum_soft / 1024` MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tHARD: `expr $sum_hard / 1024` MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tMAX : `expr $diskspace_real / 1024` MB&amp;quot;;&lt;br /&gt;
	if [ &amp;quot;$sum_hard&amp;quot; -lt &amp;quot;$diskspace_real&amp;quot; ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi &lt;br /&gt;
	&lt;br /&gt;
	# DISKINODES&lt;br /&gt;
	diskinodes=`egrep ^DISKINODES $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	diskinode_real=`df -ki $VZVPS_PATH | grep $VZVPS_PATH | tr -s &amp;quot; &amp;quot; |cut -d ' ' -f 2`&lt;br /&gt;
	sum_soft=0;&lt;br /&gt;
	sum_hard=0;&lt;br /&gt;
	for limit in $diskinodes; do&lt;br /&gt;
		soft=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft=`expr $sum_soft + $soft`;&lt;br /&gt;
		sum_hard=`expr $sum_hard + $hard`;&lt;br /&gt;
	done;&lt;br /&gt;
	echo -n &amp;quot;DISKINODES: &amp;quot;; # Angabe in KBytes&lt;br /&gt;
	echo -en &amp;quot;\tSOFT: `expr $sum_soft / 1024` MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tHARD: `expr $sum_hard / 1024` MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tMAX : `expr $diskinode_real / 1024` MB&amp;quot;;&lt;br /&gt;
	if [ &amp;quot;$sum_hard&amp;quot; -lt &amp;quot;$diskinode_real&amp;quot; ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi &lt;br /&gt;
}&lt;br /&gt;
checkMem() {&lt;br /&gt;
	mem=`vzmemcheck -v`;&lt;br /&gt;
	echo -e &amp;quot;$mem&amp;quot;;&lt;br /&gt;
	mem_sumary=`echo $mem | grep 'Summary' | tr -s ' ' | cut -d ':' -f 2`&lt;br /&gt;
	for percent in $mem_sumary; do&lt;br /&gt;
		st=`echo &amp;quot;$percent &amp;lt; 100&amp;quot; | bc`;&lt;br /&gt;
		if [ $st -eq 0 ]; then incWarnings; fi&lt;br /&gt;
	done&lt;br /&gt;
}&lt;br /&gt;
# ------------------------------------------------------------------&lt;br /&gt;
# MAIN&lt;br /&gt;
# ------------------------------------------------------------------&lt;br /&gt;
echo &amp;quot;INFO: See near informations to calculation and values at&amp;quot;;&lt;br /&gt;
echo &amp;quot;      http://wiki.openvz.org/UBC_systemwide_configuration&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Harddisk check: ($VZVPS_PATH)&amp;quot;;&lt;br /&gt;
echo &amp;quot;----------------------------------------------&amp;quot;;&lt;br /&gt;
checkDisk;&lt;br /&gt;
echo &amp;quot;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Memory check: (&amp;lt; 100%)&amp;quot;;&lt;br /&gt;
echo &amp;quot;----------------------------------------------&amp;quot;;&lt;br /&gt;
checkMem;&lt;br /&gt;
	&lt;br /&gt;
echo &amp;quot;&amp;quot;;&lt;br /&gt;
if [ &amp;quot;$w&amp;quot; -gt &amp;quot;0&amp;quot; ]; then &lt;br /&gt;
	echo -e &amp;quot;`warn`: $w warnings were diplayed. Check the output.&amp;quot;;&lt;br /&gt;
	exit 1; &lt;br /&gt;
fi&lt;br /&gt;
echo -e &amp;quot;`ok`: All paremeters seems to have good values.&amp;quot;;&lt;br /&gt;
exit 0; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Talk:UBC_systemwide_configuration&amp;diff=7471</id>
		<title>Talk:UBC systemwide configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Talk:UBC_systemwide_configuration&amp;diff=7471"/>
		<updated>2009-08-12T11:08:32Z</updated>

		<summary type="html">&lt;p&gt;Kako: /*  script to check all this formulas */ New&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== script to check all this formulas ==&lt;br /&gt;
After searching some time I couldn't find a script to check all this formulas, so I wrote one myself ([[User:Kako/check_vpsconf_ressources.sh|check_vpsconf_ressources.sh]]). Maybe it use usefull for anyone else. It would be glad to receive some feedback to see if it works also for others. &lt;br /&gt;
--[[User:Kako|Kako]] 11:08, 12 August 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=User:Kako/check_vpsconf_ressources.sh&amp;diff=7470</id>
		<title>User:Kako/check vpsconf ressources.sh</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=User:Kako/check_vpsconf_ressources.sh&amp;diff=7470"/>
		<updated>2009-08-12T11:02:54Z</updated>

		<summary type="html">&lt;p&gt;Kako: First Version: $Id: check_vpsconf_ressources.sh,v 1.1 2009/08/12 10:54:49 thomas_c Exp $&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# This script should check all formulas writen down in &lt;br /&gt;
# http://wiki.openvz.org/UBC_systemwide_configuration&lt;br /&gt;
# The result is &lt;br /&gt;
# - human-readble&lt;br /&gt;
# - machine-readable (result-code)&lt;br /&gt;
#&lt;br /&gt;
# Conding infos:&lt;br /&gt;
# On the wiki-pages of openvz &amp;quot;soft limit/barier&amp;quot; and &amp;quot;hard limit/limit&amp;quot; are used often as sinonyms.&lt;br /&gt;
#   I used &amp;quot;soft&amp;quot; for &amp;quot;barier&amp;quot; and &amp;quot;hard&amp;quot; for &amp;quot;limit&amp;quot;&lt;br /&gt;
# Variable names are defined in dependence of their units &lt;br /&gt;
#   *_b =&amp;gt; bytes&lt;br /&gt;
#   *_kb =&amp;gt; kilobytes&lt;br /&gt;
#   *_mb =&amp;gt; megabytes&lt;br /&gt;
# Calculation is done with KB, but displayed are MB, because the numbers are smallers&lt;br /&gt;
#&lt;br /&gt;
# @author	Claudio Thomas, 2009&lt;br /&gt;
# @version	$Id: check_vpsconf_ressources.sh,v 1.1 2009/08/12 10:54:49 thomas_c Exp $&lt;br /&gt;
# @license	LGPL&lt;br /&gt;
# @see		http://wiki.openvz.org/UBC_systemwide_configuration&lt;br /&gt;
# @uses		egrep, grep, expr, bc, df, tr, cut (in other words, it should run on every linux server :-)&lt;br /&gt;
# @return 	0 - all OK, 1 - at least one warning&lt;br /&gt;
# ------------------------------------------------------------------&lt;br /&gt;
# Project/User specific values&lt;br /&gt;
VZVPS_PATH='/vz';			# Directory where die VPS files are hold (to find out amount of free disk space)&lt;br /&gt;
&lt;br /&gt;
# OpenVZ Values&lt;br /&gt;
VZCONF_PATH='/etc/vz/conf';	# Directory where the VPS-configurations can be found&lt;br /&gt;
MAX_VAL='2147483647';		# Maximal/highest number in /proc/user_beancounters&lt;br /&gt;
&lt;br /&gt;
# internal vars&lt;br /&gt;
w=0;&lt;br /&gt;
# ------------------------------------------------------------------&lt;br /&gt;
# Functions&lt;br /&gt;
# ------------------------------------------------------------------&lt;br /&gt;
function ok() {&lt;br /&gt;
	echo &amp;quot;\033[0;32mOK $1\033[0m&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
function warn() {&lt;br /&gt;
	echo &amp;quot;\033[1;33mWARN $1\033[0m&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
function err() {&lt;br /&gt;
	echo &amp;quot;\033[0;31mERR $1\033[0m&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
function incWarnings() {&lt;br /&gt;
	w=`expr $w + 1`;&lt;br /&gt;
}&lt;br /&gt;
function checkDisk() {&lt;br /&gt;
	# DISKSPACE&lt;br /&gt;
	diskspaces=`egrep ^DISKSPACE $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	diskspace_real=`df -k $VZVPS_PATH | grep $VZVPS_PATH | tr -s &amp;quot; &amp;quot; |cut -d ' ' -f 2`&lt;br /&gt;
	sum_soft=0;&lt;br /&gt;
	sum_hard=0;&lt;br /&gt;
	for limit in $diskspaces; do&lt;br /&gt;
		soft=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft=`expr $sum_soft + $soft`;&lt;br /&gt;
		sum_hard=`expr $sum_hard + $hard`;&lt;br /&gt;
	done;&lt;br /&gt;
	echo -n &amp;quot;DISKPACE:  &amp;quot;; # Angabe in KBytes&lt;br /&gt;
	echo -en &amp;quot;\tSOFT: `expr $sum_soft / 1024` MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tHARD: `expr $sum_hard / 1024` MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tMAX : `expr $diskspace_real / 1024` MB&amp;quot;;&lt;br /&gt;
	if [ &amp;quot;$sum_hard&amp;quot; -lt &amp;quot;$diskspace_real&amp;quot; ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi &lt;br /&gt;
	&lt;br /&gt;
	# DISKINODES&lt;br /&gt;
	diskinodes=`egrep ^DISKINODES $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	diskinode_real=`df -ki $VZVPS_PATH | grep $VZVPS_PATH | tr -s &amp;quot; &amp;quot; |cut -d ' ' -f 2`&lt;br /&gt;
	sum_soft=0;&lt;br /&gt;
	sum_hard=0;&lt;br /&gt;
	for limit in $diskinodes; do&lt;br /&gt;
		soft=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft=`expr $sum_soft + $soft`;&lt;br /&gt;
		sum_hard=`expr $sum_hard + $hard`;&lt;br /&gt;
	done;&lt;br /&gt;
	echo -n &amp;quot;DISKINODES: &amp;quot;; # Angabe in KBytes&lt;br /&gt;
	echo -en &amp;quot;\tSOFT: `expr $sum_soft / 1024` MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tHARD: `expr $sum_hard / 1024` MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tMAX : `expr $diskinode_real / 1024` MB&amp;quot;;&lt;br /&gt;
	if [ &amp;quot;$sum_hard&amp;quot; -lt &amp;quot;$diskinode_real&amp;quot; ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi &lt;br /&gt;
}&lt;br /&gt;
function checkMem() {&lt;br /&gt;
	mem_real_kb=`cat /proc/meminfo | grep 'MemTotal' | tr -s ' ' | cut -d ' ' -f 2`&lt;br /&gt;
	lowmem_real_kb=`cat /proc/meminfo | grep 'LowTotal' | tr -s ' ' | cut -d ' ' -f 2`&lt;br /&gt;
	mem_real_mb=`expr $mem_real_kb / 1024` &lt;br /&gt;
	lowmem_real_mb=`expr $lowmem_real_kb / 1024`&lt;br /&gt;
	 &lt;br /&gt;
	echo -e &amp;quot;TOTAL MEM:\t$mem_real_mb MB&amp;quot;;&lt;br /&gt;
	#------------------&lt;br /&gt;
	# ---- LOW RAM ----&lt;br /&gt;
	# @see: http://wiki.openvz.org/UBC_systemwide_configuration#.E2.80.9CLow_memory.E2.80.9D&lt;br /&gt;
	RAM_kb=`echo &amp;quot;scale=4;0.4 * $lowmem_real_kb&amp;quot; | bc` &lt;br /&gt;
	RAM_mb=`echo &amp;quot;scale=4;$RAM_kb / 1024&amp;quot; | bc` &lt;br /&gt;
	echo -e &amp;quot;LOW MEM:\t$lowmem_real_mb MB (40% -&amp;gt; $RAM_mb MB)&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	# ALLSOCKETBUF LIMIT = tcprcvbuf+tcpsndbuf+dgramrcvbuf+othersockbuf&lt;br /&gt;
	tcprcvbuf_b=`egrep ^TCPRCVBUF $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	tcpsndbuf_b=`egrep ^TCPSNDBUF $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	dgramrcvbuf_b=`egrep ^DGRAMRCVBUF $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	othersockbuf_b=`egrep ^OTHERSOCKBUF $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	sum_soft_b=0;&lt;br /&gt;
	sum_hard_b=0;&lt;br /&gt;
	for limit in $tcprcvbuf_b; do &lt;br /&gt;
		soft_b=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard_b=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft_b=`expr $sum_soft_b + $soft_b`;&lt;br /&gt;
		sum_hard_b=`expr $sum_hard_b + $hard_b`;&lt;br /&gt;
	done;&lt;br /&gt;
	for limit in $tcpsndbuf_b; do&lt;br /&gt;
		soft_b=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard_b=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft_b=`expr $sum_soft_b + $soft_b`;&lt;br /&gt;
		sum_hard_b=`expr $sum_hard_b + $hard_b`;&lt;br /&gt;
	done;&lt;br /&gt;
	for limit in $dgramrcvbuf_b; do&lt;br /&gt;
		soft_b=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard_b=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft_b=`expr $sum_soft_b + $soft_b`;&lt;br /&gt;
		sum_hard_b=`expr $sum_hard_b + $hard_b`;&lt;br /&gt;
	done;&lt;br /&gt;
	for limit in $othersockbuf_b; do&lt;br /&gt;
		soft_b=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard_b=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft_b=`expr $sum_soft_b + $soft_b`;&lt;br /&gt;
		sum_hard_b=`expr $sum_hard_b + $hard_b`;&lt;br /&gt;
	done;	&lt;br /&gt;
	# ALLSOCKETBUF current = tcprcvbuf+tcpsndbuf+dgramrcvbuf+othersockbuf&lt;br /&gt;
	tcprcvbuf_b=`grep tcprcvbuf /proc/user_beancounters | grep -v $MAX_VAL | tr -s ' ' | cut -d ' ' -f 3`&lt;br /&gt;
	tcpsndbuf_b=`grep tcpsndbuf /proc/user_beancounters | grep -v $MAX_VAL | tr -s ' ' | cut -d ' ' -f 3`&lt;br /&gt;
	dgramrcvbuf_b=`grep dgramrcvbuf /proc/user_beancounters | grep -v $MAX_VAL | tr -s ' ' | cut -d ' ' -f 3`&lt;br /&gt;
	othersockbuf_b=`grep othersockbuf /proc/user_beancounters | grep -v $MAX_VAL | tr -s ' ' | cut -d ' ' -f 3`&lt;br /&gt;
	sum_cur_b=0;&lt;br /&gt;
	for current in $tcprcvbuf_b; do &lt;br /&gt;
		sum_cur_b=`expr $sum_cur_b + $current`;&lt;br /&gt;
	done;&lt;br /&gt;
	for current in $tcpsndbuf_b; do&lt;br /&gt;
		sum_cur_b=`expr $sum_cur_b + $current`;&lt;br /&gt;
	done;&lt;br /&gt;
	for current in $dgramrcvbuf_b; do&lt;br /&gt;
		sum_cur_b=`expr $sum_cur_b + $current`;&lt;br /&gt;
	done;&lt;br /&gt;
	for current in $othersockbuf_b; do&lt;br /&gt;
		sum_cur_b=`expr $sum_cur_b + $current`;&lt;br /&gt;
	done;	&lt;br /&gt;
	# normalize (Values were in Byte, so convert to KB)&lt;br /&gt;
	sum_soft_kb=`expr $sum_soft_b / 1024`;&lt;br /&gt;
	sum_hard_kb=`expr $sum_hard_b / 1024`;&lt;br /&gt;
	sum_cur_kb=`expr $sum_cur_b / 1024`;&lt;br /&gt;
	ALLSOCKETBUF_soft_kb=$sum_soft_kb;&lt;br /&gt;
	ALLSOCKETBUF_hard_kb=$sum_hard_kb;&lt;br /&gt;
	ALLSOCKETBUF_cur_kb=$sum_cur_kb;&lt;br /&gt;
	ALLSOCKETBUF_soft_mb=`echo &amp;quot;scale=2;$ALLSOCKETBUF_soft_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	ALLSOCKETBUF_hard_mb=`echo &amp;quot;scale=2;$ALLSOCKETBUF_hard_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	ALLSOCKETBUF_cur_mb=`echo &amp;quot;scale=2;$ALLSOCKETBUF_cur_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	echo -n &amp;quot;-ALLSOCKETBUF: &amp;quot;; &lt;br /&gt;
	echo -en &amp;quot;\tSOFT: $ALLSOCKETBUF_soft_mb MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tHARD: $ALLSOCKETBUF_hard_mb MB&amp;quot;;&lt;br /&gt;
	echo -e &amp;quot;\tCurrent: $ALLSOCKETBUF_cur_mb MB&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	# KMEMSIZE LIMIT&lt;br /&gt;
	kmemsize_b=`egrep ^KMEMSIZE $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	sum_soft_b=0;&lt;br /&gt;
	sum_hard_b=0;&lt;br /&gt;
	for limit in $kmemsize_b; do&lt;br /&gt;
		soft_b=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard_b=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft_b=`expr $sum_soft_b + $soft_b`;&lt;br /&gt;
		sum_hard_b=`expr $sum_hard_b + $hard_b`;&lt;br /&gt;
	done;&lt;br /&gt;
	# KMEMSIZE current&lt;br /&gt;
	kmemsize_b=`grep kmemsize /proc/user_beancounters | grep -v '0:' | tr -s ' ' | cut -d ' ' -f 4`&lt;br /&gt;
	sum_cur_b=0;&lt;br /&gt;
	for current in $kmemsize_b; do&lt;br /&gt;
		sum_cur_b=`expr $sum_cur_b + $current`;&lt;br /&gt;
	done;&lt;br /&gt;
	# normalize (Values were in Byte, so convert to KB)&lt;br /&gt;
	sum_soft_kb=`expr $sum_soft_b / 1024`;&lt;br /&gt;
	sum_hard_kb=`expr $sum_hard_b / 1024`;&lt;br /&gt;
	sum_cur_kb=`expr $sum_cur_b / 1024`;&lt;br /&gt;
	KMEMSIZE_soft_kb=$sum_soft_kb;&lt;br /&gt;
	KMEMSIZE_hard_kb=$sum_hard_kb;&lt;br /&gt;
	KMEMSIZE_cur_kb=$sum_cur_kb;&lt;br /&gt;
	KMEMSIZE_soft_mb=`echo &amp;quot;scale=2;$KMEMSIZE_soft_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	KMEMSIZE_hard_mb=`echo &amp;quot;scale=2;$KMEMSIZE_hard_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	KMEMSIZE_cur_mb=`echo &amp;quot;scale=2;$KMEMSIZE_cur_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	echo -n &amp;quot;-KMEMSIZE: &amp;quot;; &lt;br /&gt;
	echo -en &amp;quot;\tSOFT: $KMEMSIZE_soft_mb MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tHARD: $KMEMSIZE_hard_mb MB&amp;quot;;&lt;br /&gt;
	echo -e &amp;quot;\tCurrent: $KMEMSIZE_cur_mb MB&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	level=`echo &amp;quot;scale=4;( $KMEMSIZE_cur_kb + $ALLSOCKETBUF_cur_kb ) / $RAM_kb&amp;quot; | bc`&lt;br /&gt;
	echo -en &amp;quot;  LowMem Utilization: ($KMEMSIZE_cur_mb + $ALLSOCKETBUF_cur_mb) / $RAM_mb  \t\t=&amp;gt; $level Level&amp;quot;;&lt;br /&gt;
	st=`echo &amp;quot;$level &amp;lt; 1&amp;quot; | bc`;&lt;br /&gt;
	if [ $st -eq 1 ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi 	&lt;br /&gt;
	level=`echo &amp;quot;scale=4;( $KMEMSIZE_hard_kb + $ALLSOCKETBUF_hard_kb ) / $RAM_kb&amp;quot; | bc`&lt;br /&gt;
	echo -en &amp;quot;  LowMem Commitment:  ($KMEMSIZE_hard_mb + $ALLSOCKETBUF_hard_mb) / $RAM_mb\t\t=&amp;gt; $level Level&amp;quot;;&lt;br /&gt;
	st=`echo &amp;quot;$level &amp;lt; 1&amp;quot; | bc`;&lt;br /&gt;
	if [ $st -eq 1 ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi &lt;br /&gt;
&lt;br /&gt;
	#------------------&lt;br /&gt;
	#---- TOTAL RAM ----&lt;br /&gt;
	# @see: http://wiki.openvz.org/UBC_systemwide_configuration#Total_RAM&lt;br /&gt;
	physpages_b=`grep physpages /proc/user_beancounters | grep -v '$MAX_VAL $MAX_VAL' | tr -s ' ' | cut -d ' ' -f 3`&lt;br /&gt;
	sum_cur=0;&lt;br /&gt;
	for current in $physpages_b; do&lt;br /&gt;
		sum_cur_b=`expr $sum_cur_b + $current`;&lt;br /&gt;
	done;&lt;br /&gt;
	# normalize (Values were in Byte, so convert to KB)&lt;br /&gt;
	sum_cur_kb=`expr $sum_cur_b / 1024`;&lt;br /&gt;
	PHYSPAGES_cur_kb=$sum_cur_kb;&lt;br /&gt;
	PHYSPAGES_cur_mb=`echo &amp;quot;scale=2;$PHYSPAGES_cur_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	amount_kb=`expr $PHYSPAGES_cur_kb + $KMEMSIZE_cur_kb + $ALLSOCKETBUF_cur_kb`&lt;br /&gt;
	amount_mb=`expr $amount_kb / 1024`;&lt;br /&gt;
	level=`echo &amp;quot;scale=4;$amount_kb / $mem_real_kb&amp;quot; | bc`&lt;br /&gt;
	echo -en &amp;quot;  TotMem Utilization: ($PHYSPAGES_cur_mb + $KMEMSIZE_cur_mb + $ALLSOCKETBUF_cur_mb) / $mem_real_mb\t=&amp;gt; $amount_mb MB / $mem_real_mb MB ($level Level)&amp;quot;;&lt;br /&gt;
	st=`echo &amp;quot;$level &amp;lt; 1&amp;quot; | bc`;&lt;br /&gt;
	if [ $st -eq 1 ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn`&amp;quot;; incWarnings; fi&lt;br /&gt;
	&lt;br /&gt;
	#------------------&lt;br /&gt;
	#---- RAM+SWAP ----&lt;br /&gt;
	# @see: http://wiki.openvz.org/UBC_systemwide_configuration#Memory_and_swap_space&lt;br /&gt;
	swapmem_real_kb=`cat /proc/meminfo | grep 'SwapTotal' | tr -s ' ' | cut -d ' ' -f 2`&lt;br /&gt;
	swapmem_real_mb=`expr $swapmem_real_kb / 1024` &lt;br /&gt;
	echo &amp;quot;&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;Swap MEM:\t$swapmem_real_mb MB&amp;quot;;&lt;br /&gt;
	mem4_kb=`expr 4 \* $mem_real_kb`&lt;br /&gt;
	if [ &amp;quot;$swapmem_real_kb&amp;quot; -lt &amp;quot;$mem4_kb&amp;quot; ]; then &lt;br /&gt;
		if [ &amp;quot;$mem_real_kb&amp;quot; -lt &amp;quot;$swapmem_real_kb&amp;quot; ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;;&lt;br /&gt;
	else echo -e &amp;quot;\t-- `warn '!!! Swap should be &amp;gt; Total Mem'`&amp;quot;; incWarnings; fi&lt;br /&gt;
	else echo -e &amp;quot;\t-- `warn '!!! Swap should be &amp;lt; 4*Total Mem'`&amp;quot;; incWarnings; fi 	&lt;br /&gt;
	&lt;br /&gt;
	# OOMGUARPAGES LIMIT&lt;br /&gt;
	oomguarpages_b=`egrep ^OOMGUARPAGES $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	sum_soft_b=0;&lt;br /&gt;
	sum_hard_b=0;&lt;br /&gt;
	for limit in $oomguarpages_b; do&lt;br /&gt;
		soft_b=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard_b=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft_b=`expr $sum_soft_b + $soft_b`;&lt;br /&gt;
		sum_hard_b=`expr $sum_hard_b + $hard_b`;&lt;br /&gt;
	done;	&lt;br /&gt;
	oomguarpages_b=`grep oomguarpages /proc/user_beancounters | grep -v '2147483647 2147483647' | tr -s ' ' | cut -d ' ' -f 3`;&lt;br /&gt;
 	sum_cur_b=0;&lt;br /&gt;
	for current in $oomguarpages_b; do &lt;br /&gt;
		sum_cur_b=`expr $sum_cur_b + $current`;&lt;br /&gt;
	done;&lt;br /&gt;
	# normalize (Values were in Byte, so convert to KB)&lt;br /&gt;
	sum_cur_kb=`expr $sum_cur_b / 1024`;&lt;br /&gt;
	OOMGUARPAGES_soft_kb=$sum_soft_kb;&lt;br /&gt;
	OOMGUARPAGES_hard_kb=$sum_hard_kb;&lt;br /&gt;
	OOMGUARPAGES_cur_kb=$sum_cur_kb;&lt;br /&gt;
	OOMGUARPAGES_soft_mb=`echo &amp;quot;scale=2;$OOMGUARPAGES_soft_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	OOMGUARPAGES_hard_mb=`echo &amp;quot;scale=2;$OOMGUARPAGES_hard_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	OOMGUARPAGES_cur_mb=`echo &amp;quot;scale=2;$OOMGUARPAGES_cur_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	echo -n &amp;quot;-OOMGUARPAGES: &amp;quot;; &lt;br /&gt;
	echo -en &amp;quot;\tSOFT: $OOMGUARPAGES_soft_mb MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tHARD: $OOMGUARPAGES_hard_mb MB&amp;quot;;&lt;br /&gt;
	echo -e &amp;quot;\tCurrent: $OOMGUARPAGES_cur_mb MB&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	level=`echo &amp;quot;scale=4;( $OOMGUARPAGES_cur_kb + $KMEMSIZE_cur_kb + $ALLSOCKETBUF_cur_kb ) / ( $RAM_kb + swapmem_real_kb )&amp;quot; | bc`&lt;br /&gt;
	echo -en &amp;quot;  Swap Utilization: ($OOMGUARPAGES_cur_mb + $KMEMSIZE_cur_mb + $ALLSOCKETBUF_cur_mb) / ($RAM_mb + $swapmem_real_mb) \t\t=&amp;gt; $level Level&amp;quot;;&lt;br /&gt;
	st=`echo &amp;quot;$level &amp;lt; 1&amp;quot; | bc`;&lt;br /&gt;
	if [ $st -eq 1 ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi 	&lt;br /&gt;
	level=`echo &amp;quot;scale=4;( $OOMGUARPAGES_hard_kb + $KMEMSIZE_hard_kb + $ALLSOCKETBUF_hard_kb ) / ( $RAM_kb + swapmem_real_kb )&amp;quot; | bc`&lt;br /&gt;
	echo -en &amp;quot;  Swap Commitment:  ($OOMGUARPAGES_hard_mb + $KMEMSIZE_hard_mb + $ALLSOCKETBUF_hard_mb) / ($RAM_mb + $swapmem_real_mb) \t\t=&amp;gt; $level Level&amp;quot;;&lt;br /&gt;
	st=`echo &amp;quot;$level &amp;lt; 1&amp;quot; | bc`;&lt;br /&gt;
	if [ $st -eq 1 ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi &lt;br /&gt;
&lt;br /&gt;
	#--------------------------&lt;br /&gt;
	#---- Allocated Memory ----&lt;br /&gt;
	# @see: http://wiki.openvz.org/UBC_systemwide_configuration#Allocated_memory&lt;br /&gt;
	# PRIVVMPAGES LIMIT&lt;br /&gt;
	privvmpages_b=`egrep ^PRIVVMPAGES $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	sum_soft_b=0;&lt;br /&gt;
	sum_hard_b=0;&lt;br /&gt;
	for limit in $privvmpages_b; do&lt;br /&gt;
		soft_b=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard_b=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft_b=`expr $sum_soft_b + $soft_b`;&lt;br /&gt;
		sum_hard_b=`expr $sum_hard_b + $hard_b`;&lt;br /&gt;
	done;	&lt;br /&gt;
	privvmpages_b=`grep privvmpages /proc/user_beancounters | grep -v '2147483647 2147483647' | tr -s ' ' | cut -d ' ' -f 3`;&lt;br /&gt;
 	sum_cur_b=0;&lt;br /&gt;
	for current in $privvmpages_b; do &lt;br /&gt;
		sum_cur_b=`expr $sum_cur_b + $current`;&lt;br /&gt;
	done;&lt;br /&gt;
	# normalize (Values were in Byte, so convert to KB)&lt;br /&gt;
	sum_cur_kb=`expr $sum_cur_b / 1024`;&lt;br /&gt;
	PRIVVMPAGES_soft_kb=$sum_soft_kb;&lt;br /&gt;
	PRIVVMPAGES_hard_kb=$sum_hard_kb;&lt;br /&gt;
	PRIVVMPAGES_cur_kb=$sum_cur_kb;&lt;br /&gt;
	PRIVVMPAGES_soft_mb=`echo &amp;quot;scale=2;$PRIVVMPAGES_soft_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	PRIVVMPAGES_hard_mb=`echo &amp;quot;scale=2;$PRIVVMPAGES_hard_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	PRIVVMPAGES_cur_mb=`echo &amp;quot;scale=2;$PRIVVMPAGES_cur_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	echo -n &amp;quot;-PRIVVMPAGES: &amp;quot;; &lt;br /&gt;
	echo -en &amp;quot;\tSOFT: $PRIVVMPAGES_soft_mb MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tHARD: $PRIVVMPAGES_hard_mb MB&amp;quot;;&lt;br /&gt;
	echo -e &amp;quot;\tCurrent: $PRIVVMPAGES_cur_mb MB&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	# VMGUARPAGES LIMIT&lt;br /&gt;
	vmguarpages_b=`egrep ^VMGUARPAGES $VZCONF_PATH/*.conf | cut -d '&amp;quot;' -f 2`&lt;br /&gt;
	sum_soft_b=0;&lt;br /&gt;
	sum_hard_b=0;&lt;br /&gt;
	for limit in $vmguarpages_b; do&lt;br /&gt;
		soft_b=`echo $limit | cut -d ':' -f 1`;&lt;br /&gt;
		hard_b=`echo $limit | cut -d ':' -f 2`;&lt;br /&gt;
		sum_soft_b=`expr $sum_soft_b + $soft_b`;&lt;br /&gt;
		sum_hard_b=`expr $sum_hard_b + $hard_b`;&lt;br /&gt;
	done;	&lt;br /&gt;
	vmguarpages_b=`grep vmguarpages /proc/user_beancounters | grep -v '2147483647 2147483647' | tr -s ' ' | cut -d ' ' -f 3`;&lt;br /&gt;
 	sum_cur_b=0;&lt;br /&gt;
	for current in $vmguarpages_b; do &lt;br /&gt;
		sum_cur_b=`expr $sum_cur_b + $current`;&lt;br /&gt;
	done;&lt;br /&gt;
	# normalize (Values were in Byte, so convert to KB)&lt;br /&gt;
	sum_cur_kb=`expr $sum_cur_b / 1024`;&lt;br /&gt;
	VMGUARPAGES_soft_kb=$sum_soft_kb;&lt;br /&gt;
	VMGUARPAGES_hard_kb=$sum_hard_kb;&lt;br /&gt;
	VMGUARPAGES_cur_kb=$sum_cur_kb;&lt;br /&gt;
	VMGUARPAGES_soft_mb=`echo &amp;quot;scale=2;$VMGUARPAGES_soft_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	VMGUARPAGES_hard_mb=`echo &amp;quot;scale=2;$VMGUARPAGES_hard_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	VMGUARPAGES_cur_mb=`echo &amp;quot;scale=2;$VMGUARPAGES_cur_kb / 1024&amp;quot; | bc`&lt;br /&gt;
	echo -n &amp;quot;-VMGUARPAGES: &amp;quot;; &lt;br /&gt;
	echo -en &amp;quot;\tSOFT: $VMGUARPAGES_soft_mb MB&amp;quot;;&lt;br /&gt;
	echo -en &amp;quot;\tHARD: $VMGUARPAGES_hard_mb MB&amp;quot;;&lt;br /&gt;
	echo -e &amp;quot;\tCurrent: $VMGUARPAGES_cur_mb MB&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	level=`echo &amp;quot;scale=4;( ($PRIVVMPAGES_cur_kb*4096) + $KMEMSIZE_cur_kb + $ALLSOCKETBUF_cur_kb ) / ( $RAM_kb + swapmem_real_kb )&amp;quot; | bc`&lt;br /&gt;
	echo -en &amp;quot;  Alloc Utilization: (($PRIVVMPAGES_cur_mb*4096) + $KMEMSIZE_cur_mb + $ALLSOCKETBUF_cur_mb) / ($RAM_mb + $swapmem_real_mb) \t\t=&amp;gt; $level Level&amp;quot;;&lt;br /&gt;
	st=`echo &amp;quot;$level &amp;lt; 1&amp;quot; | bc`;&lt;br /&gt;
	if [ $st -eq 1 ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi 	&lt;br /&gt;
	level=`echo &amp;quot;scale=4;( $VMGUARPAGES_soft_kb + $KMEMSIZE_hard_kb + $ALLSOCKETBUF_hard_kb ) / ( $RAM_kb + swapmem_real_kb )&amp;quot; | bc`&lt;br /&gt;
	echo -en &amp;quot;  Alloc Commitment:  (($VMGUARPAGES_soft_kb*4096) + $KMEMSIZE_hard_mb + $ALLSOCKETBUF_hard_mb) / ($RAM_mb + $swapmem_real_mb) \t\t=&amp;gt; $level Level&amp;quot;;&lt;br /&gt;
	st=`echo &amp;quot;$level &amp;lt; 1&amp;quot; | bc`;&lt;br /&gt;
	if [ $st -eq 1 ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi &lt;br /&gt;
	level=`echo &amp;quot;scale=4;( $PRIVVMPAGES_hard_kb + $KMEMSIZE_hard_kb + $ALLSOCKETBUF_hard_kb ) / ( $RAM_kb + swapmem_real_kb )&amp;quot; | bc`&lt;br /&gt;
	echo -en &amp;quot;  Alloc limit:  (($PRIVVMPAGES_hard_mb*4096) + $KMEMSIZE_hard_mb + $ALLSOCKETBUF_hard_mb) / ($RAM_mb + $swapmem_real_mb) \t\t=&amp;gt; $level Level&amp;quot;;&lt;br /&gt;
	st=`echo &amp;quot;$level &amp;lt; 1&amp;quot; | bc`;&lt;br /&gt;
	if [ $st -eq 1 ]; then echo -e &amp;quot;\t-- `ok`&amp;quot;; else echo -e &amp;quot;\t-- `warn '!!!'`&amp;quot;; incWarnings; fi &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
# ------------------------------------------------------------------&lt;br /&gt;
# MAIN&lt;br /&gt;
# ------------------------------------------------------------------&lt;br /&gt;
echo &amp;quot;INFO: See near informations to calculation and values at&amp;quot;;&lt;br /&gt;
echo &amp;quot;      http://wiki.openvz.org/UBC_systemwide_configuration&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Harddisk check:&amp;quot;;&lt;br /&gt;
echo &amp;quot;----------------------------------------------&amp;quot;;&lt;br /&gt;
checkDisk;&lt;br /&gt;
echo &amp;quot;&amp;quot;;&lt;br /&gt;
echo &amp;quot;Memory check: (level &amp;lt; 1 OK)&amp;quot;;&lt;br /&gt;
echo &amp;quot;----------------------------------------------&amp;quot;;&lt;br /&gt;
checkMem;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
echo &amp;quot;&amp;quot;;&lt;br /&gt;
if [ &amp;quot;$w&amp;quot; -gt &amp;quot;0&amp;quot; ]; then &lt;br /&gt;
	echo -e &amp;quot;`warn`: $w warnings were diplayed. Check the output.&amp;quot;;&lt;br /&gt;
	exit 1; &lt;br /&gt;
fi&lt;br /&gt;
echo -e &amp;quot;`ok`: All paremeters seems to have good values.&amp;quot;;&lt;br /&gt;
exit 0; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7210</id>
		<title>Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7210"/>
		<updated>2009-04-08T09:11:33Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_ubc Without SNMP */ Resourcename can now be a link to OpenVZ-Wiki for more information in case of troubles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== snmpd configuration ==&lt;br /&gt;
Debian Etch example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install snmpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit '''/etc/default/snmpd''' : remove ''-u snmp'' and replace ''127.0.0.1'' with your ip (ie : 207.46.250.119), Full'''/etc/default/snmpd''' example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid 207.46.250.119'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Debian 4.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create user(my_username) and add new mib. Password need a min. of 8 charactes. Username only characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/snmpd stop&lt;br /&gt;
echo rouser my_username priv &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.51  beancounters  /bin/cat /proc/user_beancounters&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.52  vzquota  /bin/cat /proc/vz/vzquota&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo  createUser my_username MD5 my_password DES &amp;gt;&amp;gt; /var/lib/snmp/snmpd.conf&lt;br /&gt;
/etc/init.d/snmpd start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note that the createUser command goes into a separate file. On Centos5 this file is located in /var/net-snmp/snmpd.conf. Make sure you stop snmpd before putting the createUser command there!).&lt;br /&gt;
&lt;br /&gt;
Testing snmp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snmpwalk   -v 3  -u my_username -l authPriv   -a MD5 -A my_password -x DES -X my_password  $(hostname -i)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the minimum pass phrase length is 8 characters.&lt;br /&gt;
&lt;br /&gt;
== nagios configuration ==&lt;br /&gt;
=== example nagios configuration ===&lt;br /&gt;
add to configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define command {&lt;br /&gt;
command_name check_snmp_openvz_on_port&lt;br /&gt;
# command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ PORT    USER    PASSWORD&lt;br /&gt;
command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ $ARG1$  $ARG2$  $ARG3$&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define host {&lt;br /&gt;
        host_name   openvz-server&lt;br /&gt;
        alias       Serwer Openvz&lt;br /&gt;
        address     207.46.250.119&lt;br /&gt;
        use         generic-host&lt;br /&gt;
        contact_groups  admins&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define service{&lt;br /&gt;
        use                             generic-service&lt;br /&gt;
        host_name                       openvz-server&lt;br /&gt;
        service_description             Virtual Machines Limits&lt;br /&gt;
        check_command                   check_snmp_openvz_on_port!161!my_username!my_password&lt;br /&gt;
        max_check_attempts              1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nagios plugin ===&lt;br /&gt;
It is shell script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cat /usr/local/bin/check_snmp_openvz.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
HOST=$1&lt;br /&gt;
PORT=$2&lt;br /&gt;
USER=$3&lt;br /&gt;
PASS=$4&lt;br /&gt;
export FILE=/tmp/$HOST.beancounters&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA_TMP=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.51.4`&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATA=`echo &amp;quot;$DATA_TMP&amp;quot;| perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# if ($ret == 0 ) { print &amp;quot;Ok. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET1=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
#####################################################################################&lt;br /&gt;
######### quota check&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
DATA=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.52.4 \&lt;br /&gt;
|  perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                $time=$5 ;&lt;br /&gt;
                $expire=$6 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET2=$?&lt;br /&gt;
&lt;br /&gt;
#####################################################################################&lt;br /&gt;
########### return&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
if [  $RET1  -gt $RET2  ]; then&lt;br /&gt;
        RET=$RET1&lt;br /&gt;
        else&lt;br /&gt;
        RET=$RET2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [  $RET  = 0  ]; then&lt;br /&gt;
        echo Ok.&lt;br /&gt;
fi&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== check_vzquota Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RET=0&lt;br /&gt;
DATA=`echo;sudo /usr/sbin/vzlist -1 2&amp;gt;/dev/null | xargs -I {} bash -c &amp;quot;echo {}:;sudo /usr/sbin/vzquota stat {} | sed 's/\*//g'&amp;quot;`&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        VPS_err=$(sudo /usr/sbin/vzlist -1 2&amp;gt;&amp;amp;1 1&amp;gt;/dev/null)&lt;br /&gt;
        if [ -n &amp;quot;$VPS_err&amp;quot; ] &amp;amp;&amp;amp; [ &amp;quot;$VPS_err&amp;quot; == &amp;quot;Container(s) not found&amp;quot; ]; then&lt;br /&gt;
                echo &amp;quot;OK - $VPS_err&amp;quot;;&lt;br /&gt;
                exit 0;&lt;br /&gt;
        else&lt;br /&gt;
                if [ -n &amp;quot;$VPS_err&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;UNKNOWN - Error: $VPS_err&amp;quot;;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;UNKNOWN - VZquota stats are not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
                fi&lt;br /&gt;
                exit 3;&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $crit=&amp;quot;&amp;quot;;&lt;br /&gt;
my $warn=&amp;quot;&amp;quot;;&lt;br /&gt;
my $ok=&amp;quot;&amp;quot;;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /^(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $hardlimit ){&lt;br /&gt;
                        $crit=$crit.&amp;quot;VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=2;&lt;br /&gt;
                } elsif ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        $warn=$warn.&amp;quot;VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                $ok=$ok.&amp;quot;$vid:$resource $usage/$softlimit\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
if ($ret == 0) {&lt;br /&gt;
        print &amp;quot;OK - click on service-link for details...\n$ok&amp;quot;;&lt;br /&gt;
} elsif ($ret == 1)  {&lt;br /&gt;
        print &amp;quot;WARNING - $warn\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
        print &amp;quot;CRITICAL - $crit\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET=$?&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script calls &amp;lt;code&amp;gt;/usr/sbin/vzlist&amp;lt;/code&amp;gt; by sudo. When doing this it normally needs a password, which check_nrpe will not know. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/sbin/vzlist, /usr/sbin/vzquota&lt;br /&gt;
&lt;br /&gt;
=== check_ubc Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Servicestate description can have a http-link to the openvz-wiki&lt;br /&gt;
# in case that a ressource is warning/critical. To use it:&lt;br /&gt;
# 1. set &amp;quot;escape_html_tags=0&amp;quot; in nagios/etc/cgi.cfg&lt;br /&gt;
# 2. set &amp;quot;my $linked=1;&amp;quot; in the first perl lines in this script&lt;br /&gt;
#&lt;br /&gt;
export FILE=/tmp/check_ubc&lt;br /&gt;
RET=0&lt;br /&gt;
ubc_file='/proc/user_beancounters';&lt;br /&gt;
DATA='';&lt;br /&gt;
if [ -r $ubc_file ]; then&lt;br /&gt;
        DATA=`cat $ubc_file`&lt;br /&gt;
fi&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;UNKNOWN - $ubc_file is not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $linked=1;   # 0:plain text output, 1:resourcename is a http-link to OpenVZ-wiki&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: &amp;quot;.&amp;amp;url($resource,$linked).&amp;quot;  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                #print &amp;quot;$vid:$resource $held Barrier:$barrier &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: &amp;quot;.url($resource,$linked).&amp;quot; from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                                                #print &amp;quot;$vmachine_id: Old_Failcnt: $failcnt_old Failcnt: $failcnt \n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
sub url {&lt;br /&gt;
        my ($name,$with_link) = @_;&lt;br /&gt;
        if ($with_link) {&lt;br /&gt;
                return &amp;quot;&amp;lt;a target=\&amp;quot;_blank\&amp;quot; href=\&amp;quot;http://wiki.openvz.org/&amp;quot;.$name.&amp;quot;#&amp;quot;.$name.&amp;quot;\&amp;quot;&amp;gt;$name&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
                return $name;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
if ($ret == 0 ) { print &amp;quot;OK. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script needs to read the &amp;lt;code&amp;gt;/proc/user_beancounters&amp;lt;/code&amp;gt; file. This is normally only readable for root. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/local/nagios/libexec/check_ubc&lt;br /&gt;
&lt;br /&gt;
Also don't forget to consider this on your &amp;lt;code&amp;gt;nrpe.cfg&amp;lt;/code&amp;gt;, so that you call the script with sudo:&lt;br /&gt;
 command[check_ubc]=sudo /usr/local/nagios/libexec/check_ubc&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7201</id>
		<title>Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7201"/>
		<updated>2009-04-07T09:12:45Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_vzquota Without SNMP */ script cahnged ! surpress the &amp;quot;unknow&amp;quot; error in case that all is ok, but there are simple no containers running&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== snmpd configuration ==&lt;br /&gt;
Debian Etch example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install snmpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit '''/etc/default/snmpd''' : remove ''-u snmp'' and replace ''127.0.0.1'' with your ip (ie : 207.46.250.119), Full'''/etc/default/snmpd''' example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid 207.46.250.119'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Debian 4.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create user(my_username) and add new mib. Password need a min. of 8 charactes. Username only characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/snmpd stop&lt;br /&gt;
echo rouser my_username priv &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.51  beancounters  /bin/cat /proc/user_beancounters&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.52  vzquota  /bin/cat /proc/vz/vzquota&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo  createUser my_username MD5 my_password DES &amp;gt;&amp;gt; /var/lib/snmp/snmpd.conf&lt;br /&gt;
/etc/init.d/snmpd start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note that the createUser command goes into a separate file. On Centos5 this file is located in /var/net-snmp/snmpd.conf. Make sure you stop snmpd before putting the createUser command there!).&lt;br /&gt;
&lt;br /&gt;
Testing snmp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snmpwalk   -v 3  -u my_username -l authPriv   -a MD5 -A my_password -x DES -X my_password  $(hostname -i)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the minimum pass phrase length is 8 characters.&lt;br /&gt;
&lt;br /&gt;
== nagios configuration ==&lt;br /&gt;
=== example nagios configuration ===&lt;br /&gt;
add to configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define command {&lt;br /&gt;
command_name check_snmp_openvz_on_port&lt;br /&gt;
# command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ PORT    USER    PASSWORD&lt;br /&gt;
command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ $ARG1$  $ARG2$  $ARG3$&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define host {&lt;br /&gt;
        host_name   openvz-server&lt;br /&gt;
        alias       Serwer Openvz&lt;br /&gt;
        address     207.46.250.119&lt;br /&gt;
        use         generic-host&lt;br /&gt;
        contact_groups  admins&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define service{&lt;br /&gt;
        use                             generic-service&lt;br /&gt;
        host_name                       openvz-server&lt;br /&gt;
        service_description             Virtual Machines Limits&lt;br /&gt;
        check_command                   check_snmp_openvz_on_port!161!my_username!my_password&lt;br /&gt;
        max_check_attempts              1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nagios plugin ===&lt;br /&gt;
It is shell script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cat /usr/local/bin/check_snmp_openvz.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
HOST=$1&lt;br /&gt;
PORT=$2&lt;br /&gt;
USER=$3&lt;br /&gt;
PASS=$4&lt;br /&gt;
export FILE=/tmp/$HOST.beancounters&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA_TMP=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.51.4`&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATA=`echo &amp;quot;$DATA_TMP&amp;quot;| perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# if ($ret == 0 ) { print &amp;quot;Ok. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET1=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
#####################################################################################&lt;br /&gt;
######### quota check&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
DATA=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.52.4 \&lt;br /&gt;
|  perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                $time=$5 ;&lt;br /&gt;
                $expire=$6 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET2=$?&lt;br /&gt;
&lt;br /&gt;
#####################################################################################&lt;br /&gt;
########### return&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
if [  $RET1  -gt $RET2  ]; then&lt;br /&gt;
        RET=$RET1&lt;br /&gt;
        else&lt;br /&gt;
        RET=$RET2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [  $RET  = 0  ]; then&lt;br /&gt;
        echo Ok.&lt;br /&gt;
fi&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== check_vzquota Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RET=0&lt;br /&gt;
DATA=`echo;sudo /usr/sbin/vzlist -1 2&amp;gt;/dev/null | xargs -I {} bash -c &amp;quot;echo {}:;sudo /usr/sbin/vzquota stat {} | sed 's/\*//g'&amp;quot;`&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        VPS_err=$(sudo /usr/sbin/vzlist -1 2&amp;gt;&amp;amp;1 1&amp;gt;/dev/null)&lt;br /&gt;
        if [ -n &amp;quot;$VPS_err&amp;quot; ] &amp;amp;&amp;amp; [ &amp;quot;$VPS_err&amp;quot; == &amp;quot;Container(s) not found&amp;quot; ]; then&lt;br /&gt;
                echo &amp;quot;OK - $VPS_err&amp;quot;;&lt;br /&gt;
                exit 0;&lt;br /&gt;
        else&lt;br /&gt;
                if [ -n &amp;quot;$VPS_err&amp;quot; ]; then&lt;br /&gt;
                        echo &amp;quot;UNKNOWN - Error: $VPS_err&amp;quot;;&lt;br /&gt;
                else&lt;br /&gt;
                        echo &amp;quot;UNKNOWN - VZquota stats are not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
                fi&lt;br /&gt;
                exit 3;&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $crit=&amp;quot;&amp;quot;;&lt;br /&gt;
my $warn=&amp;quot;&amp;quot;;&lt;br /&gt;
my $ok=&amp;quot;&amp;quot;;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /^(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $hardlimit ){&lt;br /&gt;
                        $crit=$crit.&amp;quot;VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=2;&lt;br /&gt;
                } elsif ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        $warn=$warn.&amp;quot;VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                $ok=$ok.&amp;quot;$vid:$resource $usage/$softlimit\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
if ($ret == 0) {&lt;br /&gt;
        print &amp;quot;OK - click on service-link for details...\n$ok&amp;quot;;&lt;br /&gt;
} elsif ($ret == 1)  {&lt;br /&gt;
        print &amp;quot;WARNING - $warn\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
        print &amp;quot;CRITICAL - $crit\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET=$?&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script calls &amp;lt;code&amp;gt;/usr/sbin/vzlist&amp;lt;/code&amp;gt; by sudo. When doing this it normally needs a password, which check_nrpe will not know. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/sbin/vzlist, /usr/sbin/vzquota&lt;br /&gt;
&lt;br /&gt;
=== check_ubc Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export FILE=/tmp/check_ubc&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
ubc_file='/proc/user_beancounters';&lt;br /&gt;
DATA='';&lt;br /&gt;
if [ -r $ubc_file ]; then&lt;br /&gt;
        DATA=`cat $ubc_file`&lt;br /&gt;
fi&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;UNKNOWN- $ubc_file is not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                #print &amp;quot;$vid:$resource $held Barrier:$barrier &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                                                #print &amp;quot;$vmachine_id: Old_Failcnt: $failcnt_old Failcnt: $failcnt \n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ($ret == 0 ) { print &amp;quot;OK. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script needs to read the &amp;lt;code&amp;gt;/proc/user_beancounters&amp;lt;/code&amp;gt; file. This is normally only readable for root. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/local/nagios/libexec/check_ubc&lt;br /&gt;
&lt;br /&gt;
Also don't forget to consider this on your &amp;lt;code&amp;gt;nrpe.cfg&amp;lt;/code&amp;gt;, so that you call the script with sudo:&lt;br /&gt;
 command[check_ubc]=sudo /usr/local/nagios/libexec/check_ubc&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7200</id>
		<title>Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7200"/>
		<updated>2009-04-07T08:15:03Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_vzquota Without SNMP */ some minor optical changes on OK state&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== snmpd configuration ==&lt;br /&gt;
Debian Etch example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install snmpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit '''/etc/default/snmpd''' : remove ''-u snmp'' and replace ''127.0.0.1'' with your ip (ie : 207.46.250.119), Full'''/etc/default/snmpd''' example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid 207.46.250.119'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Debian 4.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create user(my_username) and add new mib. Password need a min. of 8 charactes. Username only characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/snmpd stop&lt;br /&gt;
echo rouser my_username priv &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.51  beancounters  /bin/cat /proc/user_beancounters&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.52  vzquota  /bin/cat /proc/vz/vzquota&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo  createUser my_username MD5 my_password DES &amp;gt;&amp;gt; /var/lib/snmp/snmpd.conf&lt;br /&gt;
/etc/init.d/snmpd start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note that the createUser command goes into a separate file. On Centos5 this file is located in /var/net-snmp/snmpd.conf. Make sure you stop snmpd before putting the createUser command there!).&lt;br /&gt;
&lt;br /&gt;
Testing snmp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snmpwalk   -v 3  -u my_username -l authPriv   -a MD5 -A my_password -x DES -X my_password  $(hostname -i)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the minimum pass phrase length is 8 characters.&lt;br /&gt;
&lt;br /&gt;
== nagios configuration ==&lt;br /&gt;
=== example nagios configuration ===&lt;br /&gt;
add to configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define command {&lt;br /&gt;
command_name check_snmp_openvz_on_port&lt;br /&gt;
# command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ PORT    USER    PASSWORD&lt;br /&gt;
command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ $ARG1$  $ARG2$  $ARG3$&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define host {&lt;br /&gt;
        host_name   openvz-server&lt;br /&gt;
        alias       Serwer Openvz&lt;br /&gt;
        address     207.46.250.119&lt;br /&gt;
        use         generic-host&lt;br /&gt;
        contact_groups  admins&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define service{&lt;br /&gt;
        use                             generic-service&lt;br /&gt;
        host_name                       openvz-server&lt;br /&gt;
        service_description             Virtual Machines Limits&lt;br /&gt;
        check_command                   check_snmp_openvz_on_port!161!my_username!my_password&lt;br /&gt;
        max_check_attempts              1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nagios plugin ===&lt;br /&gt;
It is shell script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cat /usr/local/bin/check_snmp_openvz.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
HOST=$1&lt;br /&gt;
PORT=$2&lt;br /&gt;
USER=$3&lt;br /&gt;
PASS=$4&lt;br /&gt;
export FILE=/tmp/$HOST.beancounters&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA_TMP=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.51.4`&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATA=`echo &amp;quot;$DATA_TMP&amp;quot;| perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# if ($ret == 0 ) { print &amp;quot;Ok. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET1=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
#####################################################################################&lt;br /&gt;
######### quota check&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
DATA=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.52.4 \&lt;br /&gt;
|  perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                $time=$5 ;&lt;br /&gt;
                $expire=$6 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET2=$?&lt;br /&gt;
&lt;br /&gt;
#####################################################################################&lt;br /&gt;
########### return&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
if [  $RET1  -gt $RET2  ]; then&lt;br /&gt;
        RET=$RET1&lt;br /&gt;
        else&lt;br /&gt;
        RET=$RET2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [  $RET  = 0  ]; then&lt;br /&gt;
        echo Ok.&lt;br /&gt;
fi&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== check_vzquota Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RET=0&lt;br /&gt;
DATA=`echo;sudo /usr/sbin/vzlist -1 | xargs -I {} bash -c &amp;quot;echo {}:;sudo /usr/sbin/vzquota stat {} | sed 's/\*//g'&amp;quot;`&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;UNKNOWN - VZquota stats are not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $crit=&amp;quot;&amp;quot;;&lt;br /&gt;
my $warn=&amp;quot;&amp;quot;;&lt;br /&gt;
my $ok=&amp;quot;&amp;quot;;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /^(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $hardlimit ){&lt;br /&gt;
                        $crit=$crit.&amp;quot;VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=2;&lt;br /&gt;
                } elsif ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        $warn=$warn.&amp;quot;VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                $ok=$ok.&amp;quot;$vid:$resource $usage/$softlimit\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
if ($ret == 0) {&lt;br /&gt;
        print &amp;quot;OK - click on service-link for details...\n$ok&amp;quot;;&lt;br /&gt;
} elsif ($ret == 1)  {&lt;br /&gt;
        print &amp;quot;WARNING - $warn\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
        print &amp;quot;CRITICAL - $crit\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET=$?&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script calls &amp;lt;code&amp;gt;/usr/sbin/vzlist&amp;lt;/code&amp;gt; by sudo. When doing this it normally needs a password, which check_nrpe will not know. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/sbin/vzlist, /usr/sbin/vzquota&lt;br /&gt;
&lt;br /&gt;
=== check_ubc Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export FILE=/tmp/check_ubc&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
ubc_file='/proc/user_beancounters';&lt;br /&gt;
DATA='';&lt;br /&gt;
if [ -r $ubc_file ]; then&lt;br /&gt;
        DATA=`cat $ubc_file`&lt;br /&gt;
fi&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;UNKNOWN- $ubc_file is not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                #print &amp;quot;$vid:$resource $held Barrier:$barrier &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                                                #print &amp;quot;$vmachine_id: Old_Failcnt: $failcnt_old Failcnt: $failcnt \n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ($ret == 0 ) { print &amp;quot;OK. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script needs to read the &amp;lt;code&amp;gt;/proc/user_beancounters&amp;lt;/code&amp;gt; file. This is normally only readable for root. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/local/nagios/libexec/check_ubc&lt;br /&gt;
&lt;br /&gt;
Also don't forget to consider this on your &amp;lt;code&amp;gt;nrpe.cfg&amp;lt;/code&amp;gt;, so that you call the script with sudo:&lt;br /&gt;
 command[check_ubc]=sudo /usr/local/nagios/libexec/check_ubc&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7199</id>
		<title>Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7199"/>
		<updated>2009-04-07T07:52:44Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_ubc Without SNMP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== snmpd configuration ==&lt;br /&gt;
Debian Etch example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install snmpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit '''/etc/default/snmpd''' : remove ''-u snmp'' and replace ''127.0.0.1'' with your ip (ie : 207.46.250.119), Full'''/etc/default/snmpd''' example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid 207.46.250.119'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Debian 4.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create user(my_username) and add new mib. Password need a min. of 8 charactes. Username only characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/snmpd stop&lt;br /&gt;
echo rouser my_username priv &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.51  beancounters  /bin/cat /proc/user_beancounters&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.52  vzquota  /bin/cat /proc/vz/vzquota&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo  createUser my_username MD5 my_password DES &amp;gt;&amp;gt; /var/lib/snmp/snmpd.conf&lt;br /&gt;
/etc/init.d/snmpd start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note that the createUser command goes into a separate file. On Centos5 this file is located in /var/net-snmp/snmpd.conf. Make sure you stop snmpd before putting the createUser command there!).&lt;br /&gt;
&lt;br /&gt;
Testing snmp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snmpwalk   -v 3  -u my_username -l authPriv   -a MD5 -A my_password -x DES -X my_password  $(hostname -i)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the minimum pass phrase length is 8 characters.&lt;br /&gt;
&lt;br /&gt;
== nagios configuration ==&lt;br /&gt;
=== example nagios configuration ===&lt;br /&gt;
add to configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define command {&lt;br /&gt;
command_name check_snmp_openvz_on_port&lt;br /&gt;
# command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ PORT    USER    PASSWORD&lt;br /&gt;
command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ $ARG1$  $ARG2$  $ARG3$&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define host {&lt;br /&gt;
        host_name   openvz-server&lt;br /&gt;
        alias       Serwer Openvz&lt;br /&gt;
        address     207.46.250.119&lt;br /&gt;
        use         generic-host&lt;br /&gt;
        contact_groups  admins&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define service{&lt;br /&gt;
        use                             generic-service&lt;br /&gt;
        host_name                       openvz-server&lt;br /&gt;
        service_description             Virtual Machines Limits&lt;br /&gt;
        check_command                   check_snmp_openvz_on_port!161!my_username!my_password&lt;br /&gt;
        max_check_attempts              1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nagios plugin ===&lt;br /&gt;
It is shell script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cat /usr/local/bin/check_snmp_openvz.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
HOST=$1&lt;br /&gt;
PORT=$2&lt;br /&gt;
USER=$3&lt;br /&gt;
PASS=$4&lt;br /&gt;
export FILE=/tmp/$HOST.beancounters&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA_TMP=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.51.4`&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATA=`echo &amp;quot;$DATA_TMP&amp;quot;| perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# if ($ret == 0 ) { print &amp;quot;Ok. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET1=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
#####################################################################################&lt;br /&gt;
######### quota check&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
DATA=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.52.4 \&lt;br /&gt;
|  perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                $time=$5 ;&lt;br /&gt;
                $expire=$6 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET2=$?&lt;br /&gt;
&lt;br /&gt;
#####################################################################################&lt;br /&gt;
########### return&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
if [  $RET1  -gt $RET2  ]; then&lt;br /&gt;
        RET=$RET1&lt;br /&gt;
        else&lt;br /&gt;
        RET=$RET2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [  $RET  = 0  ]; then&lt;br /&gt;
        echo Ok.&lt;br /&gt;
fi&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== check_vzquota Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RET=0&lt;br /&gt;
DATA=`echo;sudo /usr/sbin/vzlist -1 | xargs -I {} bash -c &amp;quot;echo {}:;sudo /usr/sbin/vzquota stat {} | sed 's/\*//g'&amp;quot;`&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;UNKNOWN - VZquota stats are not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $crit=&amp;quot;&amp;quot;;&lt;br /&gt;
my $warn=&amp;quot;&amp;quot;;&lt;br /&gt;
my $ok=&amp;quot;&amp;quot;;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /^(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $hardlimit ){&lt;br /&gt;
                        $crit=$crit.&amp;quot;VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=2;&lt;br /&gt;
                } elsif ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        $warn=$warn.&amp;quot;VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                $ok=$ok.&amp;quot;$vid:$resource $usage/$softlimit &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
if ($ret == 0) {&lt;br /&gt;
        print &amp;quot;OK - $ok&amp;quot;;&lt;br /&gt;
} elsif ($ret == 1)  {&lt;br /&gt;
        print &amp;quot;WARNING - $warn&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
        print &amp;quot;CRITICAL - $crit&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET=$?&lt;br /&gt;
echo&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script calls &amp;lt;code&amp;gt;/usr/sbin/vzlist&amp;lt;/code&amp;gt; by sudo. When doing this it normally needs a password, which check_nrpe will not know. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/sbin/vzlist, /usr/sbin/vzquota&lt;br /&gt;
&lt;br /&gt;
=== check_ubc Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export FILE=/tmp/check_ubc&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
ubc_file='/proc/user_beancounters';&lt;br /&gt;
DATA='';&lt;br /&gt;
if [ -r $ubc_file ]; then&lt;br /&gt;
        DATA=`cat $ubc_file`&lt;br /&gt;
fi&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;UNKNOWN- $ubc_file is not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                #print &amp;quot;$vid:$resource $held Barrier:$barrier &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                                                #print &amp;quot;$vmachine_id: Old_Failcnt: $failcnt_old Failcnt: $failcnt \n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ($ret == 0 ) { print &amp;quot;OK. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script needs to read the &amp;lt;code&amp;gt;/proc/user_beancounters&amp;lt;/code&amp;gt; file. This is normally only readable for root. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/local/nagios/libexec/check_ubc&lt;br /&gt;
&lt;br /&gt;
Also don't forget to consider this on your &amp;lt;code&amp;gt;nrpe.cfg&amp;lt;/code&amp;gt;, so that you call the script with sudo:&lt;br /&gt;
 command[check_ubc]=sudo /usr/local/nagios/libexec/check_ubc&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7198</id>
		<title>Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7198"/>
		<updated>2009-04-07T07:51:42Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_vzquota Without SNMP */ ! script changed ! , state UNKNOWN and CRITICAL added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== snmpd configuration ==&lt;br /&gt;
Debian Etch example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install snmpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit '''/etc/default/snmpd''' : remove ''-u snmp'' and replace ''127.0.0.1'' with your ip (ie : 207.46.250.119), Full'''/etc/default/snmpd''' example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid 207.46.250.119'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Debian 4.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create user(my_username) and add new mib. Password need a min. of 8 charactes. Username only characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/snmpd stop&lt;br /&gt;
echo rouser my_username priv &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.51  beancounters  /bin/cat /proc/user_beancounters&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.52  vzquota  /bin/cat /proc/vz/vzquota&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo  createUser my_username MD5 my_password DES &amp;gt;&amp;gt; /var/lib/snmp/snmpd.conf&lt;br /&gt;
/etc/init.d/snmpd start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note that the createUser command goes into a separate file. On Centos5 this file is located in /var/net-snmp/snmpd.conf. Make sure you stop snmpd before putting the createUser command there!).&lt;br /&gt;
&lt;br /&gt;
Testing snmp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snmpwalk   -v 3  -u my_username -l authPriv   -a MD5 -A my_password -x DES -X my_password  $(hostname -i)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the minimum pass phrase length is 8 characters.&lt;br /&gt;
&lt;br /&gt;
== nagios configuration ==&lt;br /&gt;
=== example nagios configuration ===&lt;br /&gt;
add to configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define command {&lt;br /&gt;
command_name check_snmp_openvz_on_port&lt;br /&gt;
# command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ PORT    USER    PASSWORD&lt;br /&gt;
command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ $ARG1$  $ARG2$  $ARG3$&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define host {&lt;br /&gt;
        host_name   openvz-server&lt;br /&gt;
        alias       Serwer Openvz&lt;br /&gt;
        address     207.46.250.119&lt;br /&gt;
        use         generic-host&lt;br /&gt;
        contact_groups  admins&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define service{&lt;br /&gt;
        use                             generic-service&lt;br /&gt;
        host_name                       openvz-server&lt;br /&gt;
        service_description             Virtual Machines Limits&lt;br /&gt;
        check_command                   check_snmp_openvz_on_port!161!my_username!my_password&lt;br /&gt;
        max_check_attempts              1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nagios plugin ===&lt;br /&gt;
It is shell script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cat /usr/local/bin/check_snmp_openvz.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
HOST=$1&lt;br /&gt;
PORT=$2&lt;br /&gt;
USER=$3&lt;br /&gt;
PASS=$4&lt;br /&gt;
export FILE=/tmp/$HOST.beancounters&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA_TMP=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.51.4`&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATA=`echo &amp;quot;$DATA_TMP&amp;quot;| perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# if ($ret == 0 ) { print &amp;quot;Ok. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET1=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
#####################################################################################&lt;br /&gt;
######### quota check&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
DATA=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.52.4 \&lt;br /&gt;
|  perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                $time=$5 ;&lt;br /&gt;
                $expire=$6 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET2=$?&lt;br /&gt;
&lt;br /&gt;
#####################################################################################&lt;br /&gt;
########### return&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
if [  $RET1  -gt $RET2  ]; then&lt;br /&gt;
        RET=$RET1&lt;br /&gt;
        else&lt;br /&gt;
        RET=$RET2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [  $RET  = 0  ]; then&lt;br /&gt;
        echo Ok.&lt;br /&gt;
fi&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== check_vzquota Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RET=0&lt;br /&gt;
DATA=`echo;sudo /usr/sbin/vzlist -1 | xargs -I {} bash -c &amp;quot;echo {}:;sudo /usr/sbin/vzquota stat {} | sed 's/\*//g'&amp;quot;`&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;UNKNOWN - VZquota stats are not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $crit=&amp;quot;&amp;quot;;&lt;br /&gt;
my $warn=&amp;quot;&amp;quot;;&lt;br /&gt;
my $ok=&amp;quot;&amp;quot;;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /^(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $hardlimit ){&lt;br /&gt;
                        $crit=$crit.&amp;quot;VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=2;&lt;br /&gt;
                } elsif ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        $warn=$warn.&amp;quot;VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                $ok=$ok.&amp;quot;$vid:$resource $usage/$softlimit &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
if ($ret == 0) {&lt;br /&gt;
        print &amp;quot;OK - $ok&amp;quot;;&lt;br /&gt;
} elsif ($ret == 1)  {&lt;br /&gt;
        print &amp;quot;WARNING - $warn&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
        print &amp;quot;CRITICAL - $crit&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET=$?&lt;br /&gt;
echo&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script calls &amp;lt;code&amp;gt;/usr/sbin/vzlist&amp;lt;/code&amp;gt; by sudo. When doing this it normally needs a password, which check_nrpe will not know. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/sbin/vzlist, /usr/sbin/vzquota&lt;br /&gt;
&lt;br /&gt;
=== check_ubc Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export FILE=/tmp/check_ubc&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
ubc_file='/proc/user_beancounters';&lt;br /&gt;
DATA='';&lt;br /&gt;
if [ -r $ubc_file ]; then&lt;br /&gt;
        DATA=`cat $ubc_file`&lt;br /&gt;
fi&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;CRITICAL - $ubc_file is not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                #print &amp;quot;$vid:$resource $held Barrier:$barrier &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                                                #print &amp;quot;$vmachine_id: Old_Failcnt: $failcnt_old Failcnt: $failcnt \n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ($ret == 0 ) { print &amp;quot;OK. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script needs to read the &amp;lt;code&amp;gt;/proc/user_beancounters&amp;lt;/code&amp;gt; file. This is normally only readable for root. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/local/nagios/libexec/check_ubc&lt;br /&gt;
&lt;br /&gt;
Also don't forget to consider this on your &amp;lt;code&amp;gt;nrpe.cfg&amp;lt;/code&amp;gt;, so that you call the script with sudo:&lt;br /&gt;
 command[check_ubc]=sudo /usr/local/nagios/libexec/check_ubc&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7197</id>
		<title>Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7197"/>
		<updated>2009-04-07T07:47:37Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_vzquota Without SNMP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== snmpd configuration ==&lt;br /&gt;
Debian Etch example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install snmpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit '''/etc/default/snmpd''' : remove ''-u snmp'' and replace ''127.0.0.1'' with your ip (ie : 207.46.250.119), Full'''/etc/default/snmpd''' example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid 207.46.250.119'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Debian 4.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create user(my_username) and add new mib. Password need a min. of 8 charactes. Username only characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/snmpd stop&lt;br /&gt;
echo rouser my_username priv &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.51  beancounters  /bin/cat /proc/user_beancounters&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.52  vzquota  /bin/cat /proc/vz/vzquota&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo  createUser my_username MD5 my_password DES &amp;gt;&amp;gt; /var/lib/snmp/snmpd.conf&lt;br /&gt;
/etc/init.d/snmpd start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note that the createUser command goes into a separate file. On Centos5 this file is located in /var/net-snmp/snmpd.conf. Make sure you stop snmpd before putting the createUser command there!).&lt;br /&gt;
&lt;br /&gt;
Testing snmp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snmpwalk   -v 3  -u my_username -l authPriv   -a MD5 -A my_password -x DES -X my_password  $(hostname -i)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the minimum pass phrase length is 8 characters.&lt;br /&gt;
&lt;br /&gt;
== nagios configuration ==&lt;br /&gt;
=== example nagios configuration ===&lt;br /&gt;
add to configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define command {&lt;br /&gt;
command_name check_snmp_openvz_on_port&lt;br /&gt;
# command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ PORT    USER    PASSWORD&lt;br /&gt;
command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ $ARG1$  $ARG2$  $ARG3$&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define host {&lt;br /&gt;
        host_name   openvz-server&lt;br /&gt;
        alias       Serwer Openvz&lt;br /&gt;
        address     207.46.250.119&lt;br /&gt;
        use         generic-host&lt;br /&gt;
        contact_groups  admins&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define service{&lt;br /&gt;
        use                             generic-service&lt;br /&gt;
        host_name                       openvz-server&lt;br /&gt;
        service_description             Virtual Machines Limits&lt;br /&gt;
        check_command                   check_snmp_openvz_on_port!161!my_username!my_password&lt;br /&gt;
        max_check_attempts              1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nagios plugin ===&lt;br /&gt;
It is shell script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cat /usr/local/bin/check_snmp_openvz.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
HOST=$1&lt;br /&gt;
PORT=$2&lt;br /&gt;
USER=$3&lt;br /&gt;
PASS=$4&lt;br /&gt;
export FILE=/tmp/$HOST.beancounters&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA_TMP=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.51.4`&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATA=`echo &amp;quot;$DATA_TMP&amp;quot;| perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# if ($ret == 0 ) { print &amp;quot;Ok. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET1=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
#####################################################################################&lt;br /&gt;
######### quota check&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
DATA=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.52.4 \&lt;br /&gt;
|  perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                $time=$5 ;&lt;br /&gt;
                $expire=$6 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET2=$?&lt;br /&gt;
&lt;br /&gt;
#####################################################################################&lt;br /&gt;
########### return&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
if [  $RET1  -gt $RET2  ]; then&lt;br /&gt;
        RET=$RET1&lt;br /&gt;
        else&lt;br /&gt;
        RET=$RET2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [  $RET  = 0  ]; then&lt;br /&gt;
        echo Ok.&lt;br /&gt;
fi&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== check_vzquota Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RET=0&lt;br /&gt;
DATA=`echo;sudo /usr/sbin/vzlist -1 | xargs -I {} bash -c &amp;quot;echo {}:;sudo /usr/sbin/vzquota stat {}&amp;quot;`&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /^(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                print &amp;quot;$vid:$resource $usage/$softlimit &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET=$?&lt;br /&gt;
echo&lt;br /&gt;
exit $RET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script calls &amp;lt;code&amp;gt;/usr/sbin/vzlist&amp;lt;/code&amp;gt; by sudo. When doing this it normally needs a password, which check_nrpe will not know. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/sbin/vzlist, /usr/sbin/vzquota&lt;br /&gt;
&lt;br /&gt;
=== check_ubc Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export FILE=/tmp/check_ubc&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
ubc_file='/proc/user_beancounters';&lt;br /&gt;
DATA='';&lt;br /&gt;
if [ -r $ubc_file ]; then&lt;br /&gt;
        DATA=`cat $ubc_file`&lt;br /&gt;
fi&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;CRITICAL - $ubc_file is not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                #print &amp;quot;$vid:$resource $held Barrier:$barrier &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                                                #print &amp;quot;$vmachine_id: Old_Failcnt: $failcnt_old Failcnt: $failcnt \n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ($ret == 0 ) { print &amp;quot;OK. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script needs to read the &amp;lt;code&amp;gt;/proc/user_beancounters&amp;lt;/code&amp;gt; file. This is normally only readable for root. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/local/nagios/libexec/check_ubc&lt;br /&gt;
&lt;br /&gt;
Also don't forget to consider this on your &amp;lt;code&amp;gt;nrpe.cfg&amp;lt;/code&amp;gt;, so that you call the script with sudo:&lt;br /&gt;
 command[check_ubc]=sudo /usr/local/nagios/libexec/check_ubc&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7196</id>
		<title>Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7196"/>
		<updated>2009-04-07T07:19:45Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_vzquota Without SNMP */ Hint to sudo problems&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== snmpd configuration ==&lt;br /&gt;
Debian Etch example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install snmpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit '''/etc/default/snmpd''' : remove ''-u snmp'' and replace ''127.0.0.1'' with your ip (ie : 207.46.250.119), Full'''/etc/default/snmpd''' example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid 207.46.250.119'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Debian 4.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create user(my_username) and add new mib. Password need a min. of 8 charactes. Username only characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/snmpd stop&lt;br /&gt;
echo rouser my_username priv &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.51  beancounters  /bin/cat /proc/user_beancounters&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.52  vzquota  /bin/cat /proc/vz/vzquota&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo  createUser my_username MD5 my_password DES &amp;gt;&amp;gt; /var/lib/snmp/snmpd.conf&lt;br /&gt;
/etc/init.d/snmpd start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note that the createUser command goes into a separate file. On Centos5 this file is located in /var/net-snmp/snmpd.conf. Make sure you stop snmpd before putting the createUser command there!).&lt;br /&gt;
&lt;br /&gt;
Testing snmp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snmpwalk   -v 3  -u my_username -l authPriv   -a MD5 -A my_password -x DES -X my_password  $(hostname -i)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the minimum pass phrase length is 8 characters.&lt;br /&gt;
&lt;br /&gt;
== nagios configuration ==&lt;br /&gt;
=== example nagios configuration ===&lt;br /&gt;
add to configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define command {&lt;br /&gt;
command_name check_snmp_openvz_on_port&lt;br /&gt;
# command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ PORT    USER    PASSWORD&lt;br /&gt;
command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ $ARG1$  $ARG2$  $ARG3$&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define host {&lt;br /&gt;
        host_name   openvz-server&lt;br /&gt;
        alias       Serwer Openvz&lt;br /&gt;
        address     207.46.250.119&lt;br /&gt;
        use         generic-host&lt;br /&gt;
        contact_groups  admins&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define service{&lt;br /&gt;
        use                             generic-service&lt;br /&gt;
        host_name                       openvz-server&lt;br /&gt;
        service_description             Virtual Machines Limits&lt;br /&gt;
        check_command                   check_snmp_openvz_on_port!161!my_username!my_password&lt;br /&gt;
        max_check_attempts              1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nagios plugin ===&lt;br /&gt;
It is shell script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cat /usr/local/bin/check_snmp_openvz.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
HOST=$1&lt;br /&gt;
PORT=$2&lt;br /&gt;
USER=$3&lt;br /&gt;
PASS=$4&lt;br /&gt;
export FILE=/tmp/$HOST.beancounters&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA_TMP=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.51.4`&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATA=`echo &amp;quot;$DATA_TMP&amp;quot;| perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# if ($ret == 0 ) { print &amp;quot;Ok. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET1=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
#####################################################################################&lt;br /&gt;
######### quota check&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
DATA=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.52.4 \&lt;br /&gt;
|  perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                $time=$5 ;&lt;br /&gt;
                $expire=$6 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET2=$?&lt;br /&gt;
&lt;br /&gt;
#####################################################################################&lt;br /&gt;
########### return&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
if [  $RET1  -gt $RET2  ]; then&lt;br /&gt;
        RET=$RET1&lt;br /&gt;
        else&lt;br /&gt;
        RET=$RET2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [  $RET  = 0  ]; then&lt;br /&gt;
        echo Ok.&lt;br /&gt;
fi&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== check_vzquota Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RET=0&lt;br /&gt;
DATA=`echo;sudo /usr/sbin/vzlist -1 | xargs -I {} bash -c &amp;quot;echo {}:;sudo /usr/sbin/vzquota stat {}&amp;quot;`&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /^(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                print &amp;quot;$vid:$resource $usage/$softlimit &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET=$?&lt;br /&gt;
echo&lt;br /&gt;
exit $RET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script calls &amp;lt;code&amp;gt;/usr/sbin/vzlist&amp;lt;/code&amp;gt; by sudo. When doing this it normally needs a password, which check_nrpe will not know. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/local/nagios/libexec/check_vzquota&lt;br /&gt;
&lt;br /&gt;
Also don't forget to consider this on your &amp;lt;code&amp;gt;nrpe.cfg&amp;lt;/code&amp;gt;, so that you call the script with sudo:&lt;br /&gt;
 command[check_ubc]=sudo /usr/local/nagios/libexec/check_vzquota&lt;br /&gt;
&lt;br /&gt;
=== check_ubc Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export FILE=/tmp/check_ubc&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
ubc_file='/proc/user_beancounters';&lt;br /&gt;
DATA='';&lt;br /&gt;
if [ -r $ubc_file ]; then&lt;br /&gt;
        DATA=`cat $ubc_file`&lt;br /&gt;
fi&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;CRITICAL - $ubc_file is not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                #print &amp;quot;$vid:$resource $held Barrier:$barrier &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                                                #print &amp;quot;$vmachine_id: Old_Failcnt: $failcnt_old Failcnt: $failcnt \n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ($ret == 0 ) { print &amp;quot;OK. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script needs to read the &amp;lt;code&amp;gt;/proc/user_beancounters&amp;lt;/code&amp;gt; file. This is normally only readable for root. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/local/nagios/libexec/check_ubc&lt;br /&gt;
&lt;br /&gt;
Also don't forget to consider this on your &amp;lt;code&amp;gt;nrpe.cfg&amp;lt;/code&amp;gt;, so that you call the script with sudo:&lt;br /&gt;
 command[check_ubc]=sudo /usr/local/nagios/libexec/check_ubc&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7195</id>
		<title>Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7195"/>
		<updated>2009-04-07T07:12:35Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_ubc Without SNMP */ see Talk:Monitoring_openvz_resources_using_nagios_and_snmp#check_ubc_Without_SNMP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== snmpd configuration ==&lt;br /&gt;
Debian Etch example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install snmpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit '''/etc/default/snmpd''' : remove ''-u snmp'' and replace ''127.0.0.1'' with your ip (ie : 207.46.250.119), Full'''/etc/default/snmpd''' example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid 207.46.250.119'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Debian 4.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create user(my_username) and add new mib. Password need a min. of 8 charactes. Username only characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/snmpd stop&lt;br /&gt;
echo rouser my_username priv &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.51  beancounters  /bin/cat /proc/user_beancounters&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.52  vzquota  /bin/cat /proc/vz/vzquota&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo  createUser my_username MD5 my_password DES &amp;gt;&amp;gt; /var/lib/snmp/snmpd.conf&lt;br /&gt;
/etc/init.d/snmpd start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note that the createUser command goes into a separate file. On Centos5 this file is located in /var/net-snmp/snmpd.conf. Make sure you stop snmpd before putting the createUser command there!).&lt;br /&gt;
&lt;br /&gt;
Testing snmp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snmpwalk   -v 3  -u my_username -l authPriv   -a MD5 -A my_password -x DES -X my_password  $(hostname -i)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the minimum pass phrase length is 8 characters.&lt;br /&gt;
&lt;br /&gt;
== nagios configuration ==&lt;br /&gt;
=== example nagios configuration ===&lt;br /&gt;
add to configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define command {&lt;br /&gt;
command_name check_snmp_openvz_on_port&lt;br /&gt;
# command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ PORT    USER    PASSWORD&lt;br /&gt;
command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ $ARG1$  $ARG2$  $ARG3$&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define host {&lt;br /&gt;
        host_name   openvz-server&lt;br /&gt;
        alias       Serwer Openvz&lt;br /&gt;
        address     207.46.250.119&lt;br /&gt;
        use         generic-host&lt;br /&gt;
        contact_groups  admins&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define service{&lt;br /&gt;
        use                             generic-service&lt;br /&gt;
        host_name                       openvz-server&lt;br /&gt;
        service_description             Virtual Machines Limits&lt;br /&gt;
        check_command                   check_snmp_openvz_on_port!161!my_username!my_password&lt;br /&gt;
        max_check_attempts              1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nagios plugin ===&lt;br /&gt;
It is shell script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cat /usr/local/bin/check_snmp_openvz.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
HOST=$1&lt;br /&gt;
PORT=$2&lt;br /&gt;
USER=$3&lt;br /&gt;
PASS=$4&lt;br /&gt;
export FILE=/tmp/$HOST.beancounters&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA_TMP=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.51.4`&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATA=`echo &amp;quot;$DATA_TMP&amp;quot;| perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# if ($ret == 0 ) { print &amp;quot;Ok. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET1=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
#####################################################################################&lt;br /&gt;
######### quota check&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
DATA=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.52.4 \&lt;br /&gt;
|  perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                $time=$5 ;&lt;br /&gt;
                $expire=$6 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET2=$?&lt;br /&gt;
&lt;br /&gt;
#####################################################################################&lt;br /&gt;
########### return&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
if [  $RET1  -gt $RET2  ]; then&lt;br /&gt;
        RET=$RET1&lt;br /&gt;
        else&lt;br /&gt;
        RET=$RET2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [  $RET  = 0  ]; then&lt;br /&gt;
        echo Ok.&lt;br /&gt;
fi&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== check_vzquota Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RET=0&lt;br /&gt;
DATA=`echo;sudo /usr/sbin/vzlist -1 | xargs -I {} bash -c &amp;quot;echo {}:;sudo /usr/sbin/vzquota stat {}&amp;quot;`&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /^(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                print &amp;quot;$vid:$resource $usage/$softlimit &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET=$?&lt;br /&gt;
echo&lt;br /&gt;
exit $RET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== check_ubc Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export FILE=/tmp/check_ubc&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
ubc_file='/proc/user_beancounters';&lt;br /&gt;
DATA='';&lt;br /&gt;
if [ -r $ubc_file ]; then&lt;br /&gt;
        DATA=`cat $ubc_file`&lt;br /&gt;
fi&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;CRITICAL - $ubc_file is not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                #print &amp;quot;$vid:$resource $held Barrier:$barrier &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                                                #print &amp;quot;$vmachine_id: Old_Failcnt: $failcnt_old Failcnt: $failcnt \n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ($ret == 0 ) { print &amp;quot;OK. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script needs to read the &amp;lt;code&amp;gt;/proc/user_beancounters&amp;lt;/code&amp;gt; file. This is normally only readable for root. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/local/nagios/libexec/check_ubc&lt;br /&gt;
&lt;br /&gt;
Also don't forget to consider this on your &amp;lt;code&amp;gt;nrpe.cfg&amp;lt;/code&amp;gt;, so that you call the script with sudo:&lt;br /&gt;
 command[check_ubc]=sudo /usr/local/nagios/libexec/check_ubc&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Talk:Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7194</id>
		<title>Talk:Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Talk:Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7194"/>
		<updated>2009-04-07T07:01:46Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_ubc Without SNMP */ forgot the signature, sorry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thanks ==&lt;br /&gt;
Very cool, thanks for the nagios plugin! {{unsigned|Mh720|02:07, 14 November 2006}}&lt;br /&gt;
&lt;br /&gt;
== Nagios w/o snmp ==&lt;br /&gt;
Is there a nagios script to do the same monitoring without snmp? Seems like an unnecessary additional service to me. {{unsigned|Degradas|01:01, 27 September 2007}}&lt;br /&gt;
&lt;br /&gt;
: Remove the relevant snmp entries, and use the script with nagios-nrpe or with the nagios ssh plugin ... {{unsigned|Curx|21:50, 27 September 2007}}&lt;br /&gt;
&lt;br /&gt;
== [[Monitoring_openvz_resources_using_nagios_and_snmp#check_ubc_Without_SNMP|check_ubc Without SNMP]] ==&lt;br /&gt;
&lt;br /&gt;
Hi, after searching a long time for the error I would suggest to change this script.&lt;br /&gt;
A help would be a result &amp;quot;critical&amp;quot; if the file /proc/user_beancounters&amp;quot; is not readable (or empty) with a hint to sudo. In my case Nagios was always saying the all was ok, and it wasn't... (Without any hint or problem that check_ubc simple wasn't able to read the file)&lt;br /&gt;
This could simply be done be changing the following line:&lt;br /&gt;
 DATA=`cat /proc/user_beancounters`&lt;br /&gt;
by:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubc_file='/proc/user_beancounters';&lt;br /&gt;
DATA='';&lt;br /&gt;
if [ -r $ubc_file ]; then&lt;br /&gt;
        DATA=`cat $ubc_file`&lt;br /&gt;
fi&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;CRITICAL - $ubc_file is not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--[[User:Kako|Kako]] 07:01, 7 April 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Talk:Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7193</id>
		<title>Talk:Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Talk:Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7193"/>
		<updated>2009-04-07T06:59:22Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_ubc Without SNMP */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Thanks ==&lt;br /&gt;
Very cool, thanks for the nagios plugin! {{unsigned|Mh720|02:07, 14 November 2006}}&lt;br /&gt;
&lt;br /&gt;
== Nagios w/o snmp ==&lt;br /&gt;
Is there a nagios script to do the same monitoring without snmp? Seems like an unnecessary additional service to me. {{unsigned|Degradas|01:01, 27 September 2007}}&lt;br /&gt;
&lt;br /&gt;
: Remove the relevant snmp entries, and use the script with nagios-nrpe or with the nagios ssh plugin ... {{unsigned|Curx|21:50, 27 September 2007}}&lt;br /&gt;
&lt;br /&gt;
== [[Monitoring_openvz_resources_using_nagios_and_snmp#check_ubc_Without_SNMP|check_ubc Without SNMP]] ==&lt;br /&gt;
&lt;br /&gt;
Hi, after searching a long time for the error I would suggest to change this script.&lt;br /&gt;
A help would be a result &amp;quot;critical&amp;quot; if the file /proc/user_beancounters&amp;quot; is not readable (or empty) with a hint to sudo. In my case Nagios was always saying the all was ok, and it wasn't... (Without any hint or problem that check_ubc simple wasn't able to read the file)&lt;br /&gt;
This could simply be done be changing the following line:&lt;br /&gt;
 DATA=`cat /proc/user_beancounters`&lt;br /&gt;
by:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubc_file='/proc/user_beancounters';&lt;br /&gt;
DATA='';&lt;br /&gt;
if [ -r $ubc_file ]; then&lt;br /&gt;
        DATA=`cat $ubc_file`&lt;br /&gt;
fi&lt;br /&gt;
if [ -z &amp;quot;$DATA&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;CRITICAL - $ubc_file is not readable or empty. Maybe it is only readable for root and this script should be called by sudo.&amp;quot;;&lt;br /&gt;
        exit 3;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7192</id>
		<title>Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=7192"/>
		<updated>2009-04-07T06:45:07Z</updated>

		<summary type="html">&lt;p&gt;Kako: /* check_ubc Without SNMP */ append a hint to needed sudo entries&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== snmpd configuration ==&lt;br /&gt;
Debian Etch example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install snmpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit '''/etc/default/snmpd''' : remove ''-u snmp'' and replace ''127.0.0.1'' with your ip (ie : 207.46.250.119), Full'''/etc/default/snmpd''' example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid 207.46.250.119'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Debian 4.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create user(my_username) and add new mib. Password need a min. of 8 charactes. Username only characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/snmpd stop&lt;br /&gt;
echo rouser my_username priv &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.51  beancounters  /bin/cat /proc/user_beancounters&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.52  vzquota  /bin/cat /proc/vz/vzquota&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo  createUser my_username MD5 my_password DES &amp;gt;&amp;gt; /var/lib/snmp/snmpd.conf&lt;br /&gt;
/etc/init.d/snmpd start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note that the createUser command goes into a separate file. On Centos5 this file is located in /var/net-snmp/snmpd.conf. Make sure you stop snmpd before putting the createUser command there!).&lt;br /&gt;
&lt;br /&gt;
Testing snmp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snmpwalk   -v 3  -u my_username -l authPriv   -a MD5 -A my_password -x DES -X my_password  $(hostname -i)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the minimum pass phrase length is 8 characters.&lt;br /&gt;
&lt;br /&gt;
== nagios configuration ==&lt;br /&gt;
=== example nagios configuration ===&lt;br /&gt;
add to configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define command {&lt;br /&gt;
command_name check_snmp_openvz_on_port&lt;br /&gt;
# command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ PORT    USER    PASSWORD&lt;br /&gt;
command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ $ARG1$  $ARG2$  $ARG3$&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define host {&lt;br /&gt;
        host_name   openvz-server&lt;br /&gt;
        alias       Serwer Openvz&lt;br /&gt;
        address     207.46.250.119&lt;br /&gt;
        use         generic-host&lt;br /&gt;
        contact_groups  admins&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define service{&lt;br /&gt;
        use                             generic-service&lt;br /&gt;
        host_name                       openvz-server&lt;br /&gt;
        service_description             Virtual Machines Limits&lt;br /&gt;
        check_command                   check_snmp_openvz_on_port!161!my_username!my_password&lt;br /&gt;
        max_check_attempts              1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nagios plugin ===&lt;br /&gt;
It is shell script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cat /usr/local/bin/check_snmp_openvz.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
HOST=$1&lt;br /&gt;
PORT=$2&lt;br /&gt;
USER=$3&lt;br /&gt;
PASS=$4&lt;br /&gt;
export FILE=/tmp/$HOST.beancounters&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA_TMP=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.51.4`&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATA=`echo &amp;quot;$DATA_TMP&amp;quot;| perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# if ($ret == 0 ) { print &amp;quot;Ok. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET1=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
#####################################################################################&lt;br /&gt;
######### quota check&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
DATA=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.52.4 \&lt;br /&gt;
|  perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                $time=$5 ;&lt;br /&gt;
                $expire=$6 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET2=$?&lt;br /&gt;
&lt;br /&gt;
#####################################################################################&lt;br /&gt;
########### return&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
if [  $RET1  -gt $RET2  ]; then&lt;br /&gt;
        RET=$RET1&lt;br /&gt;
        else&lt;br /&gt;
        RET=$RET2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [  $RET  = 0  ]; then&lt;br /&gt;
        echo Ok.&lt;br /&gt;
fi&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== check_vzquota Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RET=0&lt;br /&gt;
DATA=`echo;sudo /usr/sbin/vzlist -1 | xargs -I {} bash -c &amp;quot;echo {}:;sudo /usr/sbin/vzquota stat {}&amp;quot;`&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /^(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                print &amp;quot;$vid:$resource $usage/$softlimit &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET=$?&lt;br /&gt;
echo&lt;br /&gt;
exit $RET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== check_ubc Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export FILE=/tmp/check_ubc&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA=`cat /proc/user_beancounters`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                #print &amp;quot;$vid:$resource $held Barrier:$barrier &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                                                #print &amp;quot;$vmachine_id: Old_Failcnt: $failcnt_old Failcnt: $failcnt \n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ($ret == 0 ) { print &amp;quot;OK. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The script needs to read the &amp;lt;code&amp;gt;/proc/user_beancounters&amp;lt;/code&amp;gt; file. This is normally only readable for root. Because of this it is necessary that you append a line like the following to &amp;lt;code&amp;gt;/etc/sudors&amp;lt;/code&amp;gt; (user name an path should be adapted to the right ones on your system):&lt;br /&gt;
 nagios   ALL=NOPASSWD: /usr/local/nagios/libexec/check_ubc&lt;br /&gt;
&lt;br /&gt;
Also don't forget to consider this on your &amp;lt;code&amp;gt;nrpe.cfg&amp;lt;/code&amp;gt;, so that you call the script with sudo:&lt;br /&gt;
 command[check_ubc]=sudo /usr/local/nagios/libexec/check_ubc&lt;/div&gt;</summary>
		<author><name>Kako</name></author>
		
	</entry>
</feed>