PHP - Axels Pimped Apache Server Status

Web GUI zum Lesen, sortieren, filtern des Apache Server Status - auch bei loadbalancten Webseiten

Steckbrief :: Axels Pimped Apache Server Status

Startseite
Der Apache httpd Server Status in lesbar, sortierbar, durchsuchbar, aufgeschlüsselt ... auch für mehrere Server loadbalancte Webseiten.

Typ:
Web-Applikation
In den (Original-) Server-Status seiten kann man die aktuellen Prozesse des Apache httpd einsehen. Also in Echtzeit beobachten, was der Server aktuell macht und mit welchen Requests er beschäftigt ist. Man sieht also die Requests, die noch gar nicht ins Log geschrieben wurden. Leider ist jener Server-Status zuweilen schwer entzifferbar.
Der Pimped Apache Server Status splittet dessen Daten auf und bietet Einzelansichten. Nur aktive Prozesse oder am häufigsten aufgerufene VHosts oder Urls. Die Tabellen lassen sich nach mehreren Spalten in verschiedene Richtungen sortieren und filtern; sie lassen sich in verschiedene Formate exportieren. Und weil man den Server Status mehrerer Server zusammenführen kann, kann man loadbalancte Webseiten monitoren.
Die Weboberfläche verwendet AdminLTE und ist mehrsprachig ausgelegt.

Anforderungen:
  • zu überwachende Apache-Server: Apache Version 2 mit mod_status und aktiviertes "Extended Status On"
  • Monitor-Server: Apache und PHP 7
  • Monitor-Server: PHP-Module Curl und PHP-Xml (letzteres ist optional für den Export als XML)
  • Monitor-Server: hat Zugriff auf server-status-Seite aller zu überwachenden Server

Features:
  • Abfrage mehrerer Server gleichzeitig - das ermöglicht die Analyse von loadbalanzten Webservern
  • verschiedene Ansichten in Tabellenform - diese sind sortierbar und filterbar
  • Tabellen lassen sich konfigurieren: Spalten kann man ausblenden, Inhalte umschreiben (z.B. die Ausgabe der IP-Adresse auf einen IP-Dienst verlinken)
  • Tabellenzeilen sind farbig - je nach Http-Methode oder Zustand des Requests
  • Export der Tabellen in verschiedene Formate
  • Automatischer Reload der Ansicht möglich
  • Konfiguration der Oberfläche und der Server per Webinterface
  • Server lassen sich gruppieren, um gemeinsam abgerufen werden zu können
  • Interface in deutsch und englisch
  • Farben Skins (von AdminLTE)
  • Eingebauter Updater
  • CLI tool zur Bearbeitung der Programm-Einstellungen und Server-Setups.

Lizenz:
  • GNU GPL v3 (Opensource)
Weitere Screenshots:

Filter nach tatsächlich aktiven Requests
Zusammenzählen der häufigsten Requests
Worker-Prozesse mehrerer Server
Export der Ansichten (dies ginge auch per API Request)
Grafik: Ablauf

For information in English see the Docs.

phpclasses-org-nominee.png

Aktuell: Mein Tool wurde am 1.8.2015 auf phpclasses.org für den Innovation Award Juli 2015 nominiert.

phpclasses.org

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 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!

Funktionsweise

pimped-apachestatus_2.png

Und so funktioniert es:

  • Dein Webbrowser fragt beim Pimped Apachestatus den Zustand an
  • Axels Pimped Apache Server Status sammelt die Daten mehrerer Server ein
  • Die Html-Ausgabe der Server-Status Seiten werden geparst und und in einem gemeinsamen Array aggregiert.
  • Templates stellen die Ansichtsformen zusammen. Aggregierte Informationen werden gefiltert und sortiert, bevor sie in Kacheln oder Html-Tabellen geschrieben werden.

Man kann sich mehrere Konfigurationssets anlegen: Für Frontend-Systeme, Redaktionssysteme, Backendsysteme, ... es lassen sich die Server eines Sets als auch der Apache Server Status eines einzelnen Systems betrachten.

Zur Performance

Die dargestellte Ansicht ist immer eine Live-Ansicht der Systeme. Mein Skript startet alle Abfragen des Apache-Status zu allen Systemen gleichzeitig. Die Performance der Abfrage hängt einmal vom langsamsten Response aller Systeme ab.
Gut 20 gleichzeitig im LAN abgefragte Webserver stellen überhaupt kein Problem dar. Wie weit das Skript nach oben sklaliert, kann ich nicht sagen.

Den Hauptteil der Zeit machen Filter- und Sortierfunktionen aus. Je grösser die Datenmenge aller angefragten Webserver ist, um so länger braucht die Ansicht im Browser.

Installation

Holen der Dateien:

  • Lade die Zip-Datei von Sourceforge herunter (s. Box auf der Seite rechts oben).
  • 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.

Anm.:

Auf deutsch ist hier nur ein Schnelleinstieg. Mehr Details zum Tool und dessen Konfiguration finden Sie in der englischen Dokumentation (s. Box rechts oben).