APM, das Monitoring der Anwendungsleistung, und Logging ermöglichen essenzielle Einblicke in Ihr Ökosystem. Werden die so gewonnenen Informationen mit Kontext zusammengeführt, lassen sich daraus entscheidende Schlussfolgerungen für die Lösung konkreter Anwendungsprobleme ziehen.
Je komplexer die zu analysierenden Logdaten sind, desto schwieriger kann es mit den herkömmlichen Tools werden, zu den relevanten Stellen zu gelangen. Mit Elastic Observability (mit dem Elastic Stack im Rücken) ist das Korrelieren von Logdaten mit APM so einfach wie ein paar Klicks in Kibana. Über Ihre Webanwendung können Sie ohne viel Aufwand die Logdaten für eine konkrete Anforderung eines Nutzers bei einer beliebigen Transaktion einsehen.
Aufrufen von Trace-Logdaten in Elastic APM
Unten sehen Sie einen Screenshot von Elastic APM mit einer Aufschlüsselung aller Operationen, die mit einer bestimmten Transaktion verbunden sind. Wenn wir auf Actions klicken
und Show trace logs auswählen,
erhalten wir Folgendes:
Diese Meldungen enthalten zusätzliche Details, die zu dieser konkreten Transaktion gehören. So detailreich kann nur ein Log sein, da weder in APM noch anderswo beim Monitoring genügend Platz dafür ist. Da der Elastic Stack diese verschiedenen Facetten des Monitorings in sich integriert, haben wir nun ausreichend Flexibilität, was das Hinzufügen zusätzlicher Details zu unseren Transaktionen angeht. Die Tatsache, dass alle diese unterschiedlichen Datentypen in einem gemeinsamen Datenspeicher residieren, ermöglicht es uns, unsere Untersuchungen schnell zu pivotieren.
Installieren und Konfigurieren des Elastic APM-Python-Agents
Vielleicht sagen Sie sich: „Das ist ja alles schön und gut, aber wie schaffe ich es, bei mir im System ähnliche Ergebnisse zu erzielen?“
Ich zeige Ihnen anhand eines Beispiels, wie Sie Logdaten und APM-Traces integrieren können. Unten sehen Sie den relevanten Code aus der Python-Anwendung, die in den Screenshots oben zu sehen ist. Wir brauchen eine Möglichkeit, jeder Anforderung, die Nutzer an unsere Anwendung senden, Informationen hinzuzufügen.
Aber schön der Reihe nach: Zunächst einmal müssen wir den Elastic APM-Python-Agent installieren. Wir fügen ihn als Abhängigkeit hinzu. Es handelt sich hierbei um eine Flask-Anwendung, was durch den Zusatz [flask]
in eckigen Klammern zum Namen der Abhängigkeit deutlich wird. Details zu den einzelnen unterstützten Frameworks können der Dokumentation für den Python-Agent entnommen werden.
# In requirements.txt elastic-apm[flask]==5.3.3
Als Erstes müssen wir dafür sorgen, dass wir die richtigen Importe vorliegen haben:
# In app.py import logging from elasticapm.contrib.flask import ElasticAPM from elasticapm.handlers.logging import Formatter
Anschließend konfigurieren wir den Python-Agent so, dass er Informationen an den APM-Server sendet:
# In app.py app = Flask(__name__) # Anwendung wie üblich initialisieren app.config['ELASTIC_APM'] = { 'SERVICE_NAME': 'foodbankhero', # Benutzerdefinierte URL für den APM-Server festlegen (Standard: http://localhost:8200) 'SERVER_URL': 'http://localhost:8200' # Zu verwenden, wenn APM-Server ein Token benötigt # Der APM-Server kann aus Sicherheitsgründen ein Token benötigen, um zu verhindern, dass er von Dritten mit Zufallsdaten zugeschüttet wird. # 'SECRET_TOKEN': '' } apm = ElasticAPM(app) # Das ist die magische Zeile, die unsere Flask-Anwendung mit APM instrumentiert.
Konfigurieren Ihrer Logs
Jetzt gehts daran, die Logs so zu konfigurieren, dass sie mit APM-Traces korreliert werden können, wie in den Screenshots oben gezeigt:
# In app.py fh = logging.FileHandler('foodbankhero.log') # Wir haben vorher einen individuellen Formatter aus dem Python-Agent importiert. formatter = Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") fh.setFormatter(formatter) logging.getLogger().addHandler(fh) # … irgendwo tief drin in der Anwendung ... logging.getLogger().info(‘Foodbank {} needs {} items’.format(id, len(items))) logging.getLogger().info(‘Returning {} foodbank records’.format(len(results)))
Ihre Logs müssten jetzt ungefähr so aussehen:
2020-05-12 01:57:14,029 - flask.app - INFO - 172.22.0.1 - - [12/May/2020 01:57:15] "GET / HTTP/1.1" 200 - | elasticapm transaction.id=f31f884b961a6089 trace.id=02bd57be0eff9979c94951d0d53e80c0 span.id=None
Bei dieser Konfiguration wird jede Logzeile für jede Anforderung durch Tracing-Informationen ergänzt. Das gilt sogar für Anforderungen von statischen Assets (sofern die Anwendung so konfiguriert ist, dass sie sie bedient). Dazu ein Beispiel:
2020-05-12 01:57:14,029 - werkzeug - INFO - 172.22.0.1 - - [12/May/2020 01:57:14] "GET /favicon.ico HTTP/1.1" 404 - | elasticapm transaction.id=f31f884b961a6089 trace.id=02bd57be0eff9979c94951d0d53e80c0 span.id=None
Elastic APM selbst ausprobieren
Möchten Sie traditionelle Silos aufbrechen und Probleme durch Kontext schneller lösen? Mit Elastic Observability können Sie Daten ganz einfach korrelieren und blitzschnell zur jeweils erforderlichen Stelle navigieren.
Erleben Sie mit eigenen Augen, wie einfach es ist, mit Elastic APM loszulegen – alles, was Sie brauchen, um mit dem Senden von Daten an Elasticsearch zu beginnen, sind ein paar zusätzliche Codezeilen in Ihrem Projekt. Nutzen Sie die Möglichkeit, Elastic Cloud kostenlos auszuprobieren, um Ihre Logdaten und APM-Traces miteinander zu korrelieren.