Freigeben über


Empfehlungen für die Instrumentierung einer Anwendung

Gilt für diese Empfehlung der Prüfliste "Operational Excellence" für Azure Well-Architected Framework:

OE:07 Entwerfen und implementieren Sie ein Überwachungssystem, um Entwurfsentscheidungen zu überprüfen und zukünftige Entwurfs- und Geschäftsentscheidungen zu treffen. Dieses System erfasst und macht betriebsbezogene Telemetriedaten, Metriken und Protokolle verfügbar, die von der Infrastruktur und dem Code der Workload ausgegeben werden.

Verwandter Leitfaden: Empfehlungen zum Entwerfen und Erstellen eines Überwachungssystems

In diesem Leitfaden werden die Empfehlungen zum Aktivieren der Beobachtbarkeit Ihrer Anwendung mithilfe der Instrumentierung beschrieben. Generieren Sie aussagekräftige Telemetriedaten, die erfasst und in Ihr Überwachungssystem integriert werden können. Mithilfe der Instrumentierung können Sie Informationen sammeln, ohne sich bei einem Remoteproduktionsserver anzumelden, um die Ablaufverfolgung oder das Debuggen manuell auszuführen. Instrumentierungsdaten umfassen Metriken und Protokolle, mit denen Sie die Leistung bewerten, Probleme diagnostizieren und Workloadentscheidungen treffen können.

Wichtige Entwurfsstrategien

Instrumentieren Sie Ihre Anwendung, um die Telemetriedaten für Ihre Workload zu optimieren, um die folgenden Daten zu generieren:

  • Protokolle sind zeitstempelte Datensätze diskreter Ereignisse. Es gibt drei Arten von Protokollen: Nur-Text, strukturiert und binär.

  • Mit verteilten Ablaufverfolgungsprotokollen können Sie den Pfad einer Anforderung anzeigen, während sie verschiedene Dienste und Komponenten durchläuft.

  • Metriken sind numerische Werte, die einen Aspekt eines Systems zu einem bestimmten Zeitpunkt beschreiben.

Hinweis

Sie können Tools wie Application Insights, Dynatrace und Die Leistungsüberwachung für elastische Anwendungen verwenden, um Ihre Anwendung automatisch zu instrumentieren. Diese Tools erleichtern die Instrumentierung, können aber auch einschränkend sein. Wenn Sie ein automatisches Instrumentierungstool verwenden, können Sie bei Bedarf weitere Funktionen durch manuelle Instrumentierung hinzufügen.

Protokolle und Verteilte Ablaufverfolgungsprotokolle

Verwenden Sie die strukturierte Protokollierung, um Protokolle einfach in Überwachungs- und Analyseplattformen zu integrieren. Instrumentieren Sie Ihre Anwendung, damit die Ausführlichkeitsebenen geändert werden können. Bei einer konstanten ausführlichen Protokollierung können Speicherressourcen verschwendet werden, sodass sie bei Bedarf zur Problembehandlung ein- und ausgeschaltet werden sollte.

Ablaufverfolgungsprotokolle enthalten Textdaten oder Binärdaten, die aus einem Ablaufverfolgungsereignis erstellt werden, wenn die Anwendung die Ereignisablaufverfolgung für Windows (ETW) verwendet. Systemprotokolle generieren Ablaufverfolgungsprotokollinhalte aus Ereignissen in der Infrastruktur, z. B. dem Webserver. Textprotokollinhalte sind so konzipiert, dass sie von Menschen gelesen werden, aber Sie sollten sicherstellen, dass sie in einem Format geschrieben sind, das auch von einem automatisierten System analysiert werden kann.

Kategorisieren sie Protokolle, und verwenden Sie separate Protokolle, um die Ablaufverfolgungsausgabe jedes betriebsbezogenen Aspekts des Systems aufzuzeichnen. Wenn Sie Ihre Protokolle kategorisieren, können Sie Protokollmeldungen schnell filtern, anstatt eine einzelne lange Datei zu verarbeiten. Schreiben Sie niemals Informationen, die unterschiedliche Sicherheitsanforderungen haben, z. B. Überwachungsinformationen und Debugdaten, in dasselbe Protokoll.

Hinweis

Ein Protokoll kann als Datei im Dateisystem implementiert werden, oder es kann in einem anderen Format gespeichert werden, z. B. als Blob im Blobspeicher. Protokollinformationen können auch in strukturiertem Speicher gespeichert werden, z. B. Zeilen in einer Tabelle.

Metriken

