Intégrer une page statut pour son site web

Avoir une page statut de ses services peut être utile si on en possède plusieurs, si on souhaite être alerté d'une éventuelle indisponibilité, le 100% de disponibilité d'un site web étant une utopie.

A la recherche de ce type d'outil, j'ai trouvé pas mal d'offres payantes, ou gratuites, mais dans les 2 cas limitées.

J'ai finalement trouvé Statping, un outil pouvant tourner sous différentes distributions Linux ou Windows, et également sous Docker.

Les ingrédients

Les prérequis sont :

  • Ubuntu 18.04
  • une instance avec 2 GB de RAM minimum de chez Hetzner ou Scaleway (par exemple)

Comment faire ?

Déjà, mettre à jour l'instance :

apt-get update && apt-get upgrade -y

Une fois la mise à jour réalisée, un redémarrage est vivement conseillé.

Ensuite, on va sécuriser le tout avec UFW :

apt-get install ufw -y
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22/tcp
ufw logging medium
ufw default deny incoming
ufw enable
service ufw restart

Changer le port par défaut SSH est toujours conseillé et/ou mettre en place un Fail2ban efficace.

Installer Statping

Se rendre dans le répertoire /usr/local/bin/

cd /usr/local/bin/

Lancer le script déjà tout fait :

curl -o- -L https://statping.com/install.sh | bash

La configuration d'un service systemd est un excellent moyen de vous assurer que votre serveur Statping redémarrera automatiquement en cas de besoin.

Il faut éditer le fichier /etc/systemd/system/statping.service pour configurer le service :

[Unit]
Description=Statping Server
After=network.target
After=systemd-user-sessions.service
After=network-online.target

[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/statping
WorkingDirectory=/usr/local/bin

[Install]
WantedBy=multi-user.target

Ensuite, il faut activer et démarrer le service systemd avec :

systemctl daemon-reload

systemctl enable statping.service

systemctl start statping

Créez le proxy inverse Nginx

Si vous préférez utiliser un nom de domaine plutôt que de taper http://localhost:8080pour accéder à votre service, vous devez configurer un reverse proxy. Nous pouvons utiliser Nginx à cet effet. Installez Nginx à partir du référentiel de logiciels Ubuntu par défaut. Sautez cette étape si c'est déjà le cas.

apt-get install nginx

Créez ensuite un fichier de configuration pour Statping :

nano /etc/nginx/conf.d/statping.conf

Mettez les lignes suivantes dans le fichier. Remplacez statut.example.com par votre propre nom de domaine :

server {
      listen 80;
      server_name statut.example.com;

      location / {
          proxy_pass http://127.0.0.1:8080;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
}

Enregistrez et fermez ce fichier.

Rechargez Nginx pour que la modification prenne effet :

sudo systemctl reload nginx

Vous pouvez maintenant accéder au serveur multimédia Plex via statut.example.com.

Activer le HTTPS

Pour chiffrer le trafic HTTP, nous pouvons activer le HTTPS en installant un certificat TLS gratuit émis par Let's Encrypt.

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx

Exécutez ensuite la commande suivante pour obtenir et installer le certificat TLS :

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d statut.example.com

Le certificat doit maintenant être obtenu et installé automatiquement, vous pouvez accéder à l'interface Web Statping via HTTPS.

En bonus

Statping propose la surveillance de sites ou d’infrastructures par plusieurs possibilités :

  • le protocole HTTP via le retour des codes,
  • les ports TCP et UDP,
  • le protocole ICMP (ping),
  • le framework gRPC.

On obtient de superbes graphiques des mesures :

Ce que je trouve sympa, ce sont les alertes sur n'importe quel support :

  • Mail,
  • Discord, Slack, et plein d'autres !

La possibilité d'éditer le CSS via l'interface est super !

.service_li div.d-flex {
  justify-content: center;
  width: 100%; 
}

Il est également possible d'utiliser un export sécurisés des métriques récoltées via votre URL, sous la forme suivante :

https://example.com/metrics?api=XX

L'API est à générer directement depuis le panneau d'administration de Statping.

Si vous avez Statping et le serveur Prometheus dans le même serveur, vous pouvez utiliser la configuration yaml ci-dessous :

scrape_configs :
  - job_name : ' statping '
     scrape_interval : 30s 
    bearer_token : ' SECRET API KEY HERE '
     static_configs :
      - cibles : ['statping: 8080']

Si les services sont physiquement dissociés, ce n'est pas grave :

scrape_configs:
  - job_name: 'statping'
    scheme: https
    scrape_interval: 30s
    bearer_token: 'SECRET API KEY HERE'
    static_configs:
      - targets: ['status.mydomain.com']
Essayez par vous même !
Boris
Dinan, Bretagne