Inhalt

Monitoring mit Uptime Kuma

Vorwort

Um meine Server und Services zu überwachen habe ich lange Zeit auf das Angebot von Uptimerobot gesetzt. Da Uptimerobot sich stark gewandelt hat und mich der neue Weg des Unternehmens nicht überzeugen konnte, habe ich nach einer Alternative gesucht - und bin fündig geworden: Uptime Kuma. Das Projekt ist noch relativ neu und erhält aktuell mit jedem Release neue Features. Trotz des frühen Stadiums verfügt es bereits über zahlreiche Features für Monitoring Arten, darunter HTTP(S), Ping, Test auf einen TCP-Port und die Prüfung auf den hinterlegten DNS Eintrag. Auf Wunsch der Community wurde ebenso eine Option zur Überwachung von Steam Gameservern eingerichtet.

Ebenso zahlreich wie die verfügbaren Optionen zur Überwachung sind die Möglichkeiten zur Benachrichtigung bei Vorfällen: Aktuell sind hierfür über 70 Arten verfügbar, von der klassichen Benachrichtigung via E-Mail, über Discord/Slack Integrationen, sowie Benachrichtigungen für Messenger wie Signal oder Telegram.

Eine Liste an offenen Ideen lässt sich ebenso auf Github finden.

Installation

Optional: Installation von Docker Auf einem frischen System ist möglicherweise noch kein Docker installiert, dies wird im folgenden Schritt nachgeholt.

Zuerst gilt es, die Vorbereitungen zu erfüllen, dass der Paketmanager APT, sicher via HTTPS, die Paketquellen beziehen kann. Hierfür sind folgende Pakete notwendig:

1
sudo apt update && sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release

Anschließend kann der GPG-Key importiert werden:

1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Im nächsten Schritt wird der entsprechende Eintrag in den Paketquellen hinterlegt, damit Docker bezogen werden kann:

1
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Jetzt kann Docker wie gewohnt nachinstalliert werden:

1
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io

Installation von Uptime Kuma

Die Installation erfolgt über einen Docker Container und ist binnen weniger Befehle abgeschlossen.

Mit den nachstehenden Befehlen wird Docker zunächst ein Volume mit dem Namen ›uptime-kuma‹ erstellen. Im Nachgang wird das aktuelle Docker Image bezogen und gestartet. Der Port ›3001‹ wird hierbei nach außen veröffentlicht. Der Service ist nach Fertigstellung unter http://localhost:3001 erreichbar.

1
2
3
4
5
# Docker Volume erstellen
docker volume create uptime-kuma

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

Jetzt läuft der Service, ist jedoch zum einen nur auf dem ›localhost‹ erreichbar und zum anderen unsicher (http). Abhilfe soll hier der Einsatz eines Reverse Proxy schaffen. Dazu verwende ich nginx mit folgender Konfiguration:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name uptime.domain.tld;

    # Security
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer" always;
    add_header Permissions-Policy "interest-cohort=()" always;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header cross-origin-opener-policy same-origin always;
    add_header X-Frame-Options SAMEORIGIN always; 

    # . files
    location ~ /\.(?!well-known) {
        deny all;
    }

    # SSL ECC
    ssl_certificate /etc/letsencrypt/uptime.domain.tld/ecc/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/uptime.domain.tld/ecc/key.pem;
    ssl_trusted_certificate /etc/letsencrypt/uptime.domain.tld/ecc/cert.pem;

    ssl_early_data on;
    tcp_nopush on;
    tcp_nodelay on;

  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";

    # Proxy timeouts
    proxy_connect_timeout 60s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
  }
}

server {
    listen 80;
    listen [::]:80;
    server_name uptime.domain.tld;
    # enforce https
    return 301 https://uptime.domain.tld$request_uri;
}

Danach noch mit ›nginx -t‹ die Konfiguration auf etwaige Fehler prüfen, bevor mit ›systemctl restart nginx‹ der Webserver neu gestartet wird.

Das wars, Uptime-Kuma läuft und wartet auf die Initiale Erstellung des Administrator Accounts!

Updates durchführen

Von Zeit zu Zeit erscheinen neue Releases, diese sollen natürlich zeitnah eingespielt werden.

Auch dies ist binnen weniger Steps erledigt:

Zuerst wird das neue Docker Image heruntergeladen

1
docker pull louislam/uptime-kuma:1

Anschließend der aktuelle Container gestoppt…

1
docker stop uptime-kuma

… und entfernt.

1
docker rm uptime-kuma

Anschließend wird der neue Container gestartet

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