Garder un œil sur vos sites internet avec Uptime Kuma

Tutoriel Uptime Kuma

Tutorial Thumbnail

De nombreux services en ligne disposent d'une page de statut en ligne tel que Dropbox, Netflix et bien d'autre encore. De nombreux services payant offre la possibilité de mettre en service votre propre page de statut en ligne, comme StatusPage, FreshStatus ou bien encore le célèbre UptimeRobot. Ces sites internet offrent la possibilité de surveiller vos services dans une version payante ou assez limitée en fonctionnalité.



C'est pour cela qu'un beau jour, un certain Louis Lam décide de changer les choses en proposant un outil open-source baptisé Uptime Kuma. L'outil se veut être une alternative complétement gratuite et sous licence libre du service UptimeRobot (limité en fonctionnalité et en ajout d'URL de site internet) tout en vous permettant d'héberger vous-même cet outil de surveillance. L'interface est claire, moderne et entièrement personnalisable. Elle est développée avec VueJS 3 et Bootstrap 5 pour l'interface Web et les WebSocket pour l'écoute des services et l'envoi des notifications. Uptime Kuma est régulièrement mis à jour par le développeur. Les utilisateurs peuvent envoyer leurs demandes de fonctionnalité ou de correction sur Github et rendre le projet meilleur.


Parmi les fonctionnalité que propose l'outil Uptime Kuma sont assez nombreuses :

  • La surveillance des services HTTP, HTTPS (bien évidement), TCP, la recherche par mot clé HTTP, Ping ICMP, par enregistrement DNS...
  • Si un service est hors-service, Uptime Kuma prends en charge pas mal de service de notification comme l'envoi d'un mail (comme UptimeRobot), mais encore recevoir une notification par Telegram, Microsoft Teams, Slack, Webhook. N'hésitez pas à aller checker la liste de 70 autres services disponibles.
  • Le service peut même vérifier l'expiration de vos certificats SSL !
  • La grande différence tout de même, est que l'interface donne clairement envie de travailler dessus : moderne et ergonomique, l'interface est simple et est traduite en 27 langues, ce qui est un point relativement important pour un utilisateur lambda.

L'installation et la configuration est assez simple, donc pourquoi attendre ?


Installations

C'est parti pour l'installation de Uptime Kuma ! L'outil s'installe sur un serveur Linux, de préférence et ne nécessite pas forcément d'énormes ressource. Dans un premier temps, je vous présente l'installation sous Docker, puis dans un second temps l'installation avec NodeJS. Je vais réaliser les deux installations sur un Debian 11 avec 512 Mb de RAM et 20 Gb de stockage. Ces capacités sont uniquement dédiées si le service Uptime Kuma est seulement installé. A vous d'adapter la configuration en fonction de vos besoins !


Installation sous Docker

Afin de gagner du temps sur l'installation, Uptime Kuma peut être déployé depuis une image Docker. Dans le cas où vous ne disposez pas de Docker, suivez la procédure d'installation ci-dessous.


Avant toute installation, mettez à jour la liste des dépôt de Debian avec un coup de apt update.


Installez quelques dépendances qui nous permettra d’utiliser des packages de transport sur HTTPS comme Curl ou GnuPG, qui est un outil GNU pour sécuriser les communications et le stockage de données, pour la récupération de la clé PGP :

sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common



Mise à jour des dépôt de Debian et installer les dépendances essentielles


On récupère à l'aide de Curl la clé PGP depuis le site officiel de Docker et on ajoute ensuite la clé sur le serveur Debian :

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -



Récupération de la clé PGP de Docker grâce à l'outil Curl et ajout de la clé précédente sur le serveur



On ajoute ensuite les sources Docker aux sources APT de Debian et on mets à jour la liste des dépôts :

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update


Vérifiez ensuite que les sources ont bien été prises en compte :



Mise à jour de la liste des dépôts et prise en compte des sources de Docker



Procédez à l'installation de Docker sur le serveur :

sudo apt install docker-ce



Installation de Docker


On vérifie l'état des services Docker après installation et le service doit être en cours d'exécution :

sudo systemctl status docker



Vérification de l'état des services de Docker



Une fois que Docker est désormais installé sur le serveur, il est nécessaire de cloner l'image Docker de Uptime Kuma afin de profiter du service.


On créé le volume Docker pour l'installation d'Uptime Kuma :

docker volume create uptime-kuma


On récupère l'image Docker d'Uptime Kuma et on place cette image dans le volume précédemment créé :

docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1



Création du volume et clonage de l'image Docker d'Uptime Kuma



Vous pouvez également modifier le port d'écoute et le volume :

docker run -d --restart=always -p <PORT>:3001 -v <DOSSIER_OU_VOLUME>:/app/data --name uptime-kuma louislam/uptime-kuma:1


Installation avec NodeJS

Pour les personnes qui préfèrent installer à la main leur propre instance Uptime Kuma, déroulons l'installation avec NodeJS. À noter que Uptime Kuma nécessite NodeJS >= à la version 14.

Avant toute installation, mettez à jour la liste des dépôt de Debian avec un coup de apt update.


Si nécessaire, on installe Curl et on télécharge le script d'installation Bash de NodeJS (version 14, dernière en date) depuis le site officiel de NodeSources.


sudo apt install curl
curl -sL https://deb.nodesource.com/setup_14.x -o nodesource_setup.sh



On installe Curl et on télécharge le script d'installation de NodeJS



Evitez d'installer NodeJS à l'aide de la commande apt install nodejs car la version n'est pas à jour.


On procède à l'installation de NodeJS en exécutant le script Bash et ensuite installer directement NodeJS depuis les sources APT. Globalement, le script installe des modules complémentaires, configure les sources APT pour NodeJS et installe la clé PGP associée.

bash nodesource_setup.sh
sudo apt install nodejs -y



Exécution du script et installation APT de NodeJS



On installe les modules de base essentiels à Npm :

sudo apt install build-essential



Installation des modules essentiels à Npm





On vérifie la version de NodeJS prouvant ainsi que l'installation a bien fonctionnée :

node -v



Version de NodeJS



On s'assure que Npm dispose bien de la dernière version actuellement disponible :

npm install npm -g



Mises à jour de Npm de la dernière version disponible



On installe ensuite Git, si nécessaire, pour cloner le dépôt d'Uptime Kuma :

sudo apt install git



Installation de Git



On souhaite maintenant cloner les sources d'Uptime Kuma en clonant le repôt GitHub :

git clone https://github.com/louislam/uptime-kuma



Clonage du repôt GitHub d'Uptime Kuma



Entrez dans le dossier téléchargé et exécutez l'installation du service avec npm :

cd uptime-kuma
npm run setup





Enfin, démarrer le serveur NodeJS automatiquement au démarrage du serveur avec le gestionnaire de processus Pm2 :

npm install pm2 -g
pm2 start /root/uptime-kuma/server/server.js --name uptime-kuma
pm2 startup
pm2 save



Installation et création du service Pm2 pour le serveur NodeJS Uptime Kuma



Vérifier les services lancés avec PM2 :

pm2 ls


Vous pouvez éventuellement lancer le service "uptime-kuma" sur un port ou un nom d'hôte différent :

pm2 start server/server.js --name uptime-kuma -- --port=80 --host=0.0.0.0


Gérer le service démarré avec Pm2 :

pm2 start uptime-kuma
pm2 stop uptime-kuma
pm2 restart uptime-kuma


Mettre à jour Uptime Kuma

Dans le cas où le développeur propose une nouvelle version, il est intéressant de mettre à jour l'instance sans pour autant tout réinstaller (vous imaginez sinon 😉). La dernière version est directement disponible dans les Releases du GitHub d'Uptime Kuma.


Avec Docker

Retirez la dernière image docker et créez un autre conteneur avec le même volume.


Lancer ensuite la reconstruction de la nouvelle image :

docker pull louislam/uptime-kuma:1
docker stop uptime-kuma
docker rm uptime-kuma
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1


Pour chaque nouvelle version, il faut un certain temps pour construire l’image Docker. Soyez patient si elle n’est pas encore disponible.

Avec Docker-Compose

cd "<YOUR docker-compose.yml DIRECTORY>"
docker pull louislam/uptime-kuma:1
docker stop uptime-kuma
docker-compose up -d --force-recreate


Avec NodeJS

Localisez le répertoire d'installation d'Uptime Kuma :

cd <uptime-kuma-directory>


On mets à jour depuis Git en spécifiant la dernière version disponible sur le Github d'Uptime Kuma avec la version dernièrement publiée :

git fetch --all
git checkout <VERSION> --force


On installe les dépendances et on reconstruit l'image :

npm ci --production
npm run download-dist


Enfin, on redémarre le service Pm2 lancé au préalable afin de prendre en compte la nouvelle mise à jour :

pm2 restart uptime-kuma


Configuration

Et voilà ! Uptime Kuma est désormais installé soit avec Docker ou NodeJS, prêt à fonctionner. Passons maintenant à la configuration de l'interface, ajouter une sonde afin de surveiller un site internet et enfin configurer le service de notification.


L'interface Web est disponible à l'adresse suivante : http://<ip>:3001/


Nous remarquons que le port d'écoute par défaut 3001 (à ouvrir sur le pare-feu si nécessaire) et que l'interface écoute sur du HTTP, donc les identifiants de connexions passeront en claire sur le réseau 😐 Mettez Uptime Kuma sur un reverse proxy tel que Nginx Proxy Manager 😀
Récupérez l'adresse IP sous Linux à l'aide de la commande ip a 😉


Premier démarrage

Lors de l'ouverture de l'adresse URL dans le naviguer, un assistant vous propose de configurer les accès de connexion.



Setup d'installation d'Uptime Kuma


Vous voici dès à présent sur le tableau de bord :



Ajouter une sonde

Une sonde sera le processus qui surveillera le site internet spécifié. Au choix, le type de sonde peut être un site HTTP(s), TCP, mots dans un site HTTP(s), requête Ping, vérifier un enregistrement DNS et même un serveur de jeu Steam.


Le menu est assez complet : vous spécifier le type de sonde, le nom d'affichage explicit et l'adresse du site en question. De plus, vous pouvez spécifier l'intervalle de vérification du site internet, spécifier le nombre de tentative avant que le service soit considéré comme hors-service, spécifier la méthode d'appel du site (GET, POST...).



Ajouter une nouvelle sonde



Des options avancées comme le choix des codes HTTP acceptable sur le service cible, le mode inversé qui signifie que si le service est en ligne, alors il sera alors considéré comme hors-service et vice-versa.


Le mode "Ignorer les erreurs liées au certificat SSL/TLS" désactive la vérification des certificats autosignés. Cette option peut être nécessaire dans le cas où vous obtenez l'erreur suivante : "Unable to verify the first certificate" lors de l'ajout de la sonde. Vous pouvez également spécifier des identifiants de connexions si une authentification HTTP Basic a été mise en place au préalable sur la configuration du serveur Web.




Paramètres avancés



Notifications d'alerte

Dans le cas où un service tombe en panne, il est assez intéressant d'avertir l'administrateur réseau par un service de communication : soit par l'envoi classique SMTP (Mails) ou alors par l'envoi d'une notification depuis un service externe comme Telegram, Microsoft Teams, Slack...


Ouvrir l'assistant de création d'une notification



Lors de la création d'une nouvelle notification, spécifiez le service de communication des notifications et le nom d'affichage des messages qui seront envoyés par le Bot.



Créer le Bot Telegram pour Uptime Kuma

Nous allons procéder à la configuration du service Telegram (messagerie chiffrée de bout-en-bout). Ce dernier est assez fiable et la configuration est relativement simple. Je vous envoi directement vers un tutoriel vous permettant de créer et de configurer le Bot Telegram.


Finalisation de la configuration de l'API de notification

Renseignez dans champ "Bot Token" le Token privé obtenu, dans l'assistant de configuration des notifications d'Uptime Kuma. On vous demande ensuite de spécifier un "Chat ID" : il s'agit du canal qui va recevoir les messages d'Uptime Kuma. Au choix, vous pouvez les recevoir soit par message privé, dans un salon dédié ou un groupe de discussion. Dans mon cas, je souhaite les recevoir directement par message privé.


Vous pouvez récupérer l'ID du canal de communication depuis d'adresse suivante en spécifiant le Token privé obtenu dans l'URL : https://api.telegram.org/bot<YOU_API_KEY>/getUpdates


Voici la réponse en retour de l'API de Telegram :



