This repository has been archived by the owner on Jun 24, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck_memory
91 lines (80 loc) · 3.44 KB
/
check_memory
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/bin/sh
#
# Author: Jan Collijs
# Email: jan.collijs@inuits.eu
# Date: October 2012
# Updated: December 2014 by Omar Reygaert
# Updated: February 2018 by Jan Collijs
# Implemented available memory check over free memory based on /proc/meminfo
# Purpose: Icinga-check to check the memory usage of the system
PROGNAME=`basename $0`
PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
REVISION=`echo '$Revision: 1.00 $' | sed -e 's/[^0-9.]//g'`
. $PROGPATH/utils.sh
WARNINGMEMPERCENTAGE=15
CRITICALMEMPERCENTAGE=10
WARNINGSWAOPERCENTAGE=25
CRITICALSWAPPERCENTAGE=50
# Retrieving the data from the server
TOTALMEM=`vmstat -s -SM | grep "total memory" | cut -f1 -d'M' | tr -d ' '`
USEDMEM=`vmstat -s -SM | grep " active memory" | cut -f1 -d'M' | tr -d ' '`
FREEMEM=`vmstat -s -SM | grep "free memory" | cut -f1 -d'M' | tr -d ' '`
CACHEDMEM=`vmstat -s -SM | grep "swap cache" | cut -f1 -d's' | tr -d ' '`
AVAILABLEMEM=$(cat /proc/meminfo | grep "MemAvailable" | cut -f2 -d':' | tr -s " " | cut -f2 -d' ')
AVAILABLEMEM=$(($AVAILABLEMEM / 1024 ))
TOTALSWAP=`vmstat -s -SM | grep "total swap" | cut -f1 -d'M' | tr -d ' '`
USEDSWAP=`vmstat -s -SM | grep "used swap" | cut -f1 -d'M' | tr -d ' '`
FREESWAP=`vmstat -s -SM | grep "free swap" | cut -f1 -d'M' | tr -d ' '`
# Calculating the percentages for memory & swap
USEDMEMPERCENTAGE=$(( $USEDMEM * 100 / $TOTALMEM))
FREEMEMPERCENTAGE=$(( $FREEMEM * 100 / $TOTALMEM))
AVAILABLEMEMPERCENTAGE=$(( $AVAILABLEMEM * 100 / $TOTALMEM))
USEDSWAPPERCENTAGE=$(( $USEDSWAP * 100 / $TOTALSWAP))
FREESWAPPERCENTAGE=$(( $FREESWAP * 100 / $TOTALSWAP))
# Compiling the memory message & icinga state
if [ $AVAILABLEMEMPERCENTAGE -lt $WARNINGMEMPERCENTAGE ];then
MEMMESSAGE="WARNING: only $AVAILABLEMEMPERCENTAGE% is available, $USEDMEMPERCENTAGE% of memory used"
MSTATE=$STATE_WARNING
elif [ $AVAILABLEMEMPERCENTAGE -lt $CRITICALMEMPERCENTAGE ];then
MEMMESSAGE="CRITICAL: only $AVAILABLEMEMPERCENTAGE% is available, $USEDMEMPERCENTAGE% of memory used"
MSTATE=$STATE_CRITICAL
else
MEMMESSAGE="OK: $AVAILABLEMEMPERCENTAGE% is available, $USEDMEMPERCENTAGE% of memory used"
MSTATE=$STATE_OK
fi
# Compiling the swap message & icinga state
if [ $USEDSWAPPERCENTAGE -gt $WARNINGSWAOPERCENTAGE ];then
SWAPMESSAGE="WARNING: $USEDSWAPPERCENTAGE% of swap used, only $FREESWAPPERCENTAGE% is free"
SSTATE=$STATE_WARNING
elif [ $USEDSWAPPERCENTAGE -gt $CRITICALSWAPPERCENTAGE ];then
SWAPMESSAGE="CRITICAL: $USEDSWAPPERCENTAGE% of swap used, $FREESWAPPERCENTAGE% is free"
SSTATE=$STATE_CRITICAL
else
SWAPMESSAGE="OK: $USEDSWAPPERCENTAGE% of swap used, $FREESWAPPERCENTAGE% is free"
SSTATE=$STATE_OK
fi
# Retrieving the correct state for icinga and distributing it
if [ $SSTATE -lt 0 -o $SSTATE -gt 3 -o $MSTATE -lt 0 -o $MSTATE -gt 3 ]; then
STATE=$STATE_UNKNOWN
elif [ $SSTATE -eq 0 -a $MSTATE -eq 0 ]; then
STATE=$STATE_OK
elif [ $SSTATE -eq 1 -a $MSTATE -eq 1 ]; then
STATE=$STATE_WARNING
elif [ $SSTATE -eq 2 -a $MSTATE -eq 2 ]; then
STATE=$STATE_CRITICAL
elif [ $SSTATE -eq 3 -a $MSTATE -eq 3 ]; then
STATE=$STATE_UNKNOWN
elif [ $SSTATE -eq 3 -o $MSTATE -eq 3 ]; then
STATE=$STATE_UNKNOWN
elif [ $SSTATE -eq 2 -o $MSTATE -eq 2 ]; then
STATE=$STATE_CRITICAL
elif [ $SSTATE -eq 1 -o $MSTATE -eq 1 ]; then
STATE=$STATE_WARNING
elif [ $SSTATE -eq 0 -o $MSTATE -eq 0 ]; then
STATE=$STATE_OK
else
STATE=$STATE_UNKNOWN
fi
# Distributing the ouput message and exiting with the nagios state
echo "$MEMMESSAGE / $SWAPMESSAGE"
exit $STATE