Zum Hauptinhalt springen Skip to page footer

Statping - Open-Source-Plattform zur Überwachung von Diensten und Infrastrukturen

| Tutorial | Ubuntu 22.04 Statping

Statping ist eine Open-Source-Plattform zur Überwachung von Diensten und Infrastrukturen. Sie ermöglicht es Benutzern, den Status ihrer verschiedenen Dienste und Ressourcen zu überwachen und Benachrichtigungen über Ausfälle oder Probleme zu erhalten.

Mit Statping können Sie verschiedene Arten von Diensten überwachen, darunter HTTP, TCP, DNS, ICMP und andere. Sie können überprüfen, ob ein Dienst verfügbar ist, den Statuscode einer HTTP-Anfrage überwachen oder eine benutzerdefinierte Antwortvalidierung durchführen. 

Statping bietet eine übersichtliche Benutzeroberfläche, mit der Sie Ihre Dienste hinzufügen, überwachen und verwalten können. Sie können Benachrichtigungen über E-Mail, Slack, Discord und andere Kanäle erhalten, wenn ein Dienst fehlerhaft oder nicht verfügbar ist. 

Die Plattform ist in Go geschrieben und einfach zu konfigurieren. Sie kann auf einem eigenen Server oder in einer Cloud-Umgebung betrieben werden. Statping bietet auch erweiterte Funktionen wie Verlaufsgrafiken, Benutzer- und Teamverwaltung sowie Integrationen mit externen Diensten.

Alles in allem ist Statping eine nützliche Lösung für die Überwachung von Diensten und Infrastrukturen, die es den Benutzern ermöglicht, den Zustand ihrer Systeme im Auge zu behalten und bei Problemen schnell zu reagieren.

Voraussetzungen

Schritt 1: System aktualisieren

Aktualisieren Sie den apt-Paketindex und bringen Sie alle Pakete auf den neuesten Stand:
sudo apt update && sudo apt upgrade -y

Schritt 2: Kontrollieren der Firewall

Kontrollieren Sie, ob in der Firewall http- (Port 80) und https- (Port 443) Verbindungen erlaubt sind
sudo ufw status
Ausgabe:
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
Sollten die Verbindungen zu den Ports 80 und 443 nicht freigegeben sein, können Sie sie mit folgenden Befehlen freigeben:
sudo ufw allow http
sudo ufw allow https

Schritt 4: Nginx installieren

Ubuntu 22.04 wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, müssen Sie das offizielle Nginx-Repository herunterladen.

Importieren Sie den Nginx-Signierschlüssel:
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Ausgabe:
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1561  100  1561    0     0  17079      0 --:--:-- --:--:-- --:--:-- 17153
Fügen Sie das Repository für die stabile Version von Nginx hinzu:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Ausgabe:
deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] http://nginx.org/packages/ubuntu jammy nginx
Aktualisieren Sie erneut der Repositories:
sudo apt update
Installieren Sie Nginx:
sudo apt install nginx
Prüfen Sie die Installation:
nginx -v
nginx version: nginx/1.24.0

Schritt 5: Certbot und SSL installieren

Siehe “Certbot unter Ubuntu 22.04 installieren

Wenn Sie Certbot installiert haben führen Sie den folgenden Befehl aus, um ein SSL-Zertifikat zu erzeugen:
sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m youralias@yourdomain.com -d status.yourdomain.com
Ausgabe:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Account registered.
Requesting a certificate for status.yourdomain.com

Successfully received certificate.
Certificat status.yourdomain.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/status.yourdomain.com/privkey.pem
This certificate expires on 2023-10-03.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Der obige Befehl erzeugt ein Zertifikat und legt dieses im Verzeichnis /etc/letsencrypt/live/status.yourdomain.com  ab.

Erzeugen Sie ein Diffie-Hellman-Gruppenzertifikat:
sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Öffnen Sie die Datei /etc/letsencrypt/renewal/status.yourdomain.com.conf zur Bearbeitung:
sudo nano /etc/letsencrypt/renewal/status.yourdomain.com.conf
Fügen Sie den folgenden Code am Ende ein:
pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Speichern Sie die Datei,

Sie haben das SSL-Zertifikat mit der Standalone-Option von Certbot erstellt.

Um zu überprüfen, ob die SSL-Erneuerung ordnungsgemäß funktioniert, ist ein Trockenlauf des Prozesses durchzuführen:
sudo certbot renew --dry-run
Ausgabe:
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/status.yourdomain.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for status. yourdomain.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/status.yourdomain.com /fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Schritt 6: Docker Compose-Datei konfigurieren

Erstellen Sie ein Verzeichnis für die Docker Kompositionsdatei:
mkdir ~/statping
Wechseln Sie in das Verzeichnis:
cd ~/statping
Erstellen und öffnen Sie die Docker-Kompositionsdatei zur Bearbeitung:
nano docker-compose.yml
services:
  statping:
    container_name: statping
    image: adamboutcher/statping-ng
    restart: always
    ports:
      - 8080:8080
    volumes:
      - ./statping_data:/app
    links:
      - postgres
    depends_on:
      - postgres
    environment:
      DB_CONN: postgres
      DB_HOST: postgres
      DB_PORT: 5432
      DB_DATABASE: statping
      DB_USER: root
      DB_PASS: pw987!
      NAME:0 'Status page'
      DESCRIPTION: 'Statping Demo'
      USE_ASSETS: 'true'
      SAMPLE_DATA: 'false'
      ALLOW_REPORTS: 'false'
      ADMIN_USER: admin
      ADMIN_PASSWORD: admin

  postgres:
    container_name: postgres
    image: postgres:14-alpine
    ports:
      - 5432:5432
    volumes:
      - ./pg_data:/var/lib/postgresql/data/pg_data
    environment:
      POSTGRES_PASSWORD: pw987!
      POSTGRES_DB: statping
      POSTGRES_USER: root
      POSTGRES_PORT: 5432
      PGDATA: /var/lib/postgresql/data/pg_data

