Pages : 1
#1 Le 16/01/2013, à 08:18
- bichon63
Récapitulatif de l'état du serveur par mail.
Bonjour,
J'ai 2 petits serveurs dédiés et j'aimerais bien pouvoir recevoir par mail, un petit récapitulatif de l'état du serveur.
Je ne m'y connais pas trop dans ce domaine mais j'ai vu des logiciels comme Nagios, Munin, ... Mais j'ai envie d'un truc hyper simple et qui ne prenne pas trop de ressources.
Ce que je voudrais dans mon récap quelques choses comme ça (en vrac) :
- les dernières connexions ssh
- liste des mises à jour à installer
- les dernières grosses erreurs
- uptime, mem utilisée, espace disque libre, données SMART, ...
- savoir si certains services sont bien lancés et les ports ouverts
- voir la tailles de certains dossiers / fichiers
- vérifier que les sauvegardes ont bien été faites
- ...
Je pense que c'est possible avec un petit script bash (j'en suis sûr même), mais je n'ai pas trop de temps à y consacrer en ce moment et je suis quasiment sûr que quelqu'un a déjà réaliser un script à peu prés similaire
Mais si vous connaissez aussi un logiciel qui fasse ça et même plus, super simple à configurer et léger, vous pouvez toujours donner.
Merci d'avance.
Julien C.
Hors ligne
#2 Le 16/01/2013, à 10:50
- Brunod
Re : Récapitulatif de l'état du serveur par mail.
Je te conseille webmin : tu gères ton serveur à distance et donc tu retrouveras toutes les infos que tu souhaites plus plein d'autres, et en plus tu peux lancer les maj, intervenir sur le pc, modifier les paquets etc, programmer des alertes par mail etc.
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#3 Le 16/01/2013, à 17:11
- bichon63
Re : Récapitulatif de l'état du serveur par mail.
Merci pour le conseil. A vrai dire j'ai un système fonctionnel et ça me fait un peu peur d'installer ça par dessus. Et puis je préfère passer par ssh pour tout ce qui est admin plutôt que d'utiliser une interface web, potentiellement dangeureuse (j'imgine que c'est quand même bien protégé). Ca semble malgré tout assez complet.
J'ai vu également l'outil monit qui semble pas mal également.
J'ai opté pour un truc plus simple, j'ai pas tout encore testé mais ça semble fonctionner chez moi :
#!/usr/bin/env bash
ports="22 80 3306 3690"
# service names as per above ports
service="SSH WEB MYSQL SVN"
# drives : /dev/sda /dev/sdb
drives="/dev/sda /dev/sdb"
# directories
directories="/var/www /var/log /var/backup"
# backups directories
backups_dir="/var/archives /var/backup"
# monitor raid
raid=1
#Email id to send alert
ADMINEMAIL="myemail@domain.tld"
#Bin paths
NETSTAT=$(which netstat)
MAIL=$(which mail)
LOGGER=$(which logger)
ID=$(which id)
SMARTCTL=$(which smartctl)
APTGET=$(which apt-get)
# set defaults
sendmail=1
status="NO"
c=1
# Log file used to send an email
LOG="/tmp/monitoring.log.$$"
# log message to screen and a log file
log(){
echo "$@"
echo "$@" >> $LOG
}
warn(){
echo "XXX $@"
echo "XXX $@" >> $LOG
}
# log message and stop script
die(){
echo "$@"
exit 999
}
# Make sure only root can run it
is_root(){
local id=$($ID -u)
[ $id -ne 0 ] && die "You must be root to run $0."
}
# Look out for all bins and create a log file
init_script(){
[ ! -x $MAIL ] && die "$MAIL command not found."
[ ! -x $NETSTAT ] && die "$NETSTAT command not found."
[ ! -x $LOGGER ] && die "$LOGGER command not found."
[ ! -x $ID ] && die "$ID command not found."
[ ! -x $SMARTCTL ] && die "$SMARTCTL command not found."
[ ! -x $APTGET ] && die "$APTGET command not found."
is_root
>$LOG
}
# check last ssh log
chk_ssh(){
log ""
log "-------------------------------------------------------------"
log " Last SSH logon @ $(hostname) [ $(date) ]"
log "-------------------------------------------------------------"
RPORTS=$(last|tail -20)
log "$RPORTS"
}
# check for all running services and shoot an email if service is not running
chk_services(){
log ""
log "-------------------------------------------------------------"
log " Running services status @ $(hostname) [ $(date) ]"
log "-------------------------------------------------------------"
# get open ports
RPORTS=$($NETSTAT -tulpn -A inet | grep -vE '^Active|Proto' | grep 'LISTEN' | awk '{ print $4}' | cut -d: -f2 | sed '/^$/d' | sort -u)
# okay let us compare them
for t in $ports
do
sname=$(echo $service | cut -d' ' -f$c)
echo -en " $sname\t\t\t : "
echo -en " $sname\t\t\t : " >> $LOG
for r in $RPORTS
do
if [ "$r" == "$t" ]
then
status="YES"
break
fi
done
echo -n "$status"
echo ""
echo -n "$status" >>$LOG
echo "" >>$LOG
# Update counters for next round
c=$( expr $c + 1 )
status="NO"
done
}
chk_loading(){
log ""
log "-------------------------------------------------------------"
log " Get system status @ $(hostname) [ $(date) ]"
log "-------------------------------------------------------------"
log ""
log "# uptime"
RPORTS=$(uptime)
log "$RPORTS"
log "# free -m"
RPORTS=$(free -m)
log "$RPORTS"
if [ "$drives" != "" ]; then
log "# smartctl"
for d in $drives
do
log " - SMART $d"
RPORTS=$(smartctl -a -q errorsonly $d)
#if [ "$?" -ne 0 -a "$RPORTS" = "" ];then
# RPORTS="$d : OK"
#fi
log "$RPORTS"
done
fi
if [ "$raid" -ne 0 ];then
log "# Raid"
cat /proc/mdstat >> $LOG
log ""
fi
if [ "$directories" != "" ]; then
log "# directories size"
for d in $directories
do
if [ -d "$d" ];then
log " - Directory $d"
RPORTS=$(du -hLs $d)
log "$RPORTS"
else
warn "$d doesn't exist"
fi
done
fi
# log "-- files size ------------------------------------------"
# for f in $files
# do
# RPORTS=$(ls -lh $f | awk '{ print $5; }')
# log "$RPORTS"
# done
}
chk_updates(){
log ""
log "-------------------------------------------------------------"
log " Get system updates @ $(hostname) [ $(date) ]"
log "-------------------------------------------------------------"
$APTGET update > /dev/null
if [ "$?" -ne 0 ];then
warn "apt-get update failed."
fi
RPORTS=$(apt-get upgrade -s | grep ^Inst | cut -f2 -d ' ' | tr '\n' ' ')
# does this capture the right return or is it picking up the tr ? TODO
if [ "$?" -ne 0 ];then
warn "apt-get upgrade -s failed."
fi
NUM_PKGS=$(echo "$RPORTS" | grep -o ' ' | wc -l)
log "$NUM_PKGS packages to update"
log "packages :"
log "$RPORTS"
}
chk_backups(){
log ""
log "-------------------------------------------------------------"
log " Test Backups @ $(hostname) [ $(date) ]"
log "-------------------------------------------------------------"
if [ "$backups_dir" != "" ]; then
for d in $backups_dir
do
if [ -d "$d" ];then
log "# $d"
RPORTS=$(find $d -type f -type f -mtime 0 -exec ls -lh {} \;)
log "$RPORTS"
else
warn "$d doesn't exist"
fi
done
fi
}
### main ###
init_script
chk_services
chk_ssh
chk_loading
chk_updates
chk_backups
### Send Mail ###
if [ $sendmail -eq 1 ];
then
$MAIL -s "Server Status @ $(hostname)" $ADMINEMAIL < $LOG
fi
### remove a log file ###
[ -f $LOG ] && /bin/rm -f $LOG
Si vous voyez de grosses erreurs, n'hésitez pas à me le dire. notamment, sur la partie init_script, les tests ne semblent pas fonctionner
Merci.
Julien.
Dernière modification par bichon63 (Le 16/01/2013, à 18:17)
Hors ligne
#4 Le 16/01/2013, à 17:14
- jlmas
Re : Récapitulatif de l'état du serveur par mail.
logwatch fait ça
aptitude install logwatch
Dernière modification par jlmas (Le 16/01/2013, à 17:15)
Hors ligne
#5 Le 16/01/2013, à 19:59
- Brunod
Re : Récapitulatif de l'état du serveur par mail.
Juste pour préciser : Webmin se paramètre pour passer par ssh.
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#6 Le 16/01/2013, à 21:38
- sylvain1970
Re : Récapitulatif de l'état du serveur par mail.
Bonsoir,
tout comme jlmas : logwatch
1 mail par jour avec tout plein d'infos dedans.
Hors ligne
Pages : 1