Eine stillstehende IT kostet Firmen bares Geld, dabei können die Gründe für einen Ausfall vielfältig sein. Im Juni dreht sich der Schwerpunkt im ... (mehr)

Per Abfragesprache filtern

Das Einsammeln und Speichern von Metriken ergibt jedoch kein vollwertiges Monitoring – es fehlen noch Möglichkeiten zur Anzeige und Alarmierung. Dazu gibt uns Prometheus ein mächtiges Werkzeug an die Hand: die Abfragesprache PromQL [10]. Sie erlaubt es, die gespeicherten Messwerte nach bestimmten Kriterien zu filtern, mit mathematischen Funktionen wie etwa "histogram_quantile()" zu transformieren oder sogar einfache Vorausberechnungen mit "predict_ linear()" durchzuführen. So geben Sie beispielsweise den eingehenden Durchsatz eines Interfaces aus:

irate(ifInOctets{hostname="switch1",ifDescr="GigabitEthernet0/1"}[5m])*8

Die Query »sum(rate(ifInErrors[5m])>1) by (hostname,ifDescr)« listet alle Interfaces mit mehr als einem Fehler pro Sekunde in den vergangenen fünf Minuten auf. Durch geschicktes Setzen von Labels in der Scrape-Konfiguration verfeinern Sie die Querys weiter. So gibt folgende Query die Anzahl der ungenutzten 10-Gbit/s-Interfaces in Rack 15 aus:

sum(ifOperStatus{rack="15",IfDescr=~"TenGigabit.*"}!=1)

Die einfachste Möglichkeit, sich mit PromQL vertraut zu machen, ist das Prometheus-Webinterface. Im Tab "Graph" testen Sie Ihre PromQL-Abfragen und sehen die Ergebnisse Ihrer Versuche. Die Anzeige von komplexen Graphen und Dashboards überlassen Sie aber besser geeigneten Spezialisten: Grafana [11] unterstützt seit langem Prometheus als Datenquelle und im Marktplatz [12] finden sich eine Menge fertiger Dashboards für verschiedenste Einsatzbereiche.

Alarme einrichten

Mithilfe von Alarmierungsregeln ("alert rules") lassen sich Fehlerzustände auf Basis der erfassten Messwerte definieren. Ein PromQL-Ausdruck im Feld "expr" der Regel wird regelmäßig ausgeführt und geprüft, ob er zutrifft. So reduzieren wir in Listing 3 voreilige Alarme, da die Bedingung "for: 3h" einfordert, dass der Zustand seit mindestens drei Stunden unverändert bestehen muss. Diese Regel sucht also nach Ports, die länger als drei Stunden im Status "Administratively UP" und im "Operation Status DOWN" sind.

Listing 3: Beispiel einer Alarmierungsregel



groups:
      - name: alerting_rules
       rules:
          - alert: unsecurePorts
            expr: count by (hostname) (ifOperStatus != 1 and (ifAdminStatus==1) )
            for: 3h
            labels:
               severity: major
            annotations:
               summary: "Found unused ports on Host {{ $labels.hostname }}"
               description: "Some ports on Host {{ $labels.hostname }} are unused over 3 hours"

Alarme reicht Prometheus an den Alertmanager [13] weiter, der Alarmzustände deduplizieren und etwa bei Wartungsfenstern stummschalten kann. Er ist in der Lage, routenbasiert Alarme an definierte Empfänger zu verschicken. Beispiele sind verschiedene Messenger wie hipchat oder Pagerduty, aber auch generische Webhooks oder die klassische E-Mail sind bereits inkludiert.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023