Statping - Open-Source-Plattform zur Überwachung von Diensten und Infrastrukturen
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
- ein Server mit Ubuntu 22.04.
- SSH für den Zugriff auf den Server.
- ein Nicht-Root-Benutzer mit sudo-Rechten, siehe “Wie deaktiviere ich das root login unter Ubuntu”.
- UFW ist aktiviert und läuft, siehe “Einrichtung der ufw unter Ubuntu - effektiver Schutz für deine Server”
- ein FQDN, der auf den Server verweist, z. B. status.yourdomain.com.
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 3: Docker installieren
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
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: