Zabbix Webserver Apache und Lighttpd ueberwachen

Die Serverstatusmodule der Webserver

Die Webserver Apache, Nginx und Lighttpd verfügen über Schnittstellen, um einen detaillierten und aktuellen Status des Servers abzulesen. Über diese Schnittstelle können folgende Werte ausgelesen werden.

  • Total Accesses (fortlaufend hochzählender Wert)
  • Total kBytes (fortlaufend hochzählender Wert)
  • Uptime in Sekunden seit dem letzten Start des Server-Daemons
  • BusyServers
  • IdleServers
Detaillierter Bericht über den Zustand eines Webservers. Hier am Beispiel von lighttpd.

Server Status aktivieren

Lighttpd

In den gängigen Installationen von Lighttpd ist das Status Modul in der Regel enthalten. Sie müssen es nur aktivieren.
Fügen Sie in die Konfiguration von Lighttpd folgende Direktiven ein:

server.modules += ( "mod_status" )
status.status-url = "/server-status"
status.config-url = "/server-config"
status.statistics-url = "/server-statistics"

Die meisten Distributionen verwenden die Ordner conf-enabled und conf-available. Speichern Sie zum Beispiel eine Datei /etc/lighttpd/conf-enabled/10-status.conf Es ist nicht ratsam, die Statusseiten für jedermann zugänglich zu machen.

Im folgenden Beispiel können die Statusinformationen nur von 127.0.0.1 ausgelesen werden. Das bedeutet, der lesende Browser und der Webserver müssen sich auf demselben Host befinden.

## mod_status generates the status overview of the webserver.
##
## Documentation: /usr/share/doc/lighttpd-doc/status.txt
##      http://trac.lighttpd.net/trac/wiki/Docs%3AModStatus

server.modules += ( "mod_status" )

## All the above is only allowed for 127.0.0.1
$HTTP["remoteip"] == "127.0.0.1/32" {
	## relative URL which is used to retrieve the status-page
	status.status-url = "/server-status"
}

Fügen Sie einen symbolischen in Link in etc/lighttpd/conf-available/ ein und starten Sie den Webserver neu, damit das Modul geladen wird. Weitere Information finden Sie in der Dokumentation von Lighhtpd.

Apache

Stellen Sie mit dem Kommando a2enmod status sicher, dass das Modul „status„ aktiviert ist.
Im Konfigurationsordner von apache2, beispielweise /etc/apache2/mods-enabled/status.conf sollten Sie folgende oder eine ähnliche Datei finden:

<IfModule mod_status.c>
 # Allow server status reports generated by mod_status,
 # with the URL of http://servername/server-status
 # Uncomment and change the ".example.com" to allow
 # access from other hosts.

 ExtendedStatus On
 <Location /server-status>
     SetHandler server-status
     Order deny,allow
     Deny from all
     Allow from localhost ip6-localhost
 #    Allow from .example.com
 </Location>
</IfModule>

Stellen Sie mit der Zeile Allow from localhost sicher, dass nur „localhost“ auf die Statusinformationen zugreifen darf. Achten Sie auch darauf, dass sich ExtendedStatus On in der Konfiguration befindet. In vielen Standardinstallationen ist die Option "ExtendedStatus On" nicht aktiviert. Mehr Information zum Status Modul von Apache finden Sie in der Apache-Dokumentation.

Nginx

Legen Sie zum Beispiel im Verzeichnis /etc/nginx/sites-available/ eine Datei status-monitor mit folgendem Inhalt an.

server {
        listen 127.0.0.1:6683;
        location /server-status {
                stub_status on;
 		 access_log   off;
 		 allow 127.0.0.1;
 		 deny all;
         }
}

Aktivieren Sie diese Konfiguration indem Sie in site-enabled einen symbolischen Link auf die Datei status-monitor einfügen. Nach einem Restart des Webserver können Sie den Serverstatus unter der Adresse 127.0.0.1 auf Port 6683 auslesen, zum Beispiel

lynx -dump http://127.0.0.1:6683/server-status
Active connections: 1
server accepts handled requests
 3 3 3
Reading: 0 Writing: 1 Waiting: 0

Webserverstatus an Zabbix übergeben

Die Statusausgaben von Apache, Nginx und Lighttpd sind identisch formatiert, so dass für alle drei dieselben Items eingerichtet werden können.

User-Parameter einrichten

Richten Sie im Zabbix-Agenten folgenden UserParameter ein:

UserParameter=httpd.status[*],curl -s http://127.0.0.1/server-status?auto | grep -w "$1"|cut -d ':' -f 2|tr -d " "

Items einrichten

Richten Sie nun folgende Items ein. Die meisten Werte,die die Webserver liefern sind Zähler, die permanent hochgezählt werden. Diese Werte geben in Zabbix erst sinnvolle Informationen ab, wenn Sie als "Delta Speed per Second" gespeichert werden.

Httpd status item.png

Httpd all status items.png

Apache Scoreboard an Zabbix übertragen

Der Apache-Webserver liefert detaillierte Informationen über seinen Status auf dem sogenannten Score-Board aus. Das Scoreboard ist eine pseudo-grafische Anzeige über den Status aller Kind-Prozesse. Jeder Punkt oder Buchstabe in der Ausgabe entspricht einem Kind-Prozess der sich im entsprechenden Status befindet.

Informationen über Apache-Kind-Prozesse im Scoreboard.

Nutzen Sie das Skript zbx_scoreboard.sh um die Daten des Scoreboards so aufzubereiten, dass diese per Zabbix-Sender an den Zabbix-Server schicken können. Sobald Sie das Sktipt auf der Kommandozeile aufrufen, sehen Sie, welche Items Sie mit Daten „befüllen“ können.

root@app1:~# ./zbx_scoreboard.sh 
app1.prod.example.int apache.scoreboard.Logging 0
app1.prod.example.int apache.scoreboard.KeepAlive 16
app1.prod.example.int apache.scoreboard.SendingReply 1
app1.prod.example.int apache.scoreboard.GracefullyFinishing 0
app1.prod.example.int apache.scoreboard.OpenSlotWithNoCurrentProcess 1
app1.prod.example.int apache.scoreboard.WaitingForConnection 15
app1.prod.example.int apache.scoreboard.IdleCleanupOfWorker 219
app1.prod.example.int apache.scoreboard.StartingUp 1
app1.prod.example.int apache.scoreboard.DNSLookup 0
app1.prod.example.int apache.scoreboard.ReadingRequest 0
app1.prod.example.int apache.scoreboard.ClosingConnection 5

Wenn Sie diese Items nicht manuell anlegen möchten, können Sie stattdessen das Template Apache Scoreboard importieren.

Per Cronjob schicken Sie anschließend die Daten zum Beispiel minütlich per Zabbix-Sender an den Server.

# /etc/cron.d/zabbix 
* * * * * zabbix /usr/local/bin/zbx_scoreboard.sh |zabbix_sender -z <ZABBIX-SERVER> -i - >/dev/null
Grafische Darstellung des Apache Scoreboard