FreiFunkMuenster / Ansible-Freifunk-Gateway

8 stars 17 forks source link

nrpe: check_websites-ipv4 #140

Closed citronalco closed 4 years ago

citronalco commented 4 years ago

Prüfe Erreichbarkeit von ausgewählten Webseiten über FFRL/FFNW per HTTP und IPv4 Ziel: Erkennen von Routingproblemen bei FFRL/FFNW

Konfiguration:

nrpe:
  check_websites_upstream_ipv4: foo.com bar.de baz.net ...

Funktionsweise: Das Check-Skript arbeitet zweistufig um Alerts durch kaputte Webserver zu vermeiden:

  1. Es wird versucht, alle gelisteten Domains per IPv4-NAT-Adresse des Upstream-Tunnels (FFRL/FFNW) zu erreichen.
  2. Gelingt das bei einer Domain nicht, dann wird versucht, die Domain über das Default-Interface des Gateways zu erreichen (also ohne Tunnel): Nur wenn das gelingt wird ein Problem gemeldet.

Das Check-Skript liefert den Prozentsatz an problemfreien Domains zurück. "Warning" gibt's ab 99%, "Critical" ab 95%.

Obacht: Die Integration in die Rolle "icinga" ist ungetestet, ebenso der Test der FFNW-Tunnel. Wir haben keine FFNW-Tunnel und benutzen eine andere Rolle für Icinga2 als ihr (icinga2-server). Ich habe trotzdem versucht, das nach bestem Wissen einzubauen. Solltet ihr einen Fehler findet einfach Bescheid geben, ich ändere den Pull Request dann entsprechend.

Welche Domains verwenden? Wir bei FF Ingolstadt verwenden als zu prüfende Domains die Alexa-Top-50-Liste für Deutschland. Dazu setzen wir im Ansible-Inventory die Variable nrpe.check_websites_upstream_ipv4 beim Ausrollen per Lookup-Skript und ergänzen sie um ein paar Domains die in der Vergangenheit bereits Probleme gemacht haben. Das sieht dann so aus:

nrpe:
   check_websites_upstream_ipv4: "{{ lookup('pipe','scripts/alexa-top-50-domains.py DE') }} twitter.com consorsbank.de"

Das Lookup-Skript liegt hier https://git.bingo-ev.de/freifunk/ansible-ffin/blob/master/scripts/alexa-top-50-domains.py und holt sich die Domains per Web-Scraping.

Da das Skript ein Inventory-Skript ist und Web-Scraping tendenziell instabil ist, ist das Skript nicht Bestandteil dieses Pull Requests. Wenn ihr wollt könnt ihr das natürlich auch in euer Inventory aufnehmen.