| | | | |

Création d’un rapport system & envois par mail

Sur des serveurs, serveurs distant ou VPS, il est souvent intéressant d’avoir des rapports sur l’état actuelle de la machine. Par exemple combien d’espace libre il reste sur le disque ou en mémoire etc.

Dans cette article on va extraire les informations rechercher et les intégrer dans un fichier.

Affichage de l’espace disque disponible sur le serveur

On va commencer par extraire l’espace disque disponible avec la commande:
df -h
Quelque chose de similaire devrais s’afficher:

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  2.8G   11G  21% /
devtmpfs        430M     0  430M   0% /dev
tmpfs           462M     0  462M   0% /dev/shm
tmpfs           462M   47M  415M  11% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           462M     0  462M   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   49M  204M  20% /boot
tmpfs            93M     0   93M   0% /run/user/1000

Dans cette exemple on a d’autre informations qu’on ne veut peut-être pas voir.
On va appliquer un filtre avec la commande suivante:
df -h | grep /dev/root
/dev/root est le dossier qu’on désire voir. Cette exemple a été fais sur un RaspBerry Pi. Si on est sur un autre serveur tel qu’un VPS OVH, le dossier change.

Ce qui s’affiche est réduit au minimum mais ça devrais déjà nous être utile.

/dev/root 15G 2.8G 11G 21% /

Pour conserver une trace de nos information, on va l’ajouter à un fichier.
On rajouter >> à la fin de la ligne de commande et le nom de fichier au quel on veut ajouter les infos:
df -h | grep /dev/root >> InfoSystem.txt

Pour afficher le contenu du fichier on utilise la commande:
cat InfoSystem.txt

Si on répète la commande df -h | grep /dev/root >> InfoSystem.txt et qu’on regarde à nouveau le contenu du fichier avec la commande cat InfoSystem.txt , on peut voir qu’il affiche deux lignes.
Ceci est du au deux >> qu’on a mit sur la commande df -h | grep /dev/root >> InfoSystem.txt . Si on met un seul > , le fichier original est effacer et une seul ligne est écrite dans le fichier.

Pour donner un peu plus de forme au fichier, on va exécuter les deux ligne suivante:
df -h | grep Filesystem > InfoSystem.txt
df -h | grep /dev/root >> InfoSystem.txt

La première commande va effacer le fichier originel et y a jouter le titre extrait de la commande df .
La deuxième commande, va extraire l’espace disponible sur le disque et le rajouter au fichier.
Si on regarde le contenu du fichier avec la commande cat InfoSystem.txt , on a un semblant de tableau avec le titre et les résultats en dessous.

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  2.8G   11G  21% /

Affichage de la mémoire libre du serveur

La commande free , nous permet d’avoir un aperçu de la mémoire vive libre sur notre system.
On va utiliser la commande free -h et l’ajouter au fichier existant sans effacer son contenu initial.
free -h >> InfoSystem.txt

Le nouveau fichier devrais contenir quelque chose de similaire à ceci:

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  2.8G   11G  21% /
              total        used        free      shared  buff/cache   available
Mem:          923Mi       187Mi       146Mi        46Mi       588Mi       635Mi
Swap:          99Mi       1.0Mi        98Mi

Affichage du nom du serveur

Si on a plusieurs machine qui nous font de beau rapport de ce type, il faut encore savoir les identifier. On ajout le nom de la machine au fichier avec la commande hostname :
hostname >> InfoSystem.txt

Affichage de la date et de l’heure du serveur

Si on analyse à nouveau le contenu du fichier, on a déjà pas mal d’informations mais on sais pas quand elle ont été ajouter au fichier. On va donc ajouter la date et l’heure avec la commande date:
date >> InfoSystem.txt

Affichage de l’adresse IP Public du serveur

Une autre information intéressante, si c’est une machine distante, c’est l’adresse IP public, vu que celle-ci peut changer, il est important d’avoir la plus récente si on veut se connecter en SSH.
On peut utiliser la commande curl https://ipinfo.io/ip , qui renvois juste l’adresse IP public actuelle de la machine.
On ajoute l’adresse IP au fichier avec la commande suivante:
curl https://ipinfo.io/ip
>> InfoSystem.txt

On peut voir le contenu de notre fichier avec la commande cat InfoSystem.txt

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  2.8G   11G  21% /
              total        used        free      shared  buff/cache   available
Mem:          923Mi       187Mi       146Mi        46Mi       588Mi       635Mi
Swap:          99Mi       1.0Mi        98Mi
RaspBerryPi-BE
Wed 15 Jun 15:05:15 CEST 2022
87.64.172.119

Création d’un fichier bash pour automatiser nos commandes

On commence à avoir pas mal d’informations, mais ça fais aussi pas mal de commandes à taper. On va automatiser le tout dans une seul commande avec un fichier bash.
On édite un fichier avec la commande nano .
nano InfoSystem.sh
On ajoute ce qui suite dans le fichier:

#!/bin/sh
echo $(echo "Salut, Voici un petit rapport sur cette machine" > InfoSystem.txt)

