check_linux_memory/check_linux_memory.py

49 lines
1.4 KiB
Python
Raw Normal View History

2020-12-26 22:04:04 +00:00
#!/usr/bin/python3
import sys
with open('/proc/meminfo', 'r') as f:
lines = f.read().splitlines()
mem = {x.split(':',1)[0] : int( x.split(':',1)[1].replace('kB', '').lstrip().rstrip() ) for x in lines}
mem['MemUsed'] = mem['MemTotal'] - mem['MemFree'] - mem ['Cached'] - mem['SReclaimable'] - mem['Buffers']
mem['SwapUsed'] = mem['SwapTotal'] - mem['SwapFree']
mem['OverallUsed'] = mem['MemUsed'] + mem['SwapUsed']
ratio = float(mem['OverallUsed']) / float(mem['MemTotal']) * 100.0
#print('MemTotal: %8.2f MB' % (mem['MemTotal']/1024) )
#print('OverallUsed: %8.2f MB' % (mem['OverallUsed']/1024) )
#print('Ratio: %8.2f %%' % ratio )
#print('MemUsed: %8.2f MB' % (mem['MemUsed']/1024) )
#print('SwapUsed: %8.2f MB' % (mem['SwapUsed']/1024) )
out = 'MemRatio: %.1f%% of %.1fGB RAM (%.1fGB Swap)' % ( ratio, (mem['MemTotal']/1024.0/1024.0), (mem['SwapTotal']/1024.0/1024.0) )
if ratio > 150.0:
exitcode = 2
exitstr = 'CRITICAL'
elif ratio > 100.0:
exitcode = 1
exitstr = 'WARNING'
else:
exitcode = 0
exitstr = 'OK'
multiout = []
for label in ['MemTotal', 'OverallUsed', 'MemUsed', 'SwapTotal', 'SwapUsed']:
multiout.append('%s: %.4fGB' % (label, float(mem[label])/1024.0/1024.0))
perfdata = []
for label in ['MemTotal', 'OverallUsed', 'MemUsed', 'SwapTotal', 'SwapUsed']:
perfdata.append('%s=%dB;;;;' % (label, mem[label]*1024) )
print(exitstr + ' ' + out + '|' + ' '.join(perfdata))
print('\n'.join(multiout))
sys.exit(exitcode)