Il est parfois utile d’avoir un petit script en bash permettant de remonter des infos intéressantes sur un serveur. Comme par exemple la version de PHP, Apache ou bien encore des infos sur les CPUs, la RAM, l’espace disque, le réseau, les connexions etc…
Voila le résultat du script exécuté sur une Debian 10
#Architecture: Linux ns321077 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux
#PHP: PHP 7.3.14-1~deb10u1 (cli) (built: Feb 16 2020 15:07:23) ( NTS )
#Apache: Server version: Apache/2.4.38 (Debian) (Server built: 2019-10-15T19:53:42)
#MySQL: mysql Ver 15.1 Distrib 10.3.22-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
#Postfix: mail_version = 3.4.8 (mail_release_date = 20191124)
#Network: gateway xxx.xxx.xx.x
#Interface: ens18 62:ef:70:92:d5:aa
#Memory Usage: 516/1995MB (25.86%)
#CPU physical : 1
#vCPU : 2
#CPU load: 0.01 0.02 0.00 1/143 28770
#CPU Usage: 3%
#Connexions TCP UDP: 1 ESTABLISHED / 2 TIME_WAIT
#Last reboot: démarrage système 2020-01-21 09:55
#LVM use: yes
#Disk Usage: 22/96GB (24%)
Voici la source du script :
#!/bin/bash
echo ‘#Architecture:’ `uname -a`
echo ‘#PHP: ‘ `php -v | grep PHP -m 1`
echo ‘#Apache: ‘ `/usr/sbin/apache2 -v | grep version -m 1` ‘(‘`/usr/sbin/apache2 -v | grep built -m 1`’)’
echo ‘#MySQL: ‘ `mysql -V`
echo ‘#Postfix: ‘ `postconf -d | grep -m 1 mail_version` ‘(‘`postconf -d | grep -m 1 mail_release_date`’)’
echo “#Network:” `ifconfig | grep -m 1 “inet adr”` `cat /etc/network/interfaces | grep gateway`
IFACE=ens18
read MAC </sys/class/net/$IFACE/address
echo “#Interface:” $IFACE $MAC
free -m | awk ‘NR==2{printf “#Memory Usage: %s/%sMB (%.2f%%)\n”, $3,$2,$3*100/$2 }’
echo ‘#CPU physical :’ `cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l`
grep ^cpu\\scores /proc/cpuinfo | uniq | awk ‘{print “#vCPU : ” $4}’
echo ‘#CPU load:’ `cat /proc/loadavg`
DELAY=${1:-2}
function getstat() {
grep ‘cpu ‘ /proc/stat | sed -e ‘s/ */x/g’ -e ‘s/^cpux//’
}
function extract() {
echo $1 | cut -d ‘x’ -f $2
}
function change() {
local e=$(extract $ENDSTAT $1)
local b=$(extract $STARTSTAT $1)
local diff=$(( $e – $b ))
echo $diff
}
STARTSTAT=$(getstat)
sleep $DELAY
#Record the end statistics
ENDSTAT=$(getstat)
USR=$(change 1)
SYS=$(change 3)
IDLE=$(change 4)
IOW=$(change 5)
ACTIVE=$(( $USR + $SYS + $IOW ))
TOTAL=$(($ACTIVE + $IDLE))
PCT=$(( $ACTIVE * 100 / $TOTAL ))
echo “#CPU Usage: $PCT%”
echo ‘#Connexions TCP UDP:’ `netstat -ntu | grep ESTAB | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr | wc -l` ‘ ESTABLISHED /’ `netstat -ntu | grep TIME_WAIT | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr | wc -l` ‘ TIME_WAIT’
echo ‘#Last reboot:’ `who -b`
if [ -f “/sbin/lvdisplay” ]; then
echo “#LVM use: yes”;
else
echo “#LVM use: no”;
fi
df -h | awk ‘$NF==”/”{printf “#Disk Usage: %d/%dGB (%s)\n”, $3,$2,$5}’
A noter, remplacez la valeur ens18 de la variable IFACE par votre interface (sous Debian 9 -10 – 11 ; par défaut, il s’agit de ens18).
Ajouter le script au monitoring Nagios
Pour aller un peut plus loin sur l’usage de ce script, si vous disposez d’un serveur Nagios pour monitorer vos VMs, il serait intéressant de remonter ces informations dans votre Nagios.
Pour ce faire, sur la VM à monitorer, modifiez le fichier nrpe.cfg :
$ nano /etc/nagios/nrpe.cfg
Ajoutez la ligne ci dessous dans la liste des commandes (votre script est placé sur ce chemin /usr/lib/nagios/plugins/check_server_infos)
command[check_server_infos]=/usr/lib/nagios/plugins/check_server_infos
Redémarrez le service Nagios
$ service nagios-nrpe-server reload
Enfin, sur le serveur Nagios, dans la partie “define service” du service, appelez la commande “check_server_infos” dans le fichier /usr/local/nagios/etc/objects/services.cfg :
define service {
use generic-service-mail
host xxxxxxxxx
service_description Serveur Infos
check_command check_nrpe!check_server_infos
}
Puis vous pouvez reloader le serveur Nagios
$ service nagios-nrpe-server reload