Metriken oder Beispiele sind eine Anzahl von Aspekten oder Ressourcen im System zu einem bestimmten Zeitpunkt mit einem oder mehreren zugeordneten Tags oder Dimensionen. Eine einzelne instance einer Metrik ist isoliert nicht nützlich. Metriken sollten im Laufe der Zeit erfasst werden. Überlegen Sie, welche Metriken Sie wie häufig aufzeichnen sollten. Daten, die zu oft generiert werden, können das System stark belasten, aber die seltene Datenerfassung kann dazu führen, dass Sie die Umstände verpassen, die zu einem signifikanten Ereignis führen. Die geeignete Häufigkeit für die Erfassung von Daten kann von Metrik zu Metrik variieren. Beispielsweise kann die CPU-Auslastung auf einem Server von Sekunde zu Sekunde erheblich variieren, aber eine hohe Auslastung wird nur dann zu einem Problem, wenn sie über viele Minuten konsistent ist.

Informationen zum Korrelieren von Daten

Sie können auf einfache Weise einzelne Leistungsindikatoren auf Systemebene überwachen, Metriken für Ressourcen erfassen und Informationen zur Anwendungsablaufverfolgung aus verschiedenen Protokolldateien abrufen. Für einige Überwachungen sind Datenkorrelationen während der Analyse und Diagnose Phase in der Überwachungspipeline erforderlich. Diese Daten können mehrere Formen annehmen, und der Analyseprozess muss mit ausreichenden Instrumentierungsdaten versehen werden, um diese verschiedenen Formen zuzuordnen. Auf Der Ebene des Anwendungsframeworks kann beispielsweise eine Thread-ID eine Aufgabe identifizieren. Innerhalb einer Anwendung kann die gleiche Arbeit der Benutzer-ID für den Benutzer zugeordnet werden, der diese Aufgabe erledigt.

Es ist unwahrscheinlich, dass es sich um eine 1:1-Zuordnung zwischen Threads und Benutzeranforderungen handelt, da asynchrone Vorgänge die gleichen Threads für mehrere Benutzer wiederverwenden können. Zur weiteren Verkomplizierung kann eine einzelne Anforderung mit mehr als einem Thread korrelieren, während sie durch das System fließt. Ordnen Sie nach Möglichkeit jeder Anforderung eine eindeutige Aktivitäts-ID zu, die als Teil des Anforderungskontexts durch das System weitergegeben wird. Das Verfahren zum Generieren und Einschließen von Aktivitäts-IDs in Ablaufverfolgungsinformationen hängt von der Technologie ab, die zum Erfassen der Ablaufverfolgungsdaten verwendet wird.

Alle Überwachungsdaten sollten auf gleiche Weise mit einem Zeitstempel versehen werden. Notieren Sie aus Gründen der Konsistenz alle Datums- und Uhrzeitangaben mithilfe der Coordinated Universal Time.

Hinweis

Computer, die in verschiedenen Zeitzonen und Netzwerken arbeiten, werden möglicherweise nicht synchronisiert. Verlassen Sie sich nicht nur auf Zeitstempel, wenn Sie Instrumentierungsdaten korrelieren, die mehrere Computer umfassen.

In die Instrumentierungsdaten einzubeziehende Informationen

Berücksichtigen Sie die folgenden Punkte, wenn Sie entscheiden, welche Instrumentierungsdaten Sie sammeln müssen.

Lesbare Daten

Stellen Sie sicher, dass von Ablaufverfolgungsereignissen erfasste Informationen sowohl vom Computer als auch vom Menschen lesbar sind. Übernehmen Sie gut definierte Schemas für diese Informationen, um die automatisierte Verarbeitung von Protokolldaten systemübergreifend zu implementieren und Konsistenz für Betriebs- und Entwicklungsteams zu gewährleisten, die die Protokolle lesen.

Fügen Sie die folgenden Umgebungsinformationen in Ihre Daten ein:

  • Bereitstellungsumgebung
  • Verarbeitungscomputer
  • Details des Prozesses
  • Aufrufliste

Investieren in Rückverfolgbarkeit und Korrelation

Stellen Sie ausreichend Kontext bereit, z. B. eine Aktivitäts-ID, die einer bestimmten instance einer Anforderung zugeordnet ist, damit der Entwickler oder Administrator die Quelle jeder Anforderung ermitteln kann.

Der Datenkontext kann auch Informationen enthalten, die verwendet werden, um eine Aktivität mit der durchgeführten Rechenarbeit und den verwendeten Ressourcen zu korrelieren. Diese Arbeit kann Prozess- und Computergrenzen überschreiten.

Für die Messung sollte der Kontext direkt oder indirekt einen Verweis auf den Kunden enthalten, der die Anforderung verursacht hat. Dieser Kontext stellt wertvolle Informationen über den Anwendungszustand zum Zeitpunkt der Aufzeichnung der Überwachungsdaten bereit.

