Empfehlungen für die Instrumentierung einer Anwendung
Gilt für diese Checkliste für azure Well-Architected Framework Operational Excellence:
OE:07 | Entwerfen und implementieren Sie ein Überwachungssystem, um Designentscheidungen zu validieren und zukünftige Design- und Geschäftsentscheidungen zu treffen. Dieses System erfasst und macht betriebstechnische Telemetrie, Metriken und Protokolle verfügbar, die aus der Infrastruktur und dem Code der Workload ausgegeben werden. |
---|
Verwandter Leitfaden: Empfehlungen für das Entwerfen und Erstellen eines Überwachungssystems
In diesem Leitfaden werden die Empfehlungen für die Aktivierung der Observierbarkeit Ihrer Anwendung mithilfe der Instrumentierung beschrieben. Generieren Sie aussagekräftige Telemetrie, die in Ihr Überwachungssystem aufgenommen und integriert werden kann. Mithilfe der Instrumentierung können Sie Informationen sammeln, ohne sich bei einem Remoteproduktionsserver anzumelden, um die Ablaufverfolgung oder das Debuggen manuell durchzuführen. Instrumentierungsdaten umfassen Metriken und Protokolle, mit denen Sie die Leistung bewerten, Probleme diagnostizieren und Arbeitsauslastungsentscheidungen treffen können.
Wichtige Entwurfsstrategien
Um Telemetrie für Ihre Workload zu optimieren, instrumentieren Sie Ihre Anwendung, um die folgenden Daten zu generieren:
Protokolle sind zeitstempelte Datensätze von einzelnen Ereignissen. 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 durch verschiedene Dienste und Komponenten verlä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 Elastic Application Leistungsmonitor ing verwenden, um Ihre Anwendung automatisch zu instrumentieren. Diese Tools erleichtern die Instrumentierung, können aber auch eingeschränkt werden. Wenn Sie ein tool für die automatische Instrumentierung verwenden, können Sie bei Bedarf weitere Funktionen durch manuelle Instrumentierung hinzufügen.
Verwenden von strukturierten Protokollen und Ablaufverfolgung
Verwenden Sie die strukturierte Protokollierung, um Protokolle einfach in Überwachungs- und Analyseplattformen zu integrieren. Instrumentieren Sie Ihre Anwendung so, dass die Ausführlichkeitsebenen geändert werden können. Die ständige ausführliche Protokollierung kann Speicherressourcen verschwenden, daher sollte sie bei Bedarf zur Problembehandlung ein- und ausgeschaltet werden.
Ablaufverfolgungsprotokolle enthalten Textdaten oder Binärdaten, die aus einem Ablaufverfolgungsereignis erstellt werden, wenn die Anwendung ereignisablaufverfolgung für Windows (ETW) verwendet. Systemprotokolle generieren Ablaufverfolgungsprotokollinhalte aus Ereignissen in der Infrastruktur, z. B. dem Webserver. Textprotokollinhalte sind für die Lesbarkeit durch Den Menschen konzipiert. Sie sollten jedoch sicherstellen, dass sie in einem Format geschrieben ist, das auch ein automatisiertes System analysieren kann.
Kategorisieren Sie Protokolle, und verwenden Sie separate Protokolle, um die Ablaufverfolgungsausgabe von jedem betrieblichen Aspekt des Systems aufzuzeichnen. Wenn Sie Ihre Protokolle kategorisieren, können Sie Protokollmeldungen schnell filtern, anstatt eine einzelne langwierige Datei zu verarbeiten. Schreiben Sie niemals Informationen mit unterschiedlichen Sicherheitsanforderungen, z. B. Überwachungsinformationen und Debuggingdaten, in dasselbe Protokoll.
Hinweis
Ein Protokoll kann als Datei im Dateisystem implementiert werden, oder es wird in einem anderen Format gespeichert, z. B. ein BLOB im BLOB-Speicher. Protokollinformationen können auch im strukturierten Speicher gespeichert werden, z. B. Zeilen in einer Tabelle.
Erfassen von Anwendungsmetriken
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 Instanz einer Metrik ist nicht isoliert nützlich, Metriken sollten im Laufe der Zeit erfasst werden. Überlegen Sie, welche Metriken Sie aufzeichnen sollten und wie häufig. Daten, die zu häufig generiert werden, können eine hohe Belastung für das System verursachen, aber die seltenen Datenerfassungen können 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. Die CPU-Auslastung auf einem Server kann z. B. erheblich von Sekunde zu Sekunde variieren, aber eine hohe Auslastung wird nur dann zu einem Problem, wenn sie über viele Minuten konsistent ist.
Vereinfachen der Korrelation zwischen Komponenten
Sie können individuelle leistungsindikatoren auf System- und Systemebene einfach überwachen, Metriken für Ressourcen erfassen und Anwendungsablaufverfolgungsinformationen aus verschiedenen Protokolldateien abrufen. Bei einigen Überwachungen ist die Datenkorrelation während der Analyse- und Diagnosephase in der Überwachungspipeline erforderlich. Diese Daten können mehrere Formen annehmen, und der Analyseprozess muss mit ausreichenden Instrumentierungsdaten versehen werden, um diese verschiedenen Formulare zuzuordnen. Beispielsweise kann eine Thread-ID auf Der Ebene des Anwendungsframeworks eine Aufgabe identifizieren. Innerhalb einer Anwendung kann dieselbe Arbeit der Benutzer-ID für den Benutzer zugeordnet werden, der diese Aufgabe abgeschlossen hat.
Es ist unwahrscheinlich, dass es sich um eine 1:1-Zuordnung zwischen Threads und Benutzeranforderungen bezieht, da asynchrone Vorgänge dieselben Threads für mehrere Benutzer wiederverwenden können. Um Dies weiter zu erschweren, kann eine einzelne Anforderung mit mehr als einem Thread korrelieren, während sie über 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.
Erfassen relevanter Daten
Berücksichtigen Sie die folgenden Punkte, wenn Sie entscheiden, welche Instrumentierungsdaten Sie sammeln müssen.
Lesbare Daten
Stellen Sie sicher, dass informationen, die von Ablaufverfolgungsereignissen erfasst werden, sowohl maschinen- als auch menschlich lesbar sind. Übernehmen Sie gut definierte Schemas für diese Informationen, um die automatisierte Verarbeitung von Protokolldaten über Systeme hinweg zu implementieren und Konsistenz für Vorgänge und Technische Mitarbeiter zu gewährleisten, die die Protokolle lesen.
Fügen Sie die folgenden Umgebungsinformationen in Ihre Daten ein:
- Bereitstellungsumgebung
- Arbeitsmaschine
- Details des Prozesses
- Aufrufliste
Investieren Sie in Rückverfolgbarkeit und Korrelation
Stellen Sie ausreichenden Kontext bereit, z. B. eine Aktivitäts-ID, die einer bestimmten Instanz 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 ausgeführten Rechenarbeit und den verwendeten Ressourcen zu korrelieren. Diese Arbeit kann Prozess- und Maschinengrenzen überschreiten.
Bei der 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
Notieren Sie alle Anforderungen und die Standorte oder Regionen, an denen sie vorgenommen 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. Wichtige Debuginformationen werden häufig aufgrund einer schlechten Ausnahmebehandlung verloren. Erfassen Sie alle Ausnahmedetails, die die Anwendung auslöst, einschließlich innerer Ausnahmen oder anderer kontextbezogener Informationen, z. B. des Aufrufstapels, falls möglich.
Streben nach Datenkonsistenz
Konsistente Daten können Ihnen dabei helfen, Ereignisse zu analysieren und mit Benutzeranforderungen zu korrelieren. Erwägen Sie die Verwendung eines umfassenden und konfigurierbaren Protokollierungspakets zum Sammeln von Informationen. Das Protokollieren von Paketen kann Ihnen helfen, die Abhängigkeit von Entwicklern zu vermeiden, um Ihren Ansatz zu übernehmen, während sie verschiedene Teile des Systems implementieren.
Sammeln Sie Daten, z. B. Eingabe-/Ausgabevolume, Anzahl von Anforderungen und Arbeitsspeicher, Netzwerk und CPU-Auslastung, aus Schlüsselleistungsindikatoren. Einige Infrastrukturdienste bieten eigene Leistungsindikatoren, z. B.:
- Die Anzahl an Verbindungen mit einer Datenbank
- Der Transaktionssatz.
- Die Anzahl der erfolgreichen oder fehlgeschlagenen Transaktionen
Anwendungen können auch eigene Leistungsindikatoren definieren.
Berücksichtigen externer Abhängigkeiten
Protokollieren Sie alle externen Dienstaufrufe. Externe Anrufe können an:
- Datenbanksysteme.
- Webdienste.
- Andere Dienste auf Systemebene, die Teil der Infrastruktur sind.
Notieren Sie Informationen über die Dauer jedes Anrufs und den Erfolg oder Fehler des Anrufs. 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 zum Analysieren von Informationen. Das Schema gibt einen Vertrag an, der die Datenfelder und Typen definiert, die das Telemetriesystem aufnehmen kann. Generalisieren Sie das Schema, um Daten zuzulassen, die von verschiedenen Plattformen und Geräten empfangen werden. 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 in allen Anwendungen ü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 Satz von Ereignissen erzeugen, um eine Reihe allgemeiner Berichte und Analysen in allen Anwendungen zu erstellen. Möglicherweise müssen Sie ein Schema so konfigurieren, dass es benutzerdefinierte Felder zum Erfassen der Details anwendungsspezifischer Ereignisse enthält.
OpenTelemetry ist eine anbieterneutrale Sammlung von APIs, SDKs und anderen Tools. Sie können OpenTelemetry verwenden, um Anwendungen zu instrumentieren und konsistente Telemetrie in allen Sprachen zu generieren. OpenTelemetry ist toolagnostisch, sodass es mit vielen Observability-Plattformen kompatibel ist, einschließlich Open Source- und kommerzielle Angebote. Microsoft verwendet OpenTelemetry als Standardtool für die Instrumentierung.
Optimieren des Instrumentierungscodes
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, während 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.
Zeigen Sie keine vertraulichen Informationen über das System oder persönliche Informationen zu Benutzern an. Beruben Sie diese Informationen, bevor sie protokolliert wird, behalten Sie jedoch alle relevanten Details bei.
Protokollieren Sie alle kritischen Ausnahmen, aber ermöglichen Sie es dem Administrator, die Anmeldung bei Bedarf für weniger Ausnahmen und Warnungen zu aktivieren und zu deaktivieren.
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 alle Protokollierungsaufrufe Feuer- und Vergessen-Vorgänge sind, die den Fortschritt von Geschäftsvorgängen nicht blockieren. Schließen Sie Überwachungsereignisse aus dieser Regel aus, da sie für das Unternehmen kritisch sind.
Stellen Sie sicher, dass die Protokollierung erweiterbar ist und keine direkten Abhängigkeiten von einem konkreten Ziel aufweist.
Stellen Sie sicher, dass die gesamte Protokollierung fehlsicher ist und keine Kaskadierungsfehler auslöst.
Behandeln Sie die Instrumentierung als fortlaufenden iterativen Prozess und überprüfen Sie regelmäßig Protokolle.
Verwenden von Anwendungsprofilen
Implementieren Sie Profilerstellung nur bei Bedarf, da sie einen erheblichen Aufwand für das System aufzwingen kann. Mithilfe der Instrumentierung zeichnet profilieren Sie 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 zu viel Zulasten des Systems verursachen und die Gesamtleistung beeinträchtigen. In diesem Fall ist der Sampling-Ansatz bevorzugt. Wenn Ereignisse allerdings selten auftreten, werden sie bei der Stichprobenentnahme möglicherweise verpasst. In diesem Fall könnte die Profilerstellung der bessere Ansatz sein.
Azure-Erleichterung
Autoinstrumentation ist für viele Arten von Azure und lokalen Anwendungen verfügbar, die mit Application Insights überwacht werden. Die Funktion "Autoinstrumentation" konfiguriert Ihre Anwendung automatisch so, dass sie umfassende Telemetriedaten für Application Insights bereitstellt, und bietet einfachen Zugriff auf Erfahrungen wie das Anwendungsdashboard und die Anwendungszuordnung. Unterstützte Hostingplattformen und Entwicklungssprachen finden Sie unter Unterstützte Umgebungen, Sprachen und Ressourcenanbieter.
Verwandte Links
- Application Insights-Übersicht
- Was ist die automatische Instrumentierung für Application Insights?
- Übersicht über Azure Monitor-Protokolle
- Überblick über Metriken in Azure Monitor
- Sammeln von ETW-Ereignissen für Die Analyse von Azure Monitor-Protokollen
- Empfehlungen für das Entwerfen und Erstellen eines Observability-Frameworks
- Was sind verteilte Ablaufverfolgung und Telemetriekorrelation?
Communitylinks
Checkliste für operative Exzellenz
Lesen Sie den vollständigen Satz von Empfehlungen.