echo $(hostname) $(echo -n " - ") $(date) $(echo -n " - IP: ") $(curl https://ipinfo.io/ip)  >> InfoSystem.txt

echo $(echo >> InfoSystem.txt)
echo $(df -h | grep Filesystem >> InfoSystem.txt)
echo $(df -h | grep /dev/root >> InfoSystem.txt)

echo $(echo >> InfoSystem.txt)
echo $(free -h >> InfoSystem.txt)

On enregistre avec “Ctrl” + “x” , “y” , “Entrer”.

Ceci parait bien plus compliquer que les simple commandes. Mais tout a une explication.

  1. #!/bin/sh = indentification du type de fichier
  2. echo $(echo “Salut, Voici un petit rapport sur cette machine” > InfoSystem.txt) = ajout d’un petit message au début du fichier de rapport InfoSystem.txt . Vu qu’il y a que un seul > , le fichier original est effacer et remplacer.
  3. echo $(hostname) $(echo -n ” – “) $(date) $(echo -n ” – IP: “) $(curl https://ipinfo.io/ip) > InfoSystem.txt = 5 commande dans une ligne pour avoir un rapport plus compacte. echo -n ” – ” permet de mettre du texte ou dans ce cas ci un espace suivie d’un trais d’union et d’un autre espace. La même chose plus loin avec IP:
    Quand il y a plusieurs commande suivie dans une trame echo , il faut isolé chaque commande supplémentaire avec $( )
  4. echo $(echo >> InfoSystem.txt) = ajoute juste une ligne vide au fichier.

Le reste des commandes sont identique et expliquer plus haut.

Pour exécuter le fichier créer, on utilise la commande:
sh InfoSystem.sh

Le message suivant devrais apparaitre.

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    13  100    13    0     0     60      0 --:--:-- --:--:-- --:--:--    60

Ceci est du à la commande curl https://ipinfo.io/ip qui récupère l’adresse IP sur un site web.

Voici à quoi pourrais ressembler le fichier une fois la commande suivante exécuter:
cat InfoSystem.txt

Salut, Voici un petit rapport sur cette machine
RaspBerryPi-BE - Wed 15 Jun 16:14:46 CEST 2022 - IP: xxx.xxx.xxx.xxx

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  2.8G   11G  21% /

              total        used        free      shared  buff/cache   available
Mem:          923Mi       189Mi       144Mi        46Mi       588Mi       633Mi

Renommer le fichier avec la date actuelle

Afin de garder un suivie des rapports, on peut aussi les renommer avec la date et l’heure du jour de création. Pour le faire on ajoute la ligne suivante à la fin de notre fichier InfoSystem.sh :
echo $(mv InfoSystem.txt "$(date '+%Y%m%d%H%M').InfoSystem.txt")

La commande mv déplace le fichier vers un autre fichier et dans notre cas un autre fichier avec un autre nom. date '+%Y%m%d%H%M' extrait la date, Y= Année, m=mois, d= jour, H=heure, M=minutes.

Envois du rapport system par mail

Voilà déjà quelque chose de bien intéressant mais le plus intéressant c’est de recevoir les rapport par mail. Dans l’article “ssmtp, envoyer des mail en ligne de commande” , on apprend à installer le logiciel ssmtp qui permet d’envoyer des mails à partir de la ligne de commande.
Pour la suite il faut que ssmtp soit installer.

En rajoutant la ligne suivante avant la ligne qui renomme le fichier de rapport, on envois le fichier indiquer par mail à l’adresse email indiquer:
ssmtp -v Votre@Email.com < /home/pi/InfoSystem.txt

Pour l’envois de mail avec une meilleures mise en forme, on peut utiliser la commande suivante:
cat NonDeFichier | mail -s "ObjetDuMail" MailDe@Destination.com
Cette commande utilise mailutils. Il faut donc qu’il ai été installé comme indiquer dans l’article “ssmtp, envoyer des mail en ligne de commande“.

Exemple d’un scripte bash qui récupère les informations du serveur


#!/bin/sh

#Nom et emplacement du fichier rapport
FileN="/home/pi/SysReboot.txt"

echo $(echo "Salut, c'est ") $(hostname) $(echo -n ". On est le ") $(date) $(echo " et je viens de démarrer.") > $FileN

echo $(echo -n " - IP: ") $(curl https://ipinfo.io/ip) >> $FileN
echo $(echo -n " - IP: ") $(curl https://ipinfo.io/hostname) >> $FileN


echo $(echo >> $FileN)
echo $(df -h | grep Filesystem >> $FileN)
echo $(df -h | grep /dev/root >> $FileN)

echo $(echo >> $FileN)
echo $(free -h >> $FileN)

cat $FileN | mail -s "SystemBoot" MailDe@Destination.com

echo $(mv $FileN "$FileN $(date '+%Y%m%d%H%M')")

Exécution des scripte automatiquement

crontab

mes sources: https://phoenixnap.com/kb/ubuntu-20-04-change-hostname
https://www.freecodecamp.org/news/shell-scripting-crash-course-how-to-write-bash-scripts-in-linux
https://www.linuxtricks.fr/wiki/print.php?id=752
https://mailutils.org/

Laisser un commentaire