Während mit klassischen Monitoringlösungen wie Nagios Systemdaten überwacht werden können, eignet sich die Kombination aus statsd und Graphite hervorragend für effektives Monitoring von Businessprozessen in Webanwendungen. Auch für Symfony2-Projekte wäre so eine Lösung praktisch – eine Variante stellt der Artikel vor.
Statsd ist ein schlanker Netzwerk-Daemon, der auf Node.js läuft und Metriken wie Counter oder Timer für Graphite aggregiert. Dafür lauscht er auf einem UDP Port und sendet die Daten dann über TCP weiter an das konfigurierte Graphite-Backend.
Für die Kommunikation zwischen PHP und statsd gibt es dafür schon seit längerer Zeit die statsd-php Library, die wir schon erfolgreich in Kundenprojekten eingesetzt haben und die sich mit geringem Aufwand in jedes beliebige Projekt integrieren lässt, unabhängig vom verwendeten Framework.
Mit Hilfe des DomniklStatsdBundle lässt sich diese Bibliothek nun auch ohne großen Aufwand in Symfony2-Projekten nutzen. Dazu stellt das Bundle einen Service statsd zur Verfügung, der wie alle anderen Services im Dependency Injection Container zur Verfügung steht und für die Erfassung der Metriken genutzt werden kann.
Konfiguration
Nach der Installation über Composer muss die Applikation für den Service konfiguriert werden:
domnikl_statsd: namespace: "sample.project.namespace" connection: class: \Domnikl\Statsd\Connection\Socket port: 8125 host: "localhost"
Soll die Erfassung der Metriken temporär (z.B. durch Feature Flags) abgeschaltet werden, so kann statt der Socket-Klasse die \Domnikl\Statsd\Connection\Blackhole
verwendet werden, die grundsätzlich kein UDP-Socket verwendet, sondern alle Daten verwirft.
Um dann die eigentlich Metriken zu erfassen, können die selben Methoden wie aus statsd-php verwendet werden, die Dokumentation dazu befinden sich in der README.md.
Lizenz
Sowohl statsd-php als auch das DomniklStatsdBundle werden unter der MIT Lizenz ausgeliefert, was sowohl die unkomplizierte Verwendung für kommerzielle wie nicht-kommerzielle Software ermöglicht.
Über Anregungen, Bug-Reports oder Pull-Requests würde ich mich sehr freuen!
Schreibe einen Kommentar