Hinweis

Achten Sie darauf, dass DB_USER und DB_PASS mit POSTGRES_USER und POSTGRES_PASSWORD übereinstimmen.

Speichern Sie die Datei.

Schritt 7 – Nginx konfigurieren

Öffnen Sie die Datei /etc/nginx/nginx.conf zur Bearbeitung
sudo nano /etc/nginx/nginx.conf
Fügen Sie die folgende Zeile vor der Zeile “include /etc/nginx/conf.d/*.conf;” ein:
server_names_hash_bucket_size  64;

Speichern Sie die Datei.

Erstellen Sie die Datei /etc/nginx/conf.d/status.yourdomain.conf:
sudo nano /etc/nginx/conf.d/status.yourdomain.conf
Fügen Sie den folgenden Code ein:
upstream backend {
   server 127.0.0.1:8080;
   keepalive 32;
}

server {
  listen 80 default_server;
  server_name status.yourdomain.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name status. yourdomain.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/status.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/status.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/status.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   # OCSP Stapling --- fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   add_header X-Early-Data $tls1_3_early_data;

   access_log /var/log/nginx/statusping.access.log main;
   error_log  /var/log/nginx/statusping.error.log;

   location / {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_set_header X-Client-Verify  SUCCESS;
       proxy_set_header X-Client-DN      $ssl_client_s_dn;
       proxy_set_header X-SSL-Subject    $ssl_client_s_dn;
       proxy_set_header X-SSL-Issuer     $ssl_client_i_dn;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 1800s;
       proxy_connect_timeout 1800s;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Speichern Sie die Datei.

Prüfen Sie zuerst Ihre Nginx-Konfiguration:
sudo nginx -t
Starten Sie den Nginx-Server neu:
sudo systemctl restart nginx

Schritt 8: Statping ausführen

Wechseln Sie in das Statping-Verzeichnis:
cd ~/statping
Erstellen und starten Sie den Docker-Container:
docker compose up -d
Ausgabe:
[+] Running 15/15
 ✔ postgres 8 layers [⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                             5.2s
   ✔ 31e352740f53 Pull complete                                                                                                                                    0.5s
   ✔ d7c8ef16402f Pull complete                                                                                                                                    0.5s
   ✔ 36cb57831f52 Pull complete                                                                                                                                    0.5s
   ✔ 9deefb622012 Pull complete                                                                                                                                    3.4s
   ✔ e783634f6b43 Pull complete                                                                                                                                    3.5s
   ✔ 2f41decef205 Pull complete                                                                                                                                    3.5s
   ✔ c0f45207ea23 Pull complete                                                                                                                                    3.5s
   ✔ 28a5faab2577 Pull complete                                                                                                                                    3.5s
 ✔ statping 5 layers [⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                                4.2s
   ✔ a0d0a0d46f8b Pull complete                                                                                                                                    1.5s
   ✔ fa3d9fa5e9b1 Pull complete                                                                                                                                    2.0s
   ✔ 7a16351c22f8 Pull complete                                                                                                                                    2.3s
   ✔ d41a1963f725 Pull complete                                                                                                                                    2.4s
   ✔ 54b8cfc58c03 Pull complete                                                                                                                                    2.4s
[+] Building 0.0s (0/0)
[+] Running 3/3
 ✔ Network statping_default  Created                                                                                                                               0.1s
 ✔ Container postgres        Started                                                                                                                               0.9s
 ✔ Container statping        Started  
Prüfen Sie den Status des Containers:
docker compose ps
Ausgabe:
NAME                IMAGE                      COMMAND                  SERVICE             CREATED              STATUS                        PORTS
postgres            postgres:14-alpine         "docker-entrypoint.s…"   postgres            About a minute ago   Up About a minute             0.0.0.0:5432->5432/tcp, :::5432->5432/tcp
statping            adamboutcher/statping-ng   "/bin/sh -c 'statpin…"   statping            About a minute ago   Up About a minute (healthy)   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp

Schritt 9: Statping konfigurieren

Wenn Sie nun Ihren Container ausführen und die URL status.yourdomain.com in Ihrem Browser aufrufen, sehen Sie eine leere Statusseite.

Klicken Sie unten auf den Link Dashboard, um zum Anmeldebildschirm zu gelangen.

Geben Sie admin als Standardbenutzernamen und admin als Passwort ein (siehe Zeilen 26 und 27 docker-compose.yml). Stellen Sie sicher, dass Sie auch den Benutzernamen eingeben, auch wenn dieser bereits ausgefüllt zu sein scheint. Klicken Sie auf die Schaltfläche Anmelden, um auf das Statping-Dashboard zuzugreifen.

Um einen neuen Dienst hinzuzufügen, klicken Sie auf die Schaltfläche "Create". Geben Sie die erforderlichen Werte ein.

Klicken Sie zum Abschluss auf die Schaltfläche Dienst erstellen am unteren Rand.

Zuerst wird der Service als offline angezeigt, aber schon nach kurzer Zeit ändert sich die Anzeige, nach Aktualisierung der Seite, auf online.

Die Startseite sieht dann wie folgt aus: