
Wer in diesem Jahrtausend Webseiten überwacht hat, hat das vermutlich mit check_http getan - einem Nagios-Plugin. Mit check_httpv2 gibt es seit 2025 einen inoffiziellen Nachfolger, der auch solo super funktioniert! Als kleines Beispielprojekt: Es soll eine Telegram-Benachrichtigung kommen, wenn ein bestimmter Text auf einer Webseite erscheint.
Kurz zum Hintergrund ... - obwohl, nein. Juckt Euch vielleicht gar nicht, also heute mal andersrum: Die Einleitung/Historie findet Ihr unten, hinter der Praxis. Und weil's so schön ist, wird der Praxisteil auch von Hinten aufgezäumt 😉
Telegram-Benachrichtigung, wenn Tutonaut über Ubuntu berichtet
Der Check soll folgendermaßen aussehen:
- check_httpv2 prüft, ob Tutonaut.de erreichbar ist
- check_httpv2 prüft, ob "Ubuntu" auf der Startseite vorkommt
- Falls jeweils ja, wird eine Telegram-Benachrichtigung mit folgenden Daten verschickt:
- Link zur Seite
- Gefundener Begriff
- Antwortzeit
In Telegram sieht das dann am Ende so aus:

Um das zu erreichen, braucht es ein kleines Skript, das check_httpv2 regelmäßig mit passenden Parametern aufführt:
#!/bin/bash
while true; do
term=ubuntu
output=$(./check-http --url https://www.tutonaut.de --body-regex "(?i)$term")
status=$?
response_time=$(echo "$output" | grep -oP 'response_time=\K[0-9.]+' )
[ $status -eq 0 ] && \
echo Alles okay && \
curl -X POST "https://api.telegram.org/bot12345/sendMessage?chat_id=-12345&text="https://www.tutonaut.de%0AAntwortzeit%20ist%20\"${response_time}\"%0A\"${term}\"%20gefunden""
[ $status -eq 1 ] && \
echo Schade, nichts gefunden
sleep 60
done
Das Drumherum: Die Ausgabe des check-http-Befehls wird in "$output" gespeichert, der Status-Code in "$status". Wenn der Aufruf erfolgreich und der Status-Code entsprechend 0 ist, wird per curl eine Telegram-Benachrichtigung verschickt - samt Link zur Seite, dem gesuchten Term (hier ubuntu) und der Antwortzeit ("$response_time"). Letztere wird aus dem "$output" per grep besorgt. Und das alles wird alle 60 Sekunden per while-Schleife wiederholt.
Deutlicher wird das, wenn man sich die Ausgabe (also "$output") anschaut:
Version: HTTP/2.0, Status: 200 OK | response_time=0.191645237s;;;0;10 time_http_headers=0.087243303s;;;; time_http_body=0.104401934s;;;; response_size=410596B;;;0;
URL to test: https://www.tutonaut.de/
Method: GET
Version: HTTP/2.0
Status: 200 OK
Response time: 0.192 seconds
Page size: 410596 Bytes
User agent: checkmk-active-httpv2/2.4.0
Expected regex in body: (?i) (matched)
Neben der Antwortzeit lassen sich natürlich auch alle anderen (Performance-)Daten herausziehen. Schaut, was Ihr braucht.

Der eigentliche check_httpv2-Aufruf kommt mit zwei Argumenten aus: Die URL sollte selbstverständlich sein. Die Option --body-regex sucht nach dem angegebenen Muster: Das (?i) sind Regex-Optionen (Inline-Flags, eingeleitet mit "?"); i ignoriert Groß-/Kleinschreibung.
Es gibt freilich noch etliche weitere Optionen, check-http --help hilft weiter 😉 Da stellt sich vielleicht die Frage, warum der Aufruf überhaupt "check-http" lautet ...
Wo bekomme ich check_httpv2?
Der Einsatz von check_httpv2 ist simpel - nur gibt es leider keinen Download 🙁 Das Tool ist integraler Bestandteil von Checkmk und wird leider noch nicht separat/einzeln angeboten. Aber ich dränge darauf 😉
Heißt: Das Ding muss kompiliert werden. Und auch wenn Kompiliererei fast immer zu Problemen führt, in diesem Fall funktioniert es meistens ziemlich problemlos - zumindest auf einem aktuellen Ubuntu sollte es so gehen:
sudo apt install rustup libssl-dev pkg-config git
rustup default stable
mkdir ~/git
cd ~/git
git clone https://github.com/Checkmk/checkmk.git
cd checkmk/packages/check-http/
cargo check --release
cargo build --release
cd ../../requirements/rust/site/target/release
Zunächst werden Abhängigkeiten installiert, inklusive rustup. Rustup wiederum richtet die die Programmiersprache Rustup inklusive aller benötigten Tools ein und aktiviert die aktuelle Version. (Man könnte Rust samt Tools auch via apt installieren, allerdings bekommt man dann eine zu alte Version aus den Paketquellen und der Nervkram beginnt ...).
Dann wird Checkmk per Git geklont. Anschließend genügt im Verzeichnis checkmk/packages/check-http/ der Befehl cargo build --release. Das fertige Binary landet dann in checkmk/requirements/rust/site/target/release - und zwar unter dem Namen check-http.
Die Konfiguration für den Bau und sämtliche Abhängigkeiten finden sich in diesen beiden toml-Dateien:
- checkmk/packages/check-http/Cargo.toml
- checkmk/requirements/rust/site/Cargo.toml
Wie gesagt, eigentlich funktioniert das bislang ziemlich reibungslos. Meiner Erfahrung nach kann ein Kompiliervorgang allerdings jederzeit an Kleinigkeiten scheitern ...
Telegram-Bot erstellen
Nun mag sich noch die Frage stellen, wie denn der Telegram-Teil funktioniert. Im Grunde super simpel. Einen ausführlichen Artikel haben wir hier, an dieser Stelle soll es die Kurzversion tun:
- In Telegram den Bot Botfather aufrufen
- Per Botfather einen neuen Bot erstellen -> Bot-ID
- Bot in den gewünschten Chat einladen
- Beliebige Nachricht an den Chat senden
- Updates/Nachrichten für den Bot besorgen --> Chat-ID
- Chat-ID und Bot-ID im Skript eintragen
Die Chat-ID bekommt man über den Terminal oder den Browser:
https://api.telegram.org/bot123456:abcde1234ABCDE/getUpdates
oder
curl -X POST https://api.telegram.org/bot123456:abcde1234ABCDE/getUpdates
Das Erstellen von Bots via Bot mag etwas ungewöhnlich anmuten, ist aber letztlich ziemlich trivial.
Historie - könnt Ihr auch überlesen ...
Ein klein wenig muss ich hier ausholen. Nagios ist das wohl bekannteste Open-Source-Monitoring-System, mit Baujahr 2002 auch schon ein wenig älter. Aus Nagios sind im Laufe der Jahre andere Monitoring-Projekte entwachsen, beispielsweise Icinga und Checkmk.
Zu Nagios gehört auch eine recht große Sammlung an Plugins, die die eigentlichen Monitoring-Aufgaben übernehmen. Darunter auch das Tool check_http, das für die Überwachung von HTTP-Diensten verantwortlich ist. Die Funktionsweise ist im Grunde simpel: Es schickt eine HTTP-Anfrage an eine URL und gibt Daten wie Erreichbarkeit (HTTP-Status-Codes) und Antwortzeit zurück.
Bis Anfang 2025 lief check_http auch in Checkmk - allerdings war es da schon etwas in die Jahre gekommen. Also hatte man in München beschlossen das Werkzeug komplett neu zu entwickeln und seit diesem Frühjahr arbeitet Checkmk intern mit dem neuen Programm check_httpv2.
Das eigentlich Interessante: check_httpv2 kann völlig losgelöst von Checkmk als separates Tool laufen - aber das habt Ihr ja oben schon gesehen 🙂
check_httpv2 in Checkmk
Um Checkmk geht es hier nicht, aber vielleicht wollt Ihr check_httpv2 ja mal in seiner natürlichen Umgebung sehen. Das Tool an sich ist in Checkmk natürlich völlig identisch, aber es gibt ein paar Boni. Beispielsweise gibt es hübsche grafische Auswertungen, ausführliche Hilfe, Variablen für flexibleren Einsatz und natürlich die ganze Logik rund um das regelmäßige Abrufen.
Und so sieht die Auswertung in Checkmk aus:

Mehr Infos rund um check_httpv2, insbesondere im Zusammenspiel mit Checkmk, findet Ihr hier bei IP-Insider (Link folgt, sobald der Artikel online ist).
Zum Schluss noch eine wichtige Info: check_httpv2 kümmert sich auch nicht mehr um Zertifikate als der Vorgänger - weil Checkmk dafür ein separates Tool entwickelt hat, ebenfalls Open Source, ebenfalls als Standalone-Programm verfügbar. Das Kompilieren und Besorgen entspricht 1:1 dem obigen Prozedere, nur, dass das Tool auf den Namen check_cert hört und sich entsprechend im Ordner checkmk/packages/check-cert findet. Und auch dazu gibt es einen separaten Artikel bei IP-Insider (Link folgt).