Optimal im Zusammenspiel zwischen Services und Anwendungen

PHP-Monitoring: Auf den Datadog gekommen
Keine Kommentare

Die Datadog-APM-Lösung verfügt seit Neuestem über die Möglichkeit, PHP-basierte Umgebungen zu monitoren. Damit können Anwendungsentwickler und Administratoren verteilte Traces von Endpunkt zu Endpunkt überwachen und so die komplette Systemgesundheit ihrer PHP-Infrastruktur im Blick behalten.

Die Grenzen zwischen Entwickeln, Testen und operativem Betrieb werden zusehends unschärfer. Softwareentwickler, die schon während der Programmierung das große Ganze – also nicht nur die Anwendung, sondern auch ihr Zusammenspiel mit den umliegenden Elementen und Systemen im Blick haben, machen es den Kollegen aus den Ops-Teams sicherlich leichter. Mit einem schlauen Überwachungstool wie Datadog können Sie Services und Workflows vom ersten Tag an sauber ins Rennen bringen und damit späteren Performanceengpässen oder Errors im laufenden Betrieb vorbeugen.

Sehen wir uns zum Beispiel die Anforderungen für eine Monitoringlösung für PHP an. Die PHP-Logik unterstützt eine große Bandbreite an unterschiedlichen Webservern, Datenbanken und Betriebssystemen. Entwickler nutzen gerne Frameworks wie Laravel, Symfony oder Zend, um skalierbare Seiten und Anwendungen mit einem großen Traffic-Aufkommen zu realisieren. Datadog entwickelte mit „APM & distributed tracing for PHP“ eigens für diesen Anwendungsbereich eine Variante seines Monitoringtools, mit der Entwickler im PHP-Umfeld die Performance im Blick behalten, Engpässe erkennen und die User Experience optimieren können. Und das sowohl während des laufenden Betriebs als auch bereits parallel zur Entwicklung von Anwendungen. Development-Teams profitieren dabei von der Datadog-Tracing-Funktion und können mögliche Performanceengpässe schon im Test identifizieren und beheben, bevor die Anwendung live geht.

Traces und Span

Der zeitliche Ablauf, innerhalb dessen sich Operationen zwischen PHP-basierten Anwendungen abspielen, wird während des Monitorings als lineare Einheit betrachtet und nennt sich „Trace“ – zu übersetzen etwa mit „Nachverfolgungspur“. Jede einzelne Anfrage an einen notwendigen Service innerhalb dieses Trace heißt „Span“. Der Begriff beschreibt die Spanne zwischen Anfrageversand durch die Anwendung und Request-Annahme durch einen Service. Datadog APM stellt Funktionen zum verteilten Tracing bereit, um sämtliche Ausführungspfade jedweder Anfrage sichtbar zu machen, auch über die Grenzen einzelner PHP-Prozesse hinweg. Damit erzeugt die Lösung maximale Transparenz, wenn es um die Sichtbarkeit von Prozessen und Workflows zwischen Services und Anwendungen geht. Darüber hinaus werden für jeden Service, jeden Endpunkt und jede Datenbankanfrage detaillierte Performancekennzahlen erfasst und ausgewertet. Alles, was nötig ist, um die zu überwachenden Pfade an Datadog zu senden, ist die Installation der PHP-Erweiterung durch vorkompilierte Pakete. Das Paket kann mit dem Befehl zur Installation der PHP-Erweiterung installiert werden:

# using RPM package (RHEL/Centos 6+, Fedora 20+)
$ rpm -ivh datadog-php-tracer.rpm

# using DEB package (Debian Jessie+ , Ubuntu 14.04+)
$ dpkg -i datadog-php-tracer.deb

# using APK package (Alpine)
$ apk add datadog-php-tracer.apk --allow-untrusted

Nach dem Neustart von PHP (PHP-FPM oder Apache SAPI) kann ein tracingfähiger Endpunkt der betreffenden Anwendung aufgerufen werden. Über die APM-Benutzeroberfläche sind die einzelnen Traces sichtbar. Das Tracing an sich erfolgt automatisch nach Standardeinstellungen. Sobald die PHP-Erweiterung installiert ist, setzt das Anwendungstracing über die Datadog Library ddtrace ein. Erfasste Traces werden an den Datadog-Agenten weitergeleitet.

Instrumentierung übernimmt das Monitoringtool

Eine manuelle Instrumentierung ist nur in seltenen Fällen nötig. Datadog protokolliert generische Anfragen und erzeugt für diese ebenso generische Traces. Dadurch kann das PHP-Monitoring auch auf Frameworks angewandt werden, die nicht offiziell von Datadog unterstützt werden. Die Arbeit mit Systemen, die standardmäßig mit Datadog zusammenarbeiten, bringt dennoch Vorteile mit sich: Hier hinterlässt Datadog eine deutlich größere Anzahl an Metadaten, was die Navigation durch die einzelnen Services erleichtert. Die automatisierte Instrumentierung funktioniert unkompliziert. Sie modifiziert bekannte PHP-Runtime-Methoden und stellt so ein Monitoring kritischer Bereiche sowie aller bekannten Schnittstellen zu anderen Services sicher. Der PHP-Tracer unterstützt die automatische Instrumentierung für die Bibliotheken cURL sowie Guzzle 5.x und 6.x. Der Support von Beanstalkd und ReactPHP ist derzeit in der Vorbereitung.

Die automatische Instrumentierung erfasst die folgenden Punkte:

  • die Dauer von Methodenausführungen
  • relevante Trace-Daten wie beispielsweise URL und Status-Response-Codes für Web-Requests oder Datenbankabfragen über SQL
  • unbehandelte Ausnahmen, inklusive Stacktraces (sofern diese verfügbar sind)
  • die Gesamtzahl der Traces (z. B. Web-Requests), die durch das System laufen

Datadog errechnet APM-Werte, erstellt Flame Graphs und generiert automatisch eine Karte, in der die vorhandenen Services und ihre wechselseitigen Abhängigkeiten visualisiert sind (Abb. 1). Diese Service Map liefert die Grundlage, um Performanceauffälligkeiten zu identifizieren und so schnell wie möglich zu beheben. Probleme innerhalb einer PHP-Umgebung können unterschiedliche Ursachen haben, zum Beispiel unperformant arbeitender Code, redundante Datenbankanfragen, Memory Leaks (Speicherlecks) oder auch Engpässe innerhalb der Systemarchitektur. Wichtig ist, dass Datadog derartige Ursachen erkennt und anzeigt, bevor es zu ernsthaften Problemen auf Anwenderseite kommt. Die proaktiven Überwachungsfunktionen helfen also dabei, markante Fehlerquellen von Anfang an zu eliminieren.

Abb. 1: Die Service Map visualisiert Anfragepfade zwischen Services

Abb. 1: Die Service Map visualisiert Anfragepfade zwischen Services

Autoinstrumentierte Frameworks und Bibliotheken

Die Open-Source-Bibliothek zum PHP-Tracing instrumentiert automatisch große Frameworks wie Laravel, Zend und Symfony und nutzt darüber hinaus gängige Bibliotheken wie cURL, Guzzle und PDO. Zudem unterstützt sie Memcached, MongoDB und MySQL. Künftig wird auch die Integration mit WordPress, Magento, Drupal, DynamoDB, RabbitMQ, Doctrine ORM und zahlreichen anderen Systemen möglich sein. Neben der automatischen Einbindung von PHP-Code ist es auch möglich, manuelle Tracing-Konfigurationen vorzunehmen. Wie auch immer eine PHP-Anwendung aufgebaut ist, ihre Performancekennzahlen lassen sich mit minimalem Konfigurationsaufwand optimieren. Die PHP-Tracing-Bibliothek von Datadog beinhaltet unter anderem das OpenTracing API und setzt es gezielt ein. Der große Vorteil der OpenTracing-Schnittstelle: Traces können eingesehen werden, ohne dass Vendor-spezifischer Code nötig ist.

