Watchdog pour Alfresco sous Linux

cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Active Member

Watchdog pour Alfresco sous Linux

Hello,

Nous désirons vérifier tous les X temps qu'Alfresco soit fonctionnel sans utiliser de programme de surveillance comme Nagios. Nos serveurs envoient des emails pour avertir si les sauvegardes se sont bien passées, si un disque est plein…. Nous avons penser à mettre un script qui envoie un mail pour indiquer l'état d'Alfresco.

Existe-t'il un script à lancer avec Cron qui pourrait indiquer si le serveur Alfresco est hors service ? (faire un teste du partage, accès 80,…)

Merci bien
5 Replies
Highlighted
Active Member II

Re: Watchdog pour Alfresco sous Linux

Hello,

peut-être configurer une scheduled action (voir ici : http://wiki.alfresco.com/wiki/Scheduled_Actions, et regarder dans le fichier natif d'Alfresco scheduled-jobs-context.xml des exemples de CronTriggerBean) qui exécute le code Java d'une classe que vous aurez créée spécifiquement.
Cette classe vous permettrait de faire tous les tests souhaités, et d'envoyer les résultats par email.

A noter que la couche logique d'une scheduled action n'est pas nécessairement écrite en Java, et peut être implémentée en AlfrescoScript.

Bonne chance
Highlighted
Active Member

Re: Watchdog pour Alfresco sous Linux

Merci pour la réponse Rodel.

C'est une bonne idée de faire la vérification depuis Alfresco.
J'avais envisager un script complétement externe à Alfresco (à mettre pourquoi pas sur un autre serveur). Je vais chercher une manière simple de tester les services d'Alfresco.
Highlighted
Active Member II

Re: Watchdog pour Alfresco sous Linux

Je donnais dés idées, mais la meilleure manière de faire un système d'alerting reste de toute façon un système externe conçu pour cela, de type Nagios.
L'inconvénient de la solution Alfresco est qu'en cas de "panne", vous ne recevez pas un mail d'alerte, vous ne recevez plus de mail du tout.
Highlighted
Active Member

Re: Watchdog pour Alfresco sous Linux

Hello,

Si cela vous est utile… Voici un script qui permet de :

->Vérifier l'espace disque
->Vérifier qu'Alfresco fonctionne (en testant l'accès au site Web)
->Envoyer un mail si un problème s'est passé. (attention aux situations : Si le serveur est mort ou que les mails ne passent plus)


#!/bin/sh
# #################################################################
# Script to monitor a server
# #################################################################

####################
# CONFIGURATION USER
####################

### Check Disk Space
CHECK_DISKSPACE_ENABLE="true" #"true" or "false"
# Write the partition with the limit maximum size(if the limit is a size, put the same unit than the command "df -h" show the partition
# "/dev/sda1=90%" means that an alert mail will be sent if the disk used is more or egal than 90%
# "/dev/sda1=10G" means that an alert mail will be sent if the disk used is more or egal than 10G
CHECK_DISKSPACE_PARTITIONS_LIMITS=("/dev/sda1=80%")

### Check WebSite
CHECK_WEBSITE_ENABLE="true" #"true" or "false"
CHECK_WEBSITE_ADDRESS="http://localhost:8080/alfresco"

### Mail
MAIL_NOTIFICATION_ENABLE="true" # true or false
MAIL_NOTIFICATION_SENDER="ged@domain.ch"
MAIL_NOTIFICATION_DESTINATION="watchdog@domain.ch"
MAIL_NOTIFICATION_LOCATION="YourCompagny" # Where the script is running
MAIL_NOTIFICATION_TYPE_SERVER="GED" # Type of the server
MAIL_NOTIFICATION_TYPE_SCRIPT="Monitoring" # Type of the script like Backup, Monitoring…

### LogFile
LOGFILE="/var/log/gedMonitoring.log"

### Message
SUCCESS="SUCCESS"
ERROR="ERROR"
WARNING="WARNING"
TRUE="TRUE"
FALSE="FALSE"

######
# Init
######

### Check Disk Space
# Get the list of partition in a compact format
partitionDetails=$( df -Ph | sed -r "s/ {1,}/@/g" )
# Position elements in the output of the command "df"
POSITION_PARTITION=1
POSITION_USEDSPACE_PERCENT=5
POSITION_USEDSPACE_SIZE=3

### Check WebSite
# Success message get from command wget
CHECK_WEBSITE_WGET_SUCCESS="200 OK"


###############################################
# Get the date of the day
###############################################
getTime(){
        date="$(date +'%b %e %H:%M:%S')"
        echo "$date"
}

