PHP - Axels Pimped Apachestatus

Apachestatus
Axels Pimped Apachestatus
Voraussetzungen
Installation

Apachestatus

Die Status Seite des Apache Webservers gibt Aufschluss über Dinge, die gerade passieren. Leider ist sie optisch wenig ansprechend und die richtigen Informationen herauszuziehen ist ... - sagen wir: "eine Herausforderung".

Beispiel:



Kleines Quiz: wieviele aktive Prozesse gibt es im obigen Bild?
Es ist genau einer. Relevant hierbei ist die Spalte unter "M" - der Status "_" zeigt beendete Requests, deren Slot wartet auf eine neue Anfrage.

Noch weit schwieriger wird es, wenn man eine Webseite mit mehreren Servern hinter einem Loadbalancer hat. Wenn man dann wissen will, warum die Webseite bei jedem 5. Request langsam ist und welcher Webserver dafür verantwortlich war oder woher von welchen Request der viele Datenbanktraffic kommt, dann wir es extrem mühsam. Man müsste sich durch die einzelnen Apachestatus-Seiten mehrerer Server kämpfen. Das macht definitiv keinen Spass!

Seitenanfang


Axels Pimped Apachestatus

Der Apache Status ist eine Ausgabe als HTML. Und lässt sich somit parsen und in ein Array verpacken, dass man nach verschiedenen Kriterien filtern und sortieren kann.
Die Ausgabe des Arrays erfolgt auf verschiedene Art und Weise:
  • Es gibt mehrere Einzelansichten mit je einer Tabelle: Aktive Apache-Worker, Serverinformationen, nur aktive Prozesse, langsamste Requests uvm.
  • Requests werden entsprechend ihrem Status eingefärbt (z.B.: aktive Prozesse sind grün, inaktive grau).
  • Bei jedem Request gibt es eine Kommentarspalte, der die Bedeutung des Status des Slots erklärt.
  • Alle Tabellen haben einen Suchfilter. Requests lassen sich so über alle Webserver hinweg suchen.
  • Alle Tabellen sind nach jeder Spalte sortierbar.
Und wenn ich noch sage, dass man in das Array die Daten von mehreren Servern packen kann, dann wird es sicher spannend.
Man kann sich mehrere Konfigurationssets anlegen: Für Frontend-Systeme, Redaktionssysteme, Backendsysteme, ... es lassen sich die Server eines Sets wie gesagt gruppieren als auch der Apachestatus eines einzelnen Systems betrachten.

Sceenshots:


Funktionsweise:


Zur Performance:
Mein Skript startet alle Abfragen des Apache-Status zu allen Systemen gleichzeitig. Die Performance der Abfrage hängt somit nur vom langsamsten Response aller Systeme ab.
8 gleichzeitig im LAN abgefragte Webserver stellen überhaupt kein Problem dar. Wie weit das Skript nach oben sklaliert, kann ich nicht sagen.



Seitenanfang


Voraussetzungen

  • zu überwachende Apache-Server
    • haben Apache Version 2
    • haben mod_status installiert
  • Monitoring-Server
    • hat installiert: Apache und PHP 5 (eine Datenbank ist nicht erforderlich)
    • hat Zugriff auf server-status-Seite aller zu überwachenden Server

Seitenanfang


Installation

Holen der Dateien:
  • Lade die Zip-Datei von Sourceforge herunter.
  • Dekomprimiere die Dateien unterhalb eines Webroots. Die Dateien können in einem beliebigen Unterverzeichnis abgelegt werden.
ODER
Mit einem Svn-Client das Repository auschecken. Diese Variante macht es einfacher, die Dateien für den Pimped Apache-Status aktuell zu halten.
  • Gehe ins Webroot
    cd [Webroot-Verzeichnis]
  • Checkout des trunks
    Dieses Kommando legt das Unterverzeichnis "apachestatus" an und holt die aktuelle Version:
    svn checkout http://svn.code.sf.net/p/pimpapachestat/code/trunk apachestatus
Konfiguration:
  • Öffne http://Rechnername/Pfad mit Apachestatus-Skript/ - z.B. http://localhost/apachestatus/ in deinem Webbrowser.
    Beim ersten Aufruf wird im Unterverzeichnis ./config/ eine Kopie der config_user_default.php als Benutzer-Konfiguration config_user.php angelegt.
  • Bearbeite die ./config/config_user.php und konfiguriere darin die Systeme, die du überwachen möchtest.
    Schau in die ./config/config_default.php, welche Variablen du sonst noch übersteuern könntest.
  • Erlaube deinem Server, die server-status Seite der Systeme abzurufen, die du überwachen möchtest.
    Auf jedem der zu überwachenden Apache Server ist in der Apache Konfiguration der Zugriff anhand der IP Adresse zu erlauben:
         <Location /server-status>
           SetHandler server-status
           order deny, allow
           allow from 127.0.0.1
           allow from 192.168.123.4 # IP des monitorenden Systems
           deny from all
         </Location>
    Nach Änderung der Apache-Konfiguration ist ein Reload/ Restart des Apache notwendig, um die Konfiguration auf dem Server anzuwenden.

Seitenanfang