Erfassen aller relevanten Daten

Zeichnen Sie alle Anforderungen und die Orte oder Regionen auf, in denen sie gestellt werden. Sie können diese Informationen verwenden, um standortspezifische Hotspots zu identifizieren. Außerdem kann mithilfe dieser Informationen ermittelt werden, ob eine Anwendung oder die von ihr verwendeten Daten neu partitioniert werden sollten.

Die Details der Ausnahmen sollten Sie sorgfältig aufzeichnen und erfassen. Aufgrund einer schlechten Ausnahmebehandlung geht häufig wichtige Debuginformationen verloren. Erfassen Sie alle Ausnahmedetails, die die Anwendung auslöst, einschließlich aller inneren Ausnahmen oder anderer kontextbezogener Informationen, z. B. der Aufrufliste, wenn möglich.

Streben nach Datenkonsistenz

Konsistente Daten können Ihnen helfen, Ereignisse zu analysieren und mit Benutzeranforderungen zu korrelieren. Erwägen Sie die Verwendung eines umfassenden und konfigurierbaren Protokollierungspakets, um Informationen zu sammeln. Protokollierungspakete können Ihnen dabei helfen, die Abhängigkeit von Entwicklern zu vermeiden, die Ihren Ansatz übernehmen, da sie verschiedene Teile des Systems implementieren.

Sammeln Sie Daten, z. B. Eingabe-/Ausgabevolume, Anzahl der Anforderungen und Arbeitsspeicher-, Netzwerk- und CPU-Auslastung, aus wichtigen Leistungsindikatoren. Einige Infrastrukturdienste stellen ihre eigenen Leistungsindikatoren bereit, z. B.:

  • Die Anzahl an Verbindungen mit einer Datenbank
  • Die Transaktionsrate.
  • Die Anzahl der erfolgreichen oder fehlgeschlagenen Transaktionen

Anwendungen können auch eigene Leistungsindikatoren definieren.

Berücksichtigen externer Abhängigkeiten

Protokollieren Aller aufrufe externer Dienste. Externe Aufrufe können an Folgendem erfolgen:

  • Datenbanksysteme.
  • Webdienste.
  • Andere Dienste auf Systemebene, die Teil der Infrastruktur sind.

Zeichnen Sie Informationen über die Dauer jedes Anrufs und den Erfolg oder Fehler des Anrufs auf. Wenn möglich, erfassen Sie Informationen über alle Wiederholungsversuche und Fehlversuche für vorübergehende Fehler, die auftreten.

Sicherstellen der Telemetriesystemkompatibilität

In vielen Fällen werden Instrumentierungsinformationen als eine Reihe von Ereignissen generiert und zur Verarbeitung und Analyse an ein separates Telemetriesystem übergeben. Ein Telemetriesystem ist in der Regel unabhängig von einer bestimmten Anwendung oder Technologie.

Telemetriesysteme verwenden definierte Schemas, um Informationen zu analysieren. Das Schema gibt einen Vertrag an, der die Datenfelder und Typen definiert, die das Telemetriesystem erfassen kann. Generalisieren Sie das Schema, um Daten von verschiedenen Plattformen und Geräten zuzulassen. Ein allgemeines Schema sollte Felder enthalten, die für alle Instrumentierungsereignisse relevant sind, z. B.:

  • Ereignisname.
  • Ereigniszeit
  • IP-Adresse des Absenders.
  • Details, die für die Ereigniskorrelation erforderlich sind, einschließlich:
    • Benutzerkennung
    • Geräte-ID
    • Anwendungs-ID

Denken Sie daran, dass viele Geräte Ereignisse für dieselbe Anwendung auslösen können, sodass das Schema nicht vom Gerätetyp abhängig sein sollte. Die Anwendung sollte Roaming oder geräteübergreifende Verteilung unterstützen. Das Schema kann auch relevante Domänenfelder für ein bestimmtes Szenario enthalten, das anwendungsübergreifend üblich ist, z. B.:

  • Informationen zu Ausnahmen.
  • Start- und Endereignisse der Anwendung.
  • Erfolg oder Fehler von Webdienst-API-Aufrufen.

Richten Sie Domänenfelder ein, die denselben Ereignissatz erzeugen, um eine Reihe allgemeiner Berichte und Analysen für alle Anwendungen zu erstellen. Möglicherweise müssen Sie ein Schema so konfigurieren, dass es benutzerdefinierte Felder enthält, um die Details anwendungsspezifischer Ereignisse zu erfassen.