############################################################
# Check the disk space (configure in the partitionsLimites).
############################################################
checkDiskSpace(){
        message="`getTime` CheckDiskSpace"
        echo "$message"
        echo "$message" >> $LOGFILE

        # Read all partitions with the limit
        for partitionsToCheck in ${CHECK_DISKSPACE_PARTITIONS_LIMITS[@]}
        do
                # Get the values of the parameters in the list (partition, limit)
                partitionInList=${partitionsToCheck%%=*}
                limitInList=${partitionsToCheck##*=}

                # Read all partition on the disk
                checkPartition="false" # The partition in the liste has been compared
                for partitionOnDisk in $partitionDetails
                do
                        # Check if it's the good partition
                        if [ "$partitionInList" != "$( echo "$partitionOnDisk" | awk -F@ '{print$1}')" ]; then
                                continue
                        fi
                        # The partition in the list has been found on the system
                        checkPartition="true"

                        # Read the unit (G, M, %) of the limit
                        typLimit=${limitInList:(-1)}
                        valueLimit=$(echo "$limitInList" | tr -d $typLimit)

                        echo "Check $partitionInList with the limit fixed with $limitInList"

                        # Search if the limit is fixed in "%" or unit like G, M…
                        if [ "$typLimit" = "%" ]; then
                                # The size is in %
                                valueToCheck=$POSITION_USEDSPACE_PERCENT
                        else
                                # The size is in unit G, M …
                                valueToCheck=$POSITION_USEDSPACE_SIZE
                        fi
                        usedSpace=$( echo "$partitionOnDisk" | awk -F@ -vposition=$valueToCheck '{print$position}' | tr -d $typLimit)

                        # Comparaison
                        if [ $usedSpace -ge $valueLimit ]; then
                                # Alert !!!
                                message "$WARNING : Not enough space on $partitionOnDisk.The maximum is fixed on $limitInList."
                        else
                                echo "All is ok with $partitionOnDisk with the maximum limit fixed on $limitInList"
                        fi
               done
                # Check if the partition in the list has been found in the system
                if [ $checkPartition == "false" ]; then
                        message "$ERROR : The partition $partitionInList has not been found !!! Please check the configuration of the script."
                fi
        done
}

############################################################
# Check if the web site is up.
############################################################
checkWebSite(){
        message="`getTime` CheckWebSite"
        echo "$message"
        echo "$message" >> $LOGFILE


        resultWget=$(wget –spider $CHECK_WEBSITE_ADDRESS 2>&1)
        if [[ "$resultWget" = *"$CHECK_WEBSITE_WGET_SUCCESS"* ]];then
                echo "The website $CHECK_WEBSITE_ADDRESS is up."
        else
                message "$ERROR : The WebSite $CHECK_WEBSITE_ADDRESS is not responding."
        fi
}

#############################################################################
# Send a mail. Do not use it directly… Use function message()
# Use it like this :
#       message="I am a message"
#       sendMail "%I - $MAIL_NOTIFICATION_LOCATION - GED - Backup" "$message"
#############################################################################
sendMail(){
        echo "Send mail notification to : $MAIL_NOTIFICATION_DESTINATION"
        echo "$2" | mail -s "$1" "$MAIL_NOTIFICATION_DESTINATION" – -r "$MAIL_NOTIFICATION_SENDER"
        if [ $? -gt 0 ] ; then
                message="`getTime` Unable to send mail notification"
                echo "$message"
                echo $MESSAGE_SEE_LOG
                echo "$message" >> $LOGFILE
        fi
}

#############################################################################################
# Write a message in the console and send a mail
# Use it like this :
#       message "$ERROR : Unable to give permissions on the directory to link to the share"
#       message "$WARNING : Unable to remove mysql file : $BACKUP_FILE_MYSQL_SLQ"
#       message "End backup ($SUCCESS)"
############################################################################################
message(){
        message="`getTime` $1"
        echo "$message"
        echo $MESSAGE_SEE_LOG
        echo "$message" >> $LOGFILE

        # Sendmail ?
        if [ "$MAIL_NOTIFICATION_ENABLE" = "true" ]; then

                # Success
                echo "$message" | grep "$SUCCESS" 1>/dev/null
                if [ $? = 0 ] ; then
                       typeMessage="Info"
                fi

                # WARNING
                echo "$message" | grep "$WARNING" 1>/dev/null
                if [ $? = 0 ] ; then
                       typeMessage="Warning"
                fi

                # ERROR
                echo "$message" | grep "$ERROR" 1>/dev/null
                if [ $? = 0 ] ; then
                       typeMessage="Error"
                fi

                # SendMail
                sendMail "$typeMessage - $MAIL_NOTIFICATION_LOCATION - $MAIL_NOTIFICATION_TYPE_SERVER - $MAIL_NOTIFICATION_TYPE_SCRIPT" "$message"
        fi
}


######
# Main
######

# Information startup
message="`getTime` Start Monitoring"
echo "$message"
echo "The log file is here : $LOGFILE"
echo ""
echo "$message" >> $LOGFILE

# CheckDiskSpace
if [ "$TRUE" = "$(echo $CHECK_DISKSPACE_ENABLE | tr "[:lower:]" "[:upper:]")" ]; then
        checkDiskSpace
fi

# CheckWebSite
if [ "$TRUE" = "$(echo $CHECK_WEBSITE_ENABLE | tr "[:lower:]" "[:upper:]")" ]; then
        checkWebSite
fi

# Information end
message="`getTime` End of monitoring"
echo "$message"
echo "$message" >> $LOGFILE


A insérer dans un fichier : monitoring.sh
Faire "chmod +x monitoring.sh"
ajouter dans crontab

crontab -e

# Monitor the server
0 7,14 * * * /usr/local/bin/monitoring.sh > /var/log/crontab.log 2>&1
Active Member II

Re: Watchdog pour Alfresco sous Linux

Bonjour,

C'est pas les possibilités qui manquent, pour savoir si Alfresco tourne, c'est à pas à Tomcat de le dire, mais à Alfresco, ce qui donne :

Voilà un exemple en PHP-CURL qui retourne un nombre d'élément...pis le jour ou y a rien -> Alert !

$url_for_alf = 'http://127.0.0.1:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser/'

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url_for_alfl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");

$result = curl_exec($ch);
curl_close($ch); # on referme la liaison

$obj2 = (json_decode($result,true));

Il faudrait peaufiner le code mais çà fonctionne et c'est rapide à faire, $obj2 retourne une erreur ou contient des données  Smiley Happy