L'API se charge de récupérer les derniers messages envoyés depuis l'API. Ces messages contiennent plusieurs informations (message, date, infos de l'utilisateurs...) dont l'ID privé de l'utilisateur, encadré en rouge. Copier cet ID et renseignez-le dans le ChatID.



Ajoutez sur le bouton "Tester" afin de vérifier si la connexion à l'API a bien été réalisée.




Nous recevons bien le message de test sur Telegram :



Vous avez la possibilité, une fois la configuration fonctionnelle, de l'activer par défaut lors de l'ajout d'une nouvelle sonde sur Uptime Kuma et d'appliquer la configuration sur les sondes ne disposant pas encore de la configuration des notifications.



Cliquer tout en bas sur le bouton afin de valider l'enregistrement de la nouvelle sonde.



Vous remarquerez que l'état du service est en ligne. On obtient en direct le temps de réponde dans la durée, l'Uptime en pourcentage et un graphique du temps de réponse par minute. Vous pouvez également voir la date d'expiration du certificat SSL du site en nombre de jour et la date précise d'expiration :




En cliquant sur le lien en jaune, vous obtenez pas mal d'informations sur le certificat (émetteur, validité...) :




Afficher une page publique pour vos visiteurs

Maintenant que nous avons créé notre sonde, nous souhaitons l'afficher sur une page publique de statut en ligne. Cette page est accessible à l'adresse : http://<ip>/status. Sur la page, vous pouvez ajouter une description et les sondes créée précédemment. Vous pouvez créer une section par type de service et peuvent être déplacée dans l'ordre que l'on souhaite. La page peut être entièrement personnalisable : ajout d'un nom personnalisé et d'un logo, définir le thème de la page (mode clair/sombre).


Cliquez sur afin d'éditer la page de statut publique.




La sonde est ajoutée sur la page publique :


Vous pouvez également ajout un message d'incident en cliquant sur , dans le cadre d'une prévention d'une opération de maintenance par exemple. Vous pouvez également modifier la couleur de style du message en cliquant sur le bouton "Style".




Voici le résultat final de la page de statut en ligne :




Enfin, vous pouvez par défaut directement rediriger directement l'utilisateur sur la page de statut en ligne en allant dans les paramètres d'Uptime Kuma.



N'hésitez pas à aller faire un tour dans les paramètres 😉


Si un service tombe en panne, un message est directement envoyé sur Telegram !


Reverse Proxy Nginx & Apache

Dans le cas ou vous souhaitez mettre un certificat SSL sur l'interface, il est nécessaire de "proxifier" Uptime Kuma soit avec Nginx ou Apache.

Voici l'exemple d'une configuration Reverse Proxy pour Nginx avec SSL :

server {
  listen 443 ssl http2;
  server_name status.vemotech.fr;
  ssl_certificate     /path/to/ssl/cert/crt;
  ssl_certificate_key /path/to/ssl/key/key;

  location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass         http://localhost:3001/;
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection "upgrade";
  }
}


Mais également pour Apache :

<VirtualHost *:443>ServerName status.vemotech.fr
  SSLEngine OnSSLCertificateFile /path/to/ssl/cert/crt
  SSLCertificateKeyFile /path/to/ssl/key/key
  Protocols h2 http/1.1

  ProxyPass / http://localhost:3001/
  RewriteEngine onRewriteCond %{HTTP:Upgrade} websocket [NC]RewriteCond %{HTTP:Connection} upgrade [NC]RewriteRule ^/?(.*) "ws://localhost:3001/$1" [P,L]
</VirtualHost>


Les configurations écoutent en interne l'adresse du serveur local (si vous installez Nginx ou Apache sur le même serveur) ou alors si vous souhaitez "proxifier" le serveur Web et les Websockets sur un sous-domaine externe.

Cette configuration peut être utilisé dans le cas où vous souhaitez dédier un sous-domaine (par exemple : status.vemotech.fr) et rediriger la page vers le Reverse Proxy, puis vers l'instance Uptime Kuma.


Voilà, j'espère que ce tutoriel vous aura plus et on se retrouve très bientôt pour un prochain tutoriel ! 😎

Niveau Débutant

Technologie utilisée :

Proposer une modification
Antoine
Par Antoine
Rédigé le Jeudi 23 Décembre 2021