Service Map

Die Service Map visualisiert die Services einzelner Komponenten und die Anfragepfade zwischen diesen Komponenten (Abb. 1 und 2). Da die Landkarte automatisch auf Basis der von APM gesammelten Daten generiert wird, ist ein direkter Zugriff ganz ohne zusätzliche Konfigurationen möglich. Das ist insbesondere deshalb sehr nützlich, weil Abhängigkeiten so im Gesamtkontext komplexer, Microservices-basierter Anwendungen sichtbar werden. Die Service Map hilft dabei, die Vielschichtigkeit einer Anwendungsarchitektur zu verstehen: Die Korrelationen zwischen einzelnen Services können auf einen Blick erkannt werden. Spezifische Prozesse, Workflows, Logs und die zugrunde liegende Struktur einzelner Services können bis ins tiefste Detail beobachtet und überprüft werden. Damit ist ein guter Ausgangspunkt gegeben, um Probleme zielgerichtet zu untersuchen und vergleichsweise schnell zu beheben.

Abb. 2: Die Service Map liefert detaillierte Einblicke in einzelne Workflows

Abb. 2: Die Service Map liefert detaillierte Einblicke in einzelne Workflows

Die PHP-Performance optimieren

Neben der Service Map bietet Datadog APM eine Reihe an Funktionen, mit denen sich die Performance von PHP-Anwendungen analysieren und visualisieren lässt. Auf der Oberfläche eines Datadog-Accounts ist zunächst ein Überblick über allgemeine Performancemetriken wie Latenzverteilung, Datenfluss oder Störungen der System-Services zu sehen. Darüber hinaus können Span-Level-Statistiken sowie Unregelmäßigkeiten in der Ressourcenverteilung eingesehen werden. Von dieser höchsten Monitoringebene aus können Systemanalysten und Administratoren erkennen, ob ihr System gesund ist und bei welchen Services Probleme auftauchen könnten. Abbildung 3 zeigt, wie dieser High-Level-Blick auf sämtliche Systembausteine aussehen kann. Die Graphen auf der linken Seite führen die Anzahl der Service-Anfragen und -Errors über einen bestimmten Zeitverlauf hinweg auf. In den Diagrammen der rechten Seite ist oben der zeitliche Verlauf der Latenzverteilung dargestellt; die untere Visualisierung sagt aus, wie viel Zeit ein bestimmter Service insgesamt innerhalb eines nachverfolgten Requests beschäftigt war (zum Beispiel curl und pdo).

Abb. 3: Die Graphen visualisieren Gesamtanfragen und korrelierende Latenzzeiten

Abb. 3: Die Graphen visualisieren Gesamtanfragen und korrelierende Latenzzeiten

Watchdog identifiziert Abweichungen

Watchdog ist ein algorithmisches Feature, das automatisch potenzielle Anwendungs- und Infrastrukturprobleme identifiziert. Das Tool beobachtet Tendenzen und Muster in den Messwerten des Anwendungsmonitorings. Aus Kennzahlen wie der Fehlerhäufigkeit, der Anfragerate oder erfassten Latenzzeiten prognostiziert und erkennt Watchdog ein Abweichen im Systemverhalten. Der Überwachungsalgorithmus evaluiert alle Services und Ressourcen. Die Konfiguration einer separaten Kontrollroutine pro Service ist dabei nicht erforderlich.

IT Security Camp 2021

Interview mit Christian Schneider zum Thema „DevSecOps“

DevSecOps ist, bezogen auf Security-Checks, die logische Fortführung der Automatisierung im DevOps-Sinne

IT-Security Experte, Christian Schneider

Christian ist als freiberuflicher Whitehat Hacker, Trainer und Security-Coach tätig. Als Softwareentwickler mit mittlerweile 20 Jahren Erfahrung, fand er 2005 seinen Themenschwerpunkt im Bereich IT-Security.


