Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile 
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 sad
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