Advertisement
  1. Code
  2. Monitoring

Wie kann man Docker-basierte Anwendungen mit New Relic überwachen?

by
Read Time:26 minsLanguages:
This post is part of a series called Performance Monitoring With New Relic.
How to Use New Relic Browser to Improve Your Web App's User Experience
How to Use New Relic Insights to Learn More About Your Customers
Sponsored Content

This sponsored post features a product relevant to our readers while meeting our editorial guidelines for being objective and educational.

German (Deutsch) translation by Katharina Grigorovich-Nevolina (you can also view the original English article)

Einführung

Docker ist derzeit eine der am schnellsten wachsenden neuen Technologien. Als Lösung für die Bereitstellung von Software und den Aufbau skalierbarer Webservice-Architekturen können Sie die Architektur Ihrer Anwendung in Container mit bestimmten Rollen und Verantwortlichkeiten aufteilen. Mit Docker können Sie auch die Abhängigkeiten der Anwendung auf Betriebssystemebene spezifizieren, womit wir dem ursprünglichen Versprechen von Java am nächsten kommen: "Write once, runwhere."

Auf der anderen Seite kann die Kapselung Ihres Codes in einer Reihe von Containern zu einem Mangel an Sichtbarkeit führen: Die Container werden zu Blackboxen und lassen den Entwicklern wenig oder gar keinen Einblick in ihr Innenleben.

Um dies zu beheben, hat sich New Relic der Aufgabe gestellt und dafür gesorgt, dass seine serverseitigen Überwachungstools (Server und APM) Docker unterstützen. Im Juni 2015 wurde der Docker-Support für alle New Relic-Kunden verfügbar.

In dem Post, in dem die Docker-Unterstützung angekündigt wird, schreibt Andrew Marshall von New Relic:

"Sie können jetzt von der Anwendung (die Ihnen wirklich wichtig ist) auf den einzelnen Docker-Container und dann auf den physischen Server zurückgreifen. Keine blinden Flecken mehr!"

Durch die Überwachung Ihrer Docker-basierten Anwendung mit dem Toolset von New Relic können Sie jetzt die Anwendung als Ganzes analysieren und dann, wenn Sie Probleme in Ihrer Anwendung finden, die Container suchen, in denen die Probleme auftreten, und die darin enthaltenen Probleme beheben.

Außerdem erhalten Sie durch die Überwachung der Anwendung auf Docker-Ebene wertvolle Informationen über Ihr Setup: Verwenden Sie Ihre Container mit Bedacht und funktioniert die Aufteilung der Ressourcen zwischen den Containern wie gewünscht?

In diesem Tutorial

In diesem Tutorial zeige ich Ihnen, wie Sie mit der Überwachung einer einfachen Docker-basierten Anwendung mit den Tools von New Relic beginnen.

Sie werden es lernen:

  • So richten Sie die New Relic-Überwachung auf einem Webserver ein, auf dem eine Reihe von Docker-Containern ausgeführt wird, um Informationen über die gesamte Docker-Umgebung zu sammeln
  • So richten Sie das New Relic-Monitoring für eine PHP-Anwendung ein, die in einem oder mehreren Docker-Containern ausgeführt wird, um den Status der Anwendung sowie des einzelnen Docker-Containers zu überwachen

Um dies zu erreichen, erstellen wir einen einfachen Prototyp für eine gehostete WordPress-Lösung: drei WordPress-Sites, die jeweils in einem Docker-Container ausgeführt werden, und ein MySQL-Container, der zwischen ihnen geteilt wird.

Nachdem das Setup eingerichtet ist, aktivieren wir die Überwachung von New Relic, gehen die Ansichten der Überwachungstools durch und untersuchen die darin enthaltenen Daten.

Anforderungen

Obwohl ich hoffe, dass Sie durch das Lesen dieses Tutorials etwas über die Verwendung von Docker erfahren, ist es nicht als Tutorial über Docker gedacht, sondern über die Verwendung der Überwachungstools von New Relic zusammen mit Ihren Docker-basierten Anwendungen.

Um das Beste aus dem Tutorial herauszuholen, sollten Sie daher mit Docker zumindest einigermaßen vertraut sein. Außerdem wird ein grundlegendes Verständnis der Linux-Befehlszeile erwartet.

Einrichten der Docker-Container

Kurz gesagt, Docker ist ein Tool zum Verpacken der Komponenten Ihrer Anwendung und ihrer Abhängigkeiten in gut dokumentierte, in sich geschlossene Einheiten, die schnell und zuverlässig in verschiedenen Umgebungen bereitgestellt werden können – sei es eine Entwicklungsmaschine oder ein Cluster von Produktionsservern.

Diese Bausteine ​​werden Container genannt – ein Konzept, das einer virtuellen Maschine ähnelt, aber nicht ganz. Während eine virtuelle Maschine ihr eigenes Betriebssystem ausführt, laufen alle Container auf demselben Host-Betriebssystem, haben jedoch jeweils ihre eigenen Abhängigkeiten und Bibliotheken. Container können auch miteinander verknüpft werden, damit sie beispielsweise ihre Ressourcen teilen können.

Um mehr über Docker zu erfahren, ist der beste Ausgangspunkt die Online-Dokumentation des Tools. Es ist gut geschrieben und führt Sie an der Hand.

Wenn Sie sich dann wohl fühlen, Docker in Aktion auszuprobieren, beginnen wir mit unserem Setup!

Was werden wir erstellen?

Bevor wir mit der Implementierung unseres Docker- und New Relic-Setups beginnen, sehen Sie hier ein Bild mit einem Überblick über die grundlegende Architektur, die wir in diesem Tutorial erstellen werden:

A simple WordPress stack build on Docker containers and reporting to New RelicA simple WordPress stack build on Docker containers and reporting to New RelicA simple WordPress stack build on Docker containers and reporting to New Relic

Wie ich in der Einleitung erwähnt habe, ist dies ein vereinfachter gehosteter WordPress-Dienst: In drei Containern (einer beliebigen Anzahl) werden wir in jedem eine WordPress-Installation ausführen. Die WordPress-Container sind alle mit einem Container verknüpft, auf dem MySQL ausgeführt wird. All dies wird auf einem Server ausgeführt, der im Beispiel auf Amazon Web Services gehostet wird, aber jeder Server sein kann, der die Überwachungstools von Docker und New Relic ausführen kann.

Der Server und die darin laufenden Container werden von New Relics Tools APM (Application Performance Monitoring) und Servers überwacht.

Ich habe dieses Setup hauptsächlich zu Demonstrationszwecken entworfen, aber es ist tatsächlich etwas nachempfunden, das ich in meinem eigenen Projekt baue: indem ich einfach ein Admin-Tool, eine richtige DNS-Konfiguration und einen Nginx-Reverse-Proxy hinzufüge – all dies läuft für sich allein Docker-Container – das Setup kann in einen voll funktionsfähigen gehosteten WordPress-Dienst integriert werden. Dies liegt jedoch außerhalb des Rahmens dieses Tutorials, also kehren wir zum Ausführen einiger WordPress-Container zurück.

Schritt 1: Starten Sie eine neue EC2-Maschine

Ich nutze Amazon Web Services gerne, wenn ich einen Webserver für solche Experimente benötige: Die Server sind günstig zu starten und Sie zahlen nur für die Zeit, in der Sie sie verwenden (denken Sie nur daran, sie zu stoppen, wenn Sie fertig sind!).

Es gibt jedoch nichts Amazon-spezifisches an der Verwendung von Docker mit New Relic. Wenn Sie also einen anderen virtuellen Serveranbieter bevorzugen oder einen eigenen Server haben, auf dem Sie Docker und die New Relic-Überwachungstools installieren können, sind dies alles gute Optionen.

In diesem Fall können Sie diesen Schritt überspringen und direkt zur Installation von Docker auf dem Servercomputer übergehen (Schritt 2).

In meinem früheren Tutorial Erste Schritte mit der Überwachung Ihrer Webanwendung mithilfe von New Relic Alerts habe ich detaillierte Schritt-für-Schritt-Anleitungen zum Starten einer Maschine in der Amazon-Cloud hinzugefügt. Befolgen Sie diese Anweisungen in Schritt 1 des Tutorials, aber installieren Sie PHP noch nicht und starten Sie Apache noch nicht, da Apache und PHP in die Docker-Container integriert werden.

Wenn Sie bereits mit AWS vertraut sind und sich nur kurz daran erinnern möchten, welche Optionen Sie beim Starten des Computers wählen sollten, führt Sie diese kurze Liste durch den Prozess:

  1. Melden Sie sich bei der AWS-Konsole an und erstellen Sie ein Konto, wenn Sie noch kein Konto haben.
  2. Wählen Sie im Hauptmenü EC2. Sie werden feststellen, dass Amazon kürzlich einen neuen Dienst zum Ausführen von Docker-Containern in der Cloud (EC2 Container Service) eingeführt hat, aber diesmal wollen wir Docker selbst verwalten.
  3. Wählen Sie Instanz starten aus, um eine neue Maschine zu starten. Gehen Sie mit der Quick Start-Option und wählen Sie den standardmäßigen 64-Bit-Amazon-Linux-Server aus. Zum Testen ist eine t2.micro-Maschinengröße ausreichend.
  4. Öffnen Sie auf der Seite der Sicherheitsgruppe den HTTP-Port und machen Sie SSH nur von Ihrer IP aus verfügbar, indem Sie die Option Meine IP auswählen.
  5. Klicken Sie auf Überprüfen und starten, um den Server zu starten. Wenn Sie aufgefordert werden, ein Schlüsselpaar zu erstellen, erstellen Sie eines (benennen Sie es zum Beispiel docker_test) und laden Sie es herunter.

Nach etwa einer Minute werden Sie feststellen, dass Ihr Gerät betriebsbereit ist.

Klicken Sie mit der rechten Maustaste auf seinen Namen und wählen Sie die Option Verbinden. Kopieren Sie die IP-Adresse des Computers aus dem Popup und verwenden Sie sie, um sich über SSH mit dem Computer zu verbinden (setzen Sie die IP-Adresse dort ein, wo INSERT_IP_HERE in den folgenden Befehlen steht):

Schritt 2: Docker auf dem Server installieren

Nachdem Sie nun einen Server gestartet und über SSH mit ihm verbunden sind, ist es an der Zeit, die Docker-Engine zu installieren.

Die Anweisungen in diesem Schritt gelten für den Amazon Linux-Server, den wir in Schritt 1 erstellt haben. Wenn Sie ein anderes Betriebssystem verwenden, finden Sie in der Docker-Dokumentation Installationsanweisungen für Ihre Umgebung.

Beginnen Sie mit der Installation des Docker-Packages:

Mit der Option -y antwortet yum automatisch auf alle Fragen zur Installation. Es macht die Dinge schneller, aber wenn Sie auf Nummer sicher gehen möchten, können Sie es gerne weglassen.

Nachdem das Docker-Package installiert wurde, starten Sie es als Dienst:

Nun wird Docker für den Rest der Laufzeit dieses Servers ausgeführt (oder bis Sie ihn selbst stoppen).

Um die Installation zu testen, können Sie den Befehl docker ps verwenden, der die ausgeführten Docker-Container auflistet:

Zu diesem Zeitpunkt ist die Liste noch leer, da wir noch keine Container gestartet haben:

The Docker process list shows no running containersThe Docker process list shows no running containersThe Docker process list shows no running containers

Fügen Sie schließlich den Standardbenutzer zur docker-Gruppe hinzu, damit Sie Docker steuern können, ohne all Ihren Docker-Befehlen das Präfix sudo voranstellen zu müssen. Es sind nur vier zusätzliche Buchstaben, aber es macht einen großen Unterschied, wenn Sie es oft schreiben müssen!

Um die Änderung auf Ihre Verbindung anzuwenden, schließen Sie die SSH-Verbindung und stellen Sie erneut eine Verbindung her.

Jetzt können Sie einige Docker-Container starten.

Schritt 3: Starten Sie die Docker-Container

Wenn Sie nach WordPress und Docker (oder MySQL und Docker) suchen, werden Sie feststellen, dass viele verschiedene Docker-Images zur Auswahl stehen. In Ihrer eigenen Anwendung ist es eine gute Idee, die beliebtesten durchzugehen und zu sehen, welche für Sie am besten geeignet ist – oder ob Sie tatsächlich eine von Grund auf neu schreiben sollten.

In diesem Tutorial habe ich mich für offizielle Images entschieden: das von MySQL bereitgestellte MySQL-Image und das offizielle WordPress-Image von Docker.

Starten Sie zunächst einen Container mit dem MySQL-Image mysql/mysql-server:5.5.

Der Befehl lädt das Package und seine Abhängigkeiten herunter und startet dann Ihren MySQL-Container mit dem Namen db. Der Name ist wichtig, da wir ihn verwenden, um unsere WordPress-Container mit der Datenbank zu verknüpfen.

Wenn Sie möchten, verwenden Sie docker ps, um zu überprüfen, ob der neue Container ausgeführt wird. Für weitere Informationen zum Start können Sie die Protokolldatei des Containers mit docker logs db überprüfen. Sie sollten in den letzten Zeilen der Ausgabe so etwas wie folgt sehen:

Als nächstes starten Sie einen WordPress-Container mit dem WordPress-Image von Docker, wordpress:latest (mit dem latest Tag erhalten Sie immer die aktuellste Apache-basierte Version).

Im obigen Befehl werden Sie feststellen, dass wir den Container mit dem obigen MySQL-Image verknüpfen (--link db:mysql) und den Namen der zu verwendenden Datenbank als Umgebungsvariable übergeben (-e WORDPRESS_DB_NAME="wordpress_1"). Dieser Container lauscht auf den Standard-HTTP-Port 80.

Das Datenbankpasswort des Root-Benutzers wird automatisch geteilt, wenn wir den db-Container verknüpfen.

Nachdem das Image geladen wurde und der Container ausgeführt wird, rufen Sie die URL des Computers auf, um zu überprüfen, ob der Container ordnungsgemäß funktioniert. Verwenden Sie bei der Arbeit mit AWS die Public IP aus Schritt 1.

Visiting the site youll find WordPress runningVisiting the site youll find WordPress runningVisiting the site youll find WordPress running

Beenden Sie die WordPress-Installation, wenn Sie möchten – es dauert nur ein oder zwei Minuten.

Sie haben nun den ersten der drei WordPress-Container gestartet. Bevor wir den Rest hinzufügen, richten wir die New Relic-Überwachung für das aktuelle Setup ein.

Installieren Sie New Relic Server Monitoring mit Docker-Unterstützung

Die Docker-Unterstützung von New Relic gliedert sich in zwei Teile:

  • Im Server-Teil finden Sie allgemeine Informationen zu Docker: beispielsweise, wie viele Container unterschiedlicher Typen ausgeführt werden oder wie viele Ressourcen sie auf jedem Ihrer Server verwenden.
  • Im APM-Teil können Sie auf die Docker-Container als Teile Ihrer Webanwendungen zugreifen und diese sowohl gemeinsam als auch einzeln auf Anwendungsebene überwachen.

Beginnen wir mit dem Server-Teil.

Schritt 1: Installieren Sie den New Relic Server Monitor

Da New Relic als Online-Dienst ausgeführt wird, benötigen Sie zur Verwendung der New Relic-Überwachungstools zunächst ein aktives New Relic-Konto. Sie können mit einer 14-tägigen kostenlosen Testversion beginnen oder die kostenlose Version verwenden – alle in diesem Tutorial vorgestellten Funktionen sind in der kostenlosen Version verfügbar.

Wenn Sie noch kein New Relic-Konto haben, registrieren Sie sich zunächst.

Wählen Sie nach der Anmeldung im oberen Menü Server aus, um auf das Serverüberwachungstool zuzugreifen.

The New Relic menu barThe New Relic menu barThe New Relic menu bar

Wenn Sie bereits New Relic Server verwenden, sehen Sie eine Liste Ihrer mit New Relic überwachten Server. Klicken Sie auf die Schaltfläche Weitere hinzufügen, um Anweisungen zur Einrichtung zu erhalten.

Wenn Sie sich gerade erst registriert haben, werden Sie direkt zur Seite Erste Schritte mit New Relic Servers weitergeleitet.

Auf dieser Seite finden Sie spezifische Anweisungen für die verschiedenen Umgebungen. Wählen Sie diejenige aus, die zu Ihrem Server passt. Für das in diesem Tutorial verwendete Amazon Linux-Setup verwenden wir die Option Red Hat oder CentOS.

Get started with New Relic ServersGet started with New Relic ServersGet started with New Relic Servers

Scrollen Sie nach unten und beenden Sie die Installation gemäß den Anweisungen, die Ihrer Serverumgebung entsprechen.

Im Fall von Amazon Linux fügen Sie zunächst das New Relic yum-Repository hinzu. Beachten Sie, dass dies als root erfolgen muss, daher verwenden wir sudo.

Verwenden Sie als Nächstes das hinzugefügte Yum-Repository, um das Server Monitor-Package zu installieren:

Auch hier sorgt der Parameter -y dafür, dass yum auf jede Eingabeaufforderung mit Ja antwortet. Wenn Sie vorsichtiger sein möchten, können Sie darauf verzichten und die Eingabeaufforderungen manuell akzeptieren.

Um die Installation abzuschließen, konfigurieren Sie den Überwachungsagenten und legen Sie Ihren Lizenzschlüssel fest. Auf der Seite Erste Schritte mit New Relic Servern finden Sie eine Version des Befehls mit Ihrem Lizenzschlüssel. Denken Sie daran, dem Befehl sudo voranzustellen.

Bevor wir den Monitoring-Daemon starten, weichen wir ein wenig von den Setup-Anweisungen auf der New Relic Servers-Seite ab und nehmen ein paar zusätzliche Konfigurationen für das Docker-Monitoring vor.

Schritt 2: Docker-spezifische Konfiguration anwenden

Damit New Relic zunächst Daten über Ihr Docker-Setup sammeln kann, fügen Sie den newrelic-Benutzer der Docker-Gruppe auf Ihrem Server hinzu:

Starten Sie dann Docker neu.

Beachten Sie, dass es eine gute Idee ist, zuerst alle laufenden Container zu stoppen, um den Neustart ordnungsgemäß durchzuführen und sicherzustellen, dass nichts in Ihren Containern kaputt geht.

Sobald der Neustart abgeschlossen ist, sind wir fertig und Sie können den Serverüberwachungs-Daemon starten.

Die Einrichtung für den New Relic Server Daemon ist nun abgeschlossen. Starten Sie die Docker-Container erneut und Sie sehen bald Informationen zu Ihrem Server im Dashboard des Tools.

Schauen wir uns an, was Sie dort finden können.

Was werden Sie in New Relic Servern finden?

Klicken Sie in New Relic auf den Menüpunkt Server, um die Serverliste neu zu laden. Wenn alles gut gelaufen ist, sollten Sie jetzt Ihren Server aufgelistet sehen:

The server listing now shows our new serverThe server listing now shows our new serverThe server listing now shows our new server

Klicken Sie auf den Namen des Geräts, um weitere Informationen zu diesem anzuzeigen. Wenn noch keine Daten angezeigt werden, geben Sie dem Tool etwas Zeit und versuchen Sie es erneut.

Als erstes sehen Sie die Übersichtsseite.

Überblick

Auf der Übersichtsseite sieht alles so aus wie auf einer New Relic Servers Übersichtsseite bei der Überwachung eines regulären Servers ohne Docker.

The New Relic Servers overview pageThe New Relic Servers overview pageThe New Relic Servers overview page

Es gibt die CPU-Auslastung, die durchschnittliche Last des Servers, die Menge des verwendeten physischen Speichers, einige Informationen über die Festplatten-E/A und die Netzwerkauslastung. Da wir den Server gerade erst gestartet haben und keine Benutzer die Site besuchen, sind die meisten dieser Zahlen noch niedrig.

Wenn Sie sich die Liste der Prozesse unten rechts ansehen, werden Sie feststellen, dass Docker tatsächlich auf diesem Server läuft:

The list of processes show Docker running on the serverThe list of processes show Docker running on the serverThe list of processes show Docker running on the server

Die Docker-Image-Ansicht

Der Gesamtüberblick ist wichtig, wenn man über den Zustand des Servers als Ganzes nachdenkt, aber jetzt interessiert uns wirklich, was wir über das Docker-Setup lernen können. Der interessantere Teil von Servers ist dafür das Docker-Menü.

Klicken Sie links auf den Docker-Menüpunkt.

The Docker Images view on New Relic ServersThe Docker Images view on New Relic ServersThe Docker Images view on New Relic Servers

Der Docker-Bildschirm zeigt den Prozentsatz der Serverressourcen, die Ihre Docker-Container verwenden, gruppiert nach ihren Images.

In diesem Fall sehen Sie beispielsweise die beiden Bilder wordpress:latest und mysql/mysql-server:5.5, die wir in den vorherigen Schritten zum Starten unserer beiden Container verwendet haben. Es gibt nicht viel Aktivität auf dem Server, aber wir können sehen, dass WordPress mehr CPU beansprucht und beide ungefähr die gleiche Menge an Arbeitsspeicher verwenden.

Sie können die Dropdown-Liste in der oberen linken Ecke verwenden, um die Liste entweder nach CPU oder Speicher zu sortieren.

Später, wenn Ihre Anwendung ausgereift ist, erfahren Sie anhand der Ergebnisse dieser Seite mehr über Ihr Setup und was Sie damit tun sollten.

Wenn Sie beispielsweise feststellen, dass MySQL einen Großteil des Speichers und der Verarbeitungsleistung des Systems beansprucht, ist es möglicherweise ein guter Zeitpunkt, es auf einen eigenen dedizierten Server zu verschieben. Oder vielleicht werden Sie feststellen, dass auf dem Server mehr WordPress-Container laufen, als wirklich passen, und sich entscheiden, sie in zwei Teile aufzuteilen...

Ein genauerer Blick auf ein Docker-Image

Wenn Sie mehr über ein bestimmtes Bild erfahren möchten, klicken Sie auf seinen Namen in der Liste links. Dadurch wird eine Ansicht geöffnet, die nur Informationen zu den Containern anzeigt, die dieses Bild verwenden.

A closer look at the WordPress imageA closer look at the WordPress imageA closer look at the WordPress image

Der Bildschirm zeigt Ihnen die CPU- und Speichernutzung von Containern, die dieses Bild verwenden, und die Anzahl der Container im Zeitverlauf.

Um zu sehen, wie sich das Hinzufügen weiterer Container auf die Ansicht auswirkt, fügen Sie ein paar weitere WordPress-Container hinzu. Wir verwenden den gleichen docker run-Befehl wie zuvor, mit ein paar kleinen Änderungen:

  • Die neuen Container werden wordpress-2 und wordpress-3 heißen.
  • Die neuen Container verwenden die Datenbanken wordpress_2 und wordpress_3.
  • Die neuen Container hören auf verschiedene Ports, 8000 und 8001 statt 80.

Hier sind die beiden Ausführungsbefehle mit den Änderungen aus der obigen Liste:

Um auf Amazon auf die neuen WordPress-Sites zugreifen zu können, müssen Sie die Sicherheitsgruppen-Einstellungen Ihrer EC2-Instance noch bearbeiten, um eingehenden Datenverkehr von den Ports 8000 und 8001 zuzulassen. Verwenden Sie die Option Benutzerdefinierte TCP-Regel und wählen Sie Überall als Datenverkehrsquelle aus.

Besuchen Sie nun die beiden neuen WordPress-Sites und klicken Sie auf einige ihrer Menüpunkte.

Kehren Sie dann zu New Relic Servers zurück, um zu sehen, wie sich die Daten auf der Docker-Seite geändert haben.

Die erste und sichtbarste Änderung ist die Anzahl der ausgeführten Container. Statt einem sind es jetzt drei:

The Containers graph show the change in the number of running containersThe Containers graph show the change in the number of running containersThe Containers graph show the change in the number of running containers

Die CPU- und Speicherauslastung ist immer noch gering – obwohl die Speicherauslastung zunimmt:

CPU and memoery usage after adding two more WordPress containersCPU and memoery usage after adding two more WordPress containersCPU and memoery usage after adding two more WordPress containers

Hinzufügen von Unterstützung für New Relic APM in Ihren Docker-Containern

Bisher haben wir uns die Docker-Container von außen betrachtet, durch ihre Ressourcennutzung und wie sie aussehen, wenn sie vom Server aus untersucht werden, auf dem sie ausgeführt werden.

Aber auch wenn diese Server-Ansicht für Docker nützliche Gesamtinformationen über Ihren Server und die darin ausgeführten Funktionen liefert, liegt die wahre Stärke von New Relic in seinem Application-First-Ansatz: Durch die Überwachung der Anwendungsebene können Sie detailliertere Informationen darüber erhalten, was auf Ihrem Server passiert und was Sie dagegen tun können.

Wenn Sie den PHP-Code direkt auf Ihrem Webserver ausführen, installieren Sie normalerweise einfach den APM-Überwachungsagenten. Als Beispiel dafür können Sie sich rechts auf dem Server ansehen, auf dem Sie die Anwendung ausführen (wie wir es in dem zuvor erwähnten New Relic Alerts-Tutorial getan haben).

Jetzt sind die Dinge etwas anders: Wir haben die Architektur in separate Teile – „Microservices“ – aufgeteilt, die jeweils in ihren eigenen Containern ausgeführt werden, sodass der Hostserver selbst weder Apache noch PHP ausführt. Wenn Sie den APM-Agenten direkt auf dem Hostserver installieren, würden Sie daher keinerlei Aktivität sehen.

Die Überwachung muss in die Container gehen.

Schritt 1: Erstellen Sie Ihre eigene Version des WordPress-Images

Eine der großartigen Eigenschaften von Docker ist die Möglichkeit, auf vorhandenen Images aufzubauen, sie als Basis zu verwenden und sie zu Ihren eigenen zu machen, ohne das Originalimage ändern oder ein neues von Grund auf neu schreiben zu müssen.

Wir werden das WordPress-Image, das wir zuvor im Tutorial verwendet haben, ändern, indem wir die New Relic-Überwachung darin aktivieren.

Sie können die Quelldatei für das Docker-Image aus dem verknüpften GitHub-Repository herunterladen oder selbst erstellen, indem Sie den Anweisungen in diesem Tutorial folgen. Wenn Sie mit diesem Beispiel arbeiten, ist es wahrscheinlich am einfachsten, dies direkt auf Ihrem Server zu tun.

Erstellen Sie zunächst ein Verzeichnis für die neue Image-Definition, beispielsweise im Home-Verzeichnis von ec2-user.

Fügen Sie dann in diesem Verzeichnis eine neue Textdatei mit dem Namen Dockerfile hinzu. Dies ist die Datei, die die Definition dessen enthält, was in Ihr Docker-Image geht.

Fügen Sie in der Datei den folgenden Code hinzu. Wir gehen den Inhalt direkt nach dem Snippet Zeile für Zeile durch.

Lassen Sie uns nun die Datei durchgehen und sehen, was sie tut.

Zeile 1: Die Datei beginnt mit der Angabe des Docker-Images, auf dem unser Image aufgebaut werden soll. Ich habe eine bestimmte Version des wordpress-Bildes ausgewählt, damit, wenn wir dieses Bild nach einer Weile erneut erstellen, es sich zwischendurch nicht geändert hat. 4.3.1-apache ist zum Zeitpunkt der Erstellung die neueste Version.

Zeilen 3–5: Fügen Sie ein Skript zum Initialisieren des New Relic-Monitors hinzu. Das Skript wird beim Containerstart ausgeführt, sodass wir damit den Namen und den Lizenzschlüssel der Anwendung für jeden Container separat definieren können.

Wir werden uns den Inhalt dieser Datei im nächsten Schritt ansehen.

Zeilen 7–8: Wenn Sie sich den Code, der das WordPress-Basisimage definiert, genau ansehen, werden Sie feststellen, dass das Skript apache-entrypoint.sh, das so definiert ist, dass es als ENTRYPOINT ausgeführt wird, mit einer Zeile endet, die den im CMD übergebenen Befehl ausführt Option (standardmäßig ist dies apache2-foreground).

Die Zeile sieht so aus:

Da ich das ursprüngliche "Entrypoint"-Skript nicht ersetzen wollte, sondern es durch Aufrufen des oben erwähnten neuen run.sh-Skripts beenden musste, beschloss ich, die ENTRYPOINT-Datei zur Kompilierzeit zu bearbeiten: den sed-Befehl (on line 8) ersetzt die obige exec-Zeile durch einen exec-Befehl, der stattdessen run.sh ausführt.

Zeilen 10–11: Dies ist wahrscheinlich nicht etwas, was Sie in einer Produktionsumgebung wünschen. Zum Testen ist es jedoch sehr praktisch, eine einfache PHP-Datei einzubinden, mit der wir überprüfen können, ob New Relic korrekt eingerichtet wurde.

Stellen Sie sicher, dass Sie auch eine Datei namens test.php mit folgendem Inhalt erstellen:

Zeilen 13–20: Dies ist der Teil, in dem wir das New Relic-Überwachungspaket in das Image installieren.

Wenn Sie sich die Installationsanweisungen auf der Seite Erste Schritte mit New Relic von New Relic ansehen (die erste Seite, die Sie sehen, wenn Sie nach der Anmeldung die APM-Option auswählen), werden Sie feststellen, dass die Befehle in diesen Zeilen der Installation genau folgen Anweisungen für die Debian-Umgebung. Dies liegt daran, dass das Standard-WordPress-Image auf einem Image basiert, das Debian verwendet.

Zuerst installiert das Skript wget und verwendet es, um den New Relic-Schlüssel herunterzuladen und zu APT hinzuzufügen.

Als nächstes fügt das Skript das New Relic-Repository zu APT hinzu.

Und schließlich installiert es in den Zeilen 19 und 20 das Package newrelic-php5 aus diesem Repository.

Zeilen 22–25: Die New Relic-Installationsanweisungen auf der Seite Erste Schritte mit New Relic fahren mit dem Abschließen der Installation und dem Einsetzen des Lizenzschlüssels fort.

Da der Lizenzschlüssel und der Anwendungsname ziemlich containerspezifische Informationen sind, können wir diesen letzten Schritt nicht in das Image aufnehmen. Sein Platz ist nur beim Start in unserem run.sh-Skript.

Um dies vorzubereiten, definiert das Skript drei Umgebungsvariablen:

  • NR_INSTALL_SILENT: Diese Variable, falls vorhanden (und auf einen beliebigen Wert gesetzt), bewirkt, dass das New Relic-Installationsskript alle Benutzeraufforderungen überspringt und stattdessen Standardwerte verwendet.
  • NR_INSTALL_KEY: Dieser gibt den Lizenzschlüssel an. Da wir keinen Lizenzschlüssel in der Image-Definition fest codieren möchten, ist er vorerst auf **ChangeMe** gesetzt. Diese Variable wird auch automatisch vom Installationsskript gelesen.
  • NR_APP_NAME: Dies ist eine Variable, die ich selbst hinzugefügt habe und die im run.sh-Skript verwendet wird, um die Konfiguration des New Relic-Daemons so zu bearbeiten, dass der tatsächliche Anwendungsname des Containers anstelle des Standardnamens verwendet wird ("PHP-Application").

Schritt 2: Erstellen Sie das benutzerdefinierte Startskript

Wenn das Dockerfile fertig ist, müssen wir noch das oben erwähnte Startskript run.sh implementieren. Das Skript beendet die Einrichtung von New Relic und startet erst dann den Server, jetzt mit der Überwachung von New Relic.

Erstellen Sie die Datei und fügen Sie den folgenden Code hinzu:

Gehen wir nun den Code Zeile für Zeile durch.

Zeile 1: Geben Sie an, dass das Skript mit dem Bash-Interpreter ausgeführt werden soll.

Zeile 2: Geben Sie an, dass das Skript beendet werden soll, wenn ein Fehler auftritt.

Zeilen 4–5: Führen Sie das New Relic-Installationsskript aus. Beachten Sie, dass wir keine Parameter übergeben müssen, da die Konfiguration mit Umgebungsvariablen erfolgt. NR_INSTALL_SILENT wurde bereits im Dockerfile angegeben und NR_INSTALL_KEY sollte mit dem docker run-Befehl übergeben werden.

Zeilen 7–8: Da das Installationsskript keine Umgebungsvariable zum Angeben des Namens der Anwendung hat, müssen wir die Konfiguration in diesem Skript manuell – oder eigentlich programmgesteuert – bearbeiten.

In der Konfigurationsdatei wird der Anwendungsname wie folgt angegeben:

Der Befehl sed in Zeile 8 sucht nach diesem String und ersetzt ihn durch eine Version, die den in NR_APP_NAME definierten Namen enthält.

Zeile 10: Um den Startvorgang abzuschließen, rufen Sie schließlich apache2-foreground auf, um Apache im Vordergrund auszuführen und den Container am Laufen zu halten. Wie Sie sich von früher erinnern, geschah dies ursprünglich am Ende des Einstiegspunktskripts.

Jetzt sind alle Teile zur Erweiterung des WordPress-Images mit New Relic Monitoring vorhanden. Wir können jetzt das Image erstellen und es ausprobieren.

Schritt 3: Kompilieren und führen Sie das neue Image aus

Geben Sie in dem Verzeichnis, in dem Sie die in den letzten beiden Schritten erstellten Dateien abgelegt haben, den folgenden Befehl ein:

Dadurch wird ein neues Image namens tutsplus/wordpress-newrelic mit dem Tag 4.3.1-apache erstellt und Ihrem lokalen Docker-Image-Repository hinzugefügt.

Sobald der Build abgeschlossen ist, ist es an der Zeit zu sehen, ob alles ordnungsgemäß funktioniert.

Stoppen und entfernen Sie zunächst Ihre vorhandenen WordPress-Container:

Führen Sie dann neue aus, beginnen Sie mit nur einem und fügen Sie weitere hinzu, sobald Sie überprüft haben, dass alles reibungslos läuft.

Der Befehl ist größtenteils derselbe, den wir zuvor beim Starten des Standard-WordPress-Images gesehen haben, mit den folgenden Änderungen:

-e NR_INSTALL_KEY="YOUR KEY HERE": Hier geben Sie den New Relic Lizenzschlüssel an, der im Installationsskript verwendet werden soll. Sie finden Ihre, indem Sie auf die Seite Erste Schritte mit New Relic von APM gehen und die PHP-Option auswählen.

Auf dieser Seite, direkt vor der Installationsanleitung, befindet sich eine rote Schaltfläche mit der Aufschrift Lizenzschlüssel anzeigen. Klicken Sie darauf und ersetzen Sie dann YOUR KEY HERE durch den angezeigten Schlüssel.

Get your license keyGet your license keyGet your license key

-e NR_APP_NAME="wordpress-cloud": Dieser Teil des Befehls legt die Umgebungsvariable fest, die zum Angeben des Namens der Anwendung verwendet wird. Dieser Name wird verwendet, um die Daten in APM zu gruppieren.

Der "richtige" Wert für den Namen eines Containers hängt von Ihrem Setup und davon ab, wie Sie ihn überwachen möchten. Wenn auf allen Ihren Containern Teile derselben Anwendung ausgeführt werden, ist es sinnvoll, für sie denselben Namen zu verwenden und sie alle in derselben Ansicht im Überwachungstool zu sammeln. Auf der anderen Seite, wenn die Container klar voneinander getrennt sind, sind eindeutige Namen der richtige Weg. In diesem Beispiel habe ich mich entschieden, für alle drei Container denselben Namen, wordpress-cloud, zu verwenden.

Ausführlichere Informationen zur Benennung Ihrer Anwendungen finden Sie in der New Relic-Dokumentation.

tutsplus/wordpress-newrelic:4.3.1-apache: Am Ende des Befehls werden Sie feststellen, dass wir jetzt das neu erstellte Bild anstelle von wordpress:latest verwenden.

Sobald Sie den Befehl ausgeführt haben und Ihr Server gestartet ist, besuchen Sie die WordPress-Testseite, um zu überprüfen, ob der Server läuft und New Relic enthalten ist. Sie können auch den Wert von newrelic.appname überprüfen.

The PHP test page showing New Relic configurationThe PHP test page showing New Relic configurationThe PHP test page showing New Relic configuration

Dann können Sie wieder zur Hauptseite gehen, um zu finden, dass WordPress in Ordnung ist. Sie haben jetzt einen Docker-Container, auf dem WordPress ausgeführt wird und dessen Status an New Relic APM gemeldet wird.

Fügen Sie die verbleibenden beiden Container wordpress-2 und wordpress-3 hinzu, und werfen wir einen Blick auf die Daten, die wir in APM finden.

Was werden Sie in New Relic APM finden? 

Nachdem Sie nun die Überwachung für jeden Ihrer Docker-Container eingerichtet haben, werfen wir einen Blick auf die Informationen, die wir in APM zu ihnen finden.

Da wir alle drei WordPress-Container mit demselben Namen hinzugefügt haben, finden Sie beim Öffnen der APM-Seite nur diese eine Anwendung, wordpress-cloud. Wenn Sie Ihren Mauszeiger über dem Namen der Anwendung platzieren, sehen Sie ein Popup mit der Meldung "PHP-Anwendung läuft auf 3 Hosts (3 Instanzen)."

APM showing our Docker based applicationAPM showing our Docker based applicationAPM showing our Docker based application

Klicken Sie auf den Namen, um auf die Analysedaten für diese Anwendung und ihre Container zuzugreifen.

Übersicht

Die erste Ansicht, die Sie in APM sehen, ist Übersicht. Diese Seite zeigt eine Zusammenfassung der Leistung aller Container in dieser Anwendung: wie lange Anfragen an die Anwendung im Durchschnitt dauern, den Apdex-Score der Anwendung, ihren Durchsatz und eine Liste der langsamsten Transaktionen der Anwendung.

Overview of the wordpress-cloud applicationOverview of the wordpress-cloud applicationOverview of the wordpress-cloud application

Am unteren Bildschirmrand finden Sie eine Zusammenfassung der Struktur der Anwendung: Auf welchen Servern sie ausgeführt wird und welche Container darin verwendet werden.

In einer komplexeren, realen Anwendung sehen Sie möglicherweise mehrere Server sowie mehrere Container. Jetzt finden Sie unsere drei WordPress-Container. Da wir New Relic nicht in das Datenbank-Image installiert haben, können wir es in dieser Liste nicht sehen.

Filtern von Daten nach Container

Ähnlich wie auf der Übersichtsseite zeigen Ihnen die restlichen Bildschirme in APM standardmäßig eine Zusammenfassung der Leistung der gesamten Anwendung in den verschiedenen darin dargestellten Metriken.

Wenn Sie jedoch einen Drilldown zu einem bestimmten Container durchführen möchten, können Sie jederzeit über das Dropdown-Menü oben auf dem Bildschirm den gewünschten Container auswählen:

Dropdown menu to choose a specific containerDropdown menu to choose a specific containerDropdown menu to choose a specific container

Wenn Sie sich nicht sicher sind, was die verschiedenen Servercodes in dieser Liste bedeuten, können Sie mit dem Befehl docker ps die Zuordnung zwischen diesen Docker-IDs und Ihren Containern ermitteln.

Finden und Beheben von PHP-Fehlern in Docker-Containern

APM ist nicht nur nützlich, um die Leistung Ihrer webbasierten Anwendung zu verfolgen. Es ist auch eine große Hilfe, um zu erkennen, wenn in Ihrer Anwendung etwas schief geht, und die Probleme zu lokalisieren.

Um dies in einer Docker-basierten Umgebung zu testen, habe ich ein einfaches WordPress-Plugin erstellt, absichtlich ein paar Fehler in den Code eingefügt und es auf einem der Container installiert. Dann, nachdem ich die Site eine Weile durchsucht hatte, sah ich Folgendes auf der Fehler-Seite in APM:

The Errors page shows the applications errorsThe Errors page shows the applications errorsThe Errors page shows the applications errors

Wenn Sie sich das Bild ansehen, sehen Sie schnell, dass die Fehlerquote in Ihrer Anwendung steigt.

Unterhalb des Diagramms finden Sie eine Liste der letzten Fehler: ein dreimal aufgetretener Syntaxfehler und eine Division durch Null, die an verschiedenen Stellen im Code aufgetreten ist. Beide müssen angesprochen werden, aber schauen wir uns zunächst den ersten an.

Wenn Sie auf die Fehlermeldung klicken, gelangen Sie auf eine Seite mit weiteren Informationen zum Fehler:

More information about the errorMore information about the errorMore information about the error

Wenn Sie sich diesen Bildschirm ansehen, sehen Sie, dass der Fehler in einem der Docker-Container 402c389c0661 auftritt, der zufällig die ID von wordpress-3 ist, dem Container, in dem ich das defekte Plugin installiert habe.

Nachdem wir nun den Container gefunden haben, in dem der Fehler auftritt, können wir den Stack-Trace verwenden, um das Problem zu beheben und eine funktionierende Version des Plugins auf den betroffenen Container zu aktualisieren. Problem gelöst.

Schlussfolgerung

Sie haben nun ein einfaches Docker-basiertes Webserver-Setup implementiert und die Überwachung von New Relic darauf aktiviert. Sie haben auch gesehen, wie Sie die Überwachungstools verwenden können, um einen besseren Einblick in die Docker-basierte Anwendung zu erhalten.

Wir haben jedoch nur die Oberfläche dessen angekratzt, was Sie mit den New Relic-Überwachungstools tun können. Wenn Sie also noch kein New Relic-Benutzer sind, werfen Sie einen Blick auf die Docker-Monitoring-Seite bei New Relic und legen Sie los.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.