Durch das Anklicken eines Endpunkts im Service Overview der Datadog-Bedienoberfläche wird die Span-Level-Statistik sichtbar. Hieraus lässt sich schnell erkennen, welche Funktion oder welcher Service die größte Latenz pro Anfrage erzeugt. Das Datadog-Dashboard mit Überblick auf alle Services zeigt darüber hinaus eine Liste aller Unregelmäßigkeiten an, die von Watchdog identifiziert wurden. Watchdog beobachtet und erfasst völlig autonom Performanceanomalien in sämtlichen PHP-Anwendungen – selbst dann, wenn keine Alerts definiert wurden. Sollte Watchdog zum Beispiel eine ungewöhnliche Veränderung bei der Latenz einer bestimmten Ressource verzeichnen, wird eine Historie angezeigt, welche die Details der Abweichung aufführt und eine genauere Untersuchung erlaubt.

Trace-Verfolgung und Flame-Graphen

Mit Flame-Graphen lassen sich Anfragepfade auf ihrem kompletten Weg durch verteilte Services nachvollziehen. Die Service-Anfragen der Anwendungen werden im Detail visualisiert. Damit lassen sich in diesen speziellen Diagrammen schnell die korrelierenden Reaktionen der Services erkennen und ob diese verlangsamt oder fehlerhaft erfolgt sind. Wenn der API-Aufruf einer PHP-Anwendung ins Leere läuft oder eine Datenbankanfrage langsam ist, hilft der Klick auf eine bestimmte Span-Linie innerhalb eines Flame-Graphen, um die Ursache für derartige Verzögerungen herauszufinden.

Zusätzlich zur Zeit- und Latenzerfassung zeigt der Flame-Graph außerdem die Details jedes Service-Aufrufs, der an der Abwicklung einer Anfrage beteiligt ist. In Abbildung 4 ist der Ausschnitt von einem Bereich innerhalb des Flame-Graphen zu sehen, in dem ein fehlerhafter Span mit einem zurückgewiesenen 503-Response zu sehen ist. Bei Anklicken dieses Spans werden seine Metadaten sichtbar, die sowohl die Fehlermeldung als auch die Trace-Verfolgung einzelner Stacks umfasst. So kann im Fall eines Anwendungsfehlers die Aufrufkaskade, die zu einem spezifischen Problem geführt hat, rekonstruiert werden. Anwendungsentwickler können zusätzliche Metadaten erfassen, die dann ebenfalls an dieser Stelle gelistet werden.

Abb. 4: Mit Flame-Graphen lassen sich Anfragepfade übersichtlich visualisieren

Abb. 4: Mit Flame-Graphen lassen sich Anfragepfade übersichtlich visualisieren

Zusammenhängende Traces und Logs

Auf der Datadog-Oberfläche geben zusätzliche Navigations-Tabs weiterführende Informationen über spezifische Traces. So findet sich beispielsweise unter Host Info die Option, die Performance von Services in Korrelation zur darunterliegenden Infrastruktur zu setzen. Unter Errors sind sämtliche Fehlermeldungen aggregiert. Hinter dem Tab Logs verbirgt sich eine Funktion, die alle verfügbaren Logs der überwachten Services anzeigt. Diese Vergleichsmöglichkeit ist besonders hilfreich, da sie aufwändige Loganalyse erspart und direkt zum Kern eines Anwendungsproblems führt. Die Verknüpfung von Logs und Traces mit trace_id liefert für jede negative Abweichung in der User Experience eine schnelle Antwort. Die drei wesentlichen Funktionen von Datadog (Logs, Infrastruktur und APM) setzen sich so zu einem Gesamtbild der Anwendung zusammen.

Der Wechsel von der Anwendungs- zur Kundenperspektive

Anwendungen senden kontinuierlich Daten an das Performancemanagementtool von Datadog. Deshalb ist es möglich, APM Trace Search & Analytics zu nutzen, um alle Traces zu finden und darzustellen, die für ein bestimmtes Analyseszenario sinnvoll sind. Es ist möglich, Traces nach bestimmten Schlagworten und Aspekten wie Host, Umgebung, Kundennummer oder auch der erforderlichen Zeitspanne zur Erfüllung einer Anfrage zu filtern. Im Beispiel aus Abbildung 5 wurde der Filter „Status Code“ angesetzt. Damit sollen einzelne Traces von einem spezifischen Service isoliert und letztlich genauere Informationen zu einer konkreten 500-Fehlermeldung von einer Anwendung gewonnen werden.

Abb. 5: Datadog APM Trace Search & Analytics verfügt über diverse Filterfunktionen

Abb. 5: Datadog APM Trace Search & Analytics verfügt über diverse Filterfunktionen

Alle Tags, die einer Anwendung oder einer Infrastruktur zugeordnet wurden, werden automatisch auf die dazugehörigen Traces angewendet und sind damit auch in der Trace-Search-&-Analytics-Oberfläche konfigurierbar. Das umfasst übrigens auch Tags, die automatisch von Cloudprovidern übernommen wurden. Sind die für eine Analyse gewünschten Filter aufgerufen, können die Trace-Informationen über die Schaltfläche Analytics als Zeitfolge visualisiert werden. Darüber hinaus ist es möglich, Muster sortiert nach Nutzer oder Version in der Anwendungsperformance zu identifizieren. In Abbildung 6 ist die durchschnittliche Latenz über alle Services hinweg pro Customer aufgeführt (org_id). Wie aus der Grafik ersichtlich wird, stellt Trace Search die Performance in jeder Dimension mit hoher Kardinalität nachvollziehbar dar. Nach einem Troubleshooting mit Trace Search können Anwender einen Monitoringablauf definieren, um Teammitglieder im Fall eines erneuten Errors via Slack, PagerDuty oder mit jedem beliebigen anderen Kollaborationstool zu alarmieren. Alle Darstellungen, die mit Trace Analytics erstellt wurden, können unkompliziert in andere Dashboards exportiert werden.

Abb. 6: Der Graph illustriert Latenz pro Customer

Abb. 6: Der Graph illustriert Latenz pro Customer

Flexible Dashboards zur Kombination von App-Performance, Infrastruktur und Logs

Mit den mehr als 250 Integrationen, die Datadog anbietet, kann das Monitoring für jeden Layer eines PHP-Service schnell realisiert werden. Das beinhaltet Webserver wie beispielsweise NGINX oder Apache und Datenbanken wie MySQL, PostgresSQL oder MongoDB. Mit den erwähnten Integrationen kann das IT-Team PHP-basierte Webanwendungen im Kontext von LAMP- oder LEMP-Stacks überwachen. Das Beispieldashboard in Abbildung 7 zeigt Infrastrukturkennzahlen und APM-Metriken neben Graphen der zugehörigen Anwendungen. Ein derartiges Dashboard ermöglicht es, die Latenz von Services in Korrelation mit der Auslastung des Hostsystems, des Webservers oder auch der Datenbank zu betrachten. Mit all diesen Informationen auf einen Blick ist eine Überwachung der Daten aller Komponenten des Anwendungsstacks unkompliziert möglich. Experten erhalten darüber hinaus zu jeder überwachten Komponente weiterführende Messwerte und Drill-down-Möglichkeiten.

Abb. 7: Im Dashboard werden Korrelationen zwischen Service-Latenz, Host-Auslastung, Web-Servern und Datenbanken sichtbar

Abb. 7: Im Dashboard werden Korrelationen zwischen Service-Latenz, Host-Auslastung, Web-Servern und Datenbanken sichtbar

PHP Magazin

Entwickler MagazinDieser Artikel ist im PHP Magazin erschienen. Das PHP Magazin deckt ein breites Spektrum an Themen ab, die für die erfolgreiche Webentwicklung unerlässlich sind.

Natürlich können Sie das PHP Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Kiosk ist das PHP Magazin weiterhin im Print-Abonnement erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Abonnieren
Benachrichtige mich bei
guest
0 Comments
Inline Feedbacks
View all comments
X
- Gib Deinen Standort ein -
- or -