Skip to content

Qu'est-ce que Healthchecks.io ?

Healthchecks.io

Healthchecks est un service de monitoring conçu pour vérifier régulièrement que tes scripts, tâches cron et autres services automatisés s'exécutent correctement et dans les délais prévus. Il te permet de savoir immédiatement si quelque chose ne va pas, ce qui est crucial pour maintenir la fiabilité de tes systèmes. Healthchecks est un logiciel libre et le code est disponible ici : https://github.com/healthchecks/healthchecks

Comment ça marche ?

Création d'un Check :

Tu commences par créer un nouveau "check" sur Healthchecks.io. Chaque check correspond à une tâche ou un script que tu veux surveiller. Quand tu crées un check, Healthchecks.io te fournit une URL unique pour ce check.

Pinging :

Dans ton script ou ta tâche cron, tu ajoutes une commande pour envoyer une requête HTTP (un "ping") à cette URL unique à chaque fois que le script s'exécute avec succès. Par exemple, tu peux utiliser curl ou wget pour faire ce ping.

Surveillance et Alertes :

Healthchecks.io surveille ces pings. Si le service ne reçoit pas de ping dans le délai spécifié (par exemple, toutes les heures pour une tâche qui doit s'exécuter chaque heure), il considère que quelque chose ne va pas et t'alerte via email, SMS, Slack, ou d'autres canaux configurés.

Pourquoi l'utiliser ?

  • Fiabilité : Assure-toi que tes tâches critiques s'exécutent comme prévu.
  • Simplicité : Facile à intégrer avec des scripts existants en ajoutant une simple commande HTTP.
  • Alertes : Reçois des notifications immédiates si quelque chose ne tourne pas rond, te permettant de réagir rapidement.
  • Historique : Visualise l'historique des exécutions et identifie facilement les périodes où tes tâches ont échoué.

Mise en place d'un P.O.C

Installer sur une raspberry 5, je self-host mon serveur Healthchecks.

Healthchecks raspberry

On voit sur ce screenshot que le statut n'est pas en vert, car il aurait dû recevoir une requête du script toutes les minutes. Je n'ai pas configuré les notifications sur cet environnement de POC, mais elles pourraient me notifier si mon script n'a pas été exécuté.

Lors de la création d'un check, on a un menu très simple où l'on spécifie le cron qui indique quand le script doit normalement tourner.

Healthchecks configuration

Ensuite, on accède à un menu où l'on voit l'URL à appeler et les derniers appels à cette URL. Healthchecks view

C'est l'outil parfait pour vérifier si mes tâches cron de la nuit se sont bien exécutées.

Le script Bash

Exemple de script pour l'utilisation

Pour finir, le petit script qui permet de gérer les erreurs en Bash. Si aucune erreur n'a interrompu le script, le check sera envoyé au serveur healthchecks.

#!/bin/bash

set -e
trap 'handle_error ${LINENO} "${BASH_LINENO[*]}" "${BASH_SOURCE[*]}" "${BASH_COMMAND}" "${FUNCNAME[*]:-empty}"' EXIT


URL_HEALTHCHECKS='http://healthchecks.rp1.local/ping/57b40212-a488-4274-a38c-453d7235f8cd/'

function handle_error() {
    local last_exit_code=$?
    local line_number=$1
    local bash_lineno=$2
    local bash_source=$3
    local bash_command=$4
    local func_name=${5:-empty}

    if [ $last_exit_code -ne 0 ]; then
        echo "---------------------------"
        echo "An error occurred. Exiting."
        echo "- Function: $func_name"
        echo "- Line: $line_number"
        echo "- File: $bash_source"
        echo "- Command: $bash_command"
        echo "- Exit Code: $last_exit_code"

        # Log the error to a file
        echo "$(date) - Error in function $func_name at line $line_number in file $bash_source: command '$bash_command' exited with status $last_exit_code" >> error.log

        echo "---------------------------"
        exit $last_exit_code
    fi
}

function healthchecks_ok() {
    curl -fsS -m 10 --retry 5 -o /dev/null $URL_HEALTHCHECKS # Silent version (no stdout/stderr output unless curl hits an error):
}

function cron() {
    echo "i m working"
}

main(){
    cron
    healthchecks_ok
}
main $@

Commentaires

Commentez cet article de blog en utilisant un compte compatible Fediverse (Mastodon ou similaire).