Christophe CasalegnoAutoimmune warrior, Entrepreneur & Bio/Hacker

brain@127.0.0.1:~$ cat post.html

Surveiller la mémoire disponible et agir lorsqu’un seuil est atteint

Dans le travail d’administration, il peut être utile de surveiller la mémoire disponible et de déclencher une action lorsqu’un seuil est atteint. La plupart des outils ne donnent pas une image réaliste de l’utilisation de la mémoire. Par exemple, si vous lancez la commande « top » sur un serveur, vous obtenez quelque chose comme ça :

memorycheck1

Avec la commande « free », vous obtenez la même information :

memorycheck2

On peut aussi faire le test sur une machine plus grosse :

memorycheck3
memorycheck4

Mais ces résultats ne reflètent pas vraiment la réalité, tout simplement parce que Linux aime les buffers et le cache. Si on utilise maintenant htop à la place de top ou de free, on obtient une autre information.

Sur la deuxième machine :

memorycheck4
memorycheck5

Pour déclencher une action lorsqu’il y a réellement un problème de mémoire, il faut donc récupérer la bonne information. On peut le faire en une ligne avec free, awk, print et sed :

free | awk 'FNR == 3 {print $4/($3+$4)*100-100}'| sed 's/-//g'

 
Exemple :

memorycheck6

Il ne reste plus qu’à écrire un script shell pour surveiller ça et agir en cas de problème :

#!/bin/bash
# A simple shell script that take action when occupied memory reach a threshold
# Author : Christophe Casalegno
# https://twitter.com/Brain0verride
# https://www.christophe-casalegno.com
threshold1=80 # in percent for first reach point
threshold2=90 # in percent for second reach point
host=`hostname -f`
alert=alerte@nospam.com # Email for receiving alerts
logfile="/var/log/memory.log"
# Calculate real occupied memory in percent
realmem=`free | awk 'FNR == 3 {print $4/($3+$4)*100-100}'| sed 's/-//g' |cut -d "." -f1`
if [ "$realmem" -gt "$threshold1" ]
then
date=`date`
echo "The memory usage has reached $realmem% on $host" | mail -s "$host : High Memory Usage Alert" $alert
echo "$date : The memory usage has reached $realmem% on $host." >> $logfile
if [ "$realmem" -gt "$threshold2" ]
then
echo "The memory usage has reached $realmem% on $host" | mail -s "$host : Very High Memory Usage Alert" $alert
echo "$date : Alert T2 : The memory usage has reached $realmem% on $host." >> $logfile
# Put your own urgency commands here
fi
fi

J’utilise deux seuils, mais vous pouvez en mettre plus ou moins selon vos besoins. Il suffit ensuite de remplacer l’envoi d’emails et l’écriture dans les logs par les actions de votre choix, puis de mettre le script dans votre crontab.

Vous pouvez télécharger le script directement ici : memorycheck ou depuis votre serveur :

wget --no-check-certificate https://www.christophe-casalegno.com/tools/memorycheck.sh ; chmod +x memorycheck.sh

Christophe Casalegno
​Vous pouvez me suivre sur : Twitter | Facebook | Linkedin | Telegram | Youtube

1 commentaire

  1. Rétrolien : Bash : how to simply check disk space on linux and take action when a threshold is reached | Christophe Casalegno

Laisser un commentaire

Ajouter un commentaire
Christophe Casalegno Brain 0verride

Soyez simple
et direct !