OpenTelemetry ist eine anbieterneutrale Sammlung von APIs, SDKs und anderen Tools. Sie können OpenTelemetry verwenden, um Anwendungen zu instrumentieren und aussagekräftige Telemetriedaten konsistent über Sprachen hinweg zu generieren. OpenTelemetry ist toolunabhängig und daher mit vielen Beobachtbarkeitsplattformen kompatibel, einschließlich Open-Source- und kommerziellen Angeboten. Microsoft verwendet OpenTelemetry als Standardtool für die Instrumentierung.

Empfehlungen zum Instrumentieren von Anwendungen

Die folgende Liste enthält Empfehlungen zum Instrumentieren einer verteilten Anwendung, die in der Cloud ausgeführt wird:

  • Erstellen Sie Protokolle so, dass sie einfach zu lesen und leicht zu analysieren sind. Verwenden Sie die strukturierte Protokollierung, wo möglich.

  • Seien Sie in Protokollmeldungen prägnant und anschaulich.

  • Identifizieren Sie die Quelle des Protokolls.

  • Fügen Sie Zeitstempelinformationen hinzu, wenn jeder Protokolldatensatz geschrieben wird.

  • Verwenden Sie die gleiche Zeitzone und das gleiche Format für alle Zeitstempel.

  • Kategorisieren Sie Protokolle, und schreiben Sie Nachrichten an der entsprechenden Stelle.

  • Geben Sie keine vertraulichen Informationen über das System oder persönliche Informationen über Benutzer an. Bereinen Sie diese Informationen, bevor sie protokolliert werden, aber behalten Sie alle relevanten Details bei.

  • Protokollieren Sie alle kritischen Ausnahmen, aber ermöglichen Sie dem Administrator, die Protokollierung bei Bedarf zu aktivieren und zu deaktivieren, um weniger Ausnahmen und Warnungen zu erhalten.

  • Erfassen und protokollieren Sie darüber hinaus alle Wiederholungslogikinformationen. Diese Daten sind nützlich, um die vorübergehende Integrität des Systems zu überwachen.

  • Verfolgen Sie Aufrufe außerhalb des Prozesses, z. B. Anforderungen an externe Webdienste oder Datenbanken.

  • Vermischen Sie keine Protokollmeldungen mit verschiedenen Sicherheitsanforderungen in derselben Protokolldatei.

  • Stellen Sie sicher, dass es sich bei allen Protokollierungsaufrufen um Feuer-und-Vergessen-Vorgänge handelt, die den Fortschritt von Geschäftsvorgängen nicht blockieren. Schließen Sie Überwachungsereignisse aus dieser Regel aus, da sie für das Unternehmen von entscheidender Bedeutung sind.

  • Stellen Sie sicher, dass die Protokollierung erweiterbar ist und keine direkten Abhängigkeiten von einem konkreten Ziel hat.

  • Stellen Sie sicher, dass die gesamte Protokollierung fehlersicher ist und keine kaskadierenden Fehler auslöst.

  • Behandeln Sie die Instrumentierung als fortlaufenden iterativen Prozess, und überprüfen Sie Protokolle regelmäßig.

Überlegungen

  • Implementieren Sie die Profilerstellung nur bei Bedarf, da das System einen erheblichen Mehraufwand verursachen kann. Mithilfe der Instrumentierung zeichnet die Profilerstellung jedes Mal ein Ereignis auf, z. B. einen Methodenaufruf. Das Sampling zeichnet jedoch nur ausgewählte Ereignisse auf.

  • Profilerstellungsauswahlen können zeitbasiert sein, z. B. einmal alle n Sekunden, oder häufigkeitsbasiert, z. B. einmal alle n Anforderungen. Wenn Ereignisse häufig auftreten, kann die Profilerstellung das System zu stark belasten und die Gesamtleistung beeinträchtigen. In diesem Fall ist der Stichprobenansatz vorzuziehen. Wenn Ereignisse allerdings selten auftreten, werden sie bei der Stichprobenentnahme möglicherweise verpasst. In diesem Fall ist die Profilerstellung möglicherweise der bessere Ansatz.

Azure-Erleichterung

Die automatische Instrumentierung ist für viele Arten von Azure- und lokalen Anwendungen verfügbar, die mit Application Insights überwacht werden. Die Automatische Instrumentierungsfunktion konfiguriert Ihre Anwendung automatisch so, dass sie umfangreiche Telemetriedaten für Application Insights bereitstellt, und bietet einfachen Zugriff auf Erfahrungen wie die Anwendung Dashboard und die Anwendungszuordnung. Informationen zu unterstützten Hostingplattformen und Entwicklungssprachen finden Sie unter Unterstützte Umgebungen, Sprachen und Ressourcenanbieter.

Checkliste für operationale Exzellenz

Weitere Informationen finden Sie im vollständigen Satz von Empfehlungen.