Geekzeug

Neu: check_httpv2 – Webseiten (auf Content) überwachen

Beispielprojekt: Per Telegram benachrichtigen lassen, wenn Wort "ubuntu" auf Tutonaut.de auftaucht

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:

check_httpv2-benachrichtigung in telegram.
Tutonaut berichtet über Saturn? Sofort hin!

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.

check_httpv2-Aufruf.
Der Aufruf von check_httpv2 direkt im Terminal

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:

checkmk-auswertung von check_httpv2.
Oben die bekannte Ausgabe, unten die grafische Aufbereitung der Antwortgröße

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).

7% sparen
Der elektrische Mönch: Dirk Gently 1
18,95 €
17,64 €
(Stand: 13.10.2025 20:27 - Details)
Verkäufer: Audible GmbH
Zum Angebot bei Amazon
×
Produktpreise und -verfügbarkeit sind zum angegebenen Datum / Uhrzeit korrekt und können sich ändern. Alle Preis- und Verfügbarkeitsinformationen auf https://www.amazon.de/ zum Zeitpunkt des Kaufs gelten für den Kauf dieses Produkts.

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help und VoltAmpereWatt.de. Neu: Mastodon

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"