DevOps-Überwachung
Steigere das Bewusstsein in jeder Phase der Delivery-Pipeline
Krishna Sai
Head of Engineering, IT Solutions
Von DevOps wird erwartet, dass Lösungen schneller entwickelt, regelmäßig getestet und häufiger veröffentlicht werden, während gleichzeitig die Qualität verbessert und die Kosten gesenkt werden. Um dies zu erreichen, bieten DevOps-Überwachungstools Automatisierung, erweiterte Messfunktionen und Sichtbarkeit während des gesamten Entwicklungslebenszyklus: von Planung, Entwicklung, Integration und Testen bis hin zu Deployment und Betrieb.
Der moderne Software Development Life Cycle ist schneller als je zuvor, weil mehrere Entwicklungs- und Testphasen gleichzeitig stattfinden. Daraus ist DevOps entstanden. Der Begriff bezieht sich auf eine Verlagerung von isolierten Teams für Entwicklungs-, Test- und Betriebsfunktionen zu einem einheitlichen Team, das alle Funktionen und das Konzept "you build it, you run it" (YBIYRI) übernimmt.
Da häufige Codeänderungen heute alltäglich sind, benötigen Entwicklerteams eine DevOps-Überwachung, die eine umfassende Ansicht der Produktionsumgebung in Echtzeit bietet.
Was ist DevOps-Überwachung?
Die DevOps-Überwachung umfasst die Überwachung des gesamten Entwicklungsprozesses von Planung, Entwicklung, Integration und Testen bis hin zu Deployment und Betrieb. Sie beinhaltet eine vollständige Echtzeit-Ansicht des Status von Anwendungen, Services und Infrastrukturen in der Produktionsumgebung. Funktionen wie Echtzeit-Streaming, Wiedergabe historischer Daten und Visualisierungen sind wichtige Komponenten der Anwendungs- und Serviceüberwachung.
Lösung anzeigen
Optimiere Vorfallmanagement und Incident Response
Zugehöriges Material
Erfahre mehr über DevOps-Tools
Die DevOps-Überwachung ermöglicht es Teams, schnell und automatisch auf eventuelle Verschlechterungen des Kundenerlebnisses zu reagieren. Noch wichtiger ist, dass Teams in früheren Entwicklungsstadien testen und fehlerhafte Produktionsänderungen minimieren können. Ein Beispiel ist die bessere Instrumentierung von Software zur Erkennung und Behebung von Fehlern, was sowohl manuell über Bereitschaftsdienste als auch (wenn möglich) automatisch erfolgen kann.
DevOps-Überwachung oder Observability
Betrachte die linke Seite der Endlosschleife als Produktseite und die rechte Seite als Operations-Seite. Dann möchte der Produktmanager, der ein neues Feature in die Produktion einbringt, sehen, wie sich das Projekt in Aufgaben und User Storys aufteilen lässt. Der Entwickler auf der linken Seite des Projekts muss sehen, wie das Feature in die Produktion verschoben werden kann, einschließlich Projekttickets, User Storys und Abhängigkeiten. Wenn Entwickler sich an das DevOps-Prinzip "you build it, you run it" halten, sind sie auch an der Behebung von Vorfällen interessiert.
Was den Operations-Aspekt des Lebenszyklus angeht, muss sich der Site Reliability Engineer mit den Services auskennen, die gemessen und überwacht werden können. Sollte bei diesen ein Problem bestehen, kann dieses behoben werden. Ohne eine DevOps-Toolkette, die all diese Prozesse miteinander verbindet, entsteht eine unordentliche, unkorrelierte und chaotische Umgebung. Wenn deine Toolkette gut integriert ist, erhältst du einen besseren Kontext zu den ablaufenden Prozessen.
Die Bedeutung der DevOps-Überwachung
Ein DevOps-Ansatz erweitert die kontinuierliche Überwachung auf die Staging-, Test- und sogar die Entwicklungsumgebungen. Dafür gibt es zahlreiche Gründe.
Häufige Codeänderungen erfordern Sichtbarkeit
Die häufigen Codeänderungen, die durch Continuous Integration/Deployment (CI/CD) vorangetrieben werden, haben das Tempo der Änderungen erhöht und die Produktionsumgebungen zunehmend komplexer gemacht. Mit dem Einzug von Microservices und Micro-Frontends in moderne native Cloud-Umgebungen gibt es Hunderte und manchmal Tausende von verschiedenen Workloads in der Produktion, die jeweils unterschiedliche betriebliche Anforderungen in Bezug auf Skalierung, Latenz, Redundanz und Sicherheit haben.
Aus diesem Grunde musste eine bessere Sichtbarkeit erreicht werden. Teams müssen nicht nur eine Beeinträchtigung des Kundenerlebnisses erkennen und darauf reagieren, sondern dies muss auch zeitnah erfolgen.
Automatisierte Zusammenarbeit
DevOps erfordert implizit eine stärkere Zusammenarbeit zwischen den Entwicklungs-, Operations- und Geschäftsfunktionen in Teams. Die Zusammenarbeit kann jedoch durch eine mangelnde Integration zwischen Tools behindert werden, was zu Problemen bei der Koordination mit verschiedenen Teams führt. Dies war eine der wichtigsten Erkenntnisse aus der DevOps-Umfrage von Atlassian.
Du kannst die Zusammenarbeit durch Praktiken automatisieren, etwa indem du einen vollständigen Überblick über die Entwicklungs-Pipeline im Editor erhältst. Du kannst außerdem Automatisierungsregeln festlegen, die Commits oder Pull-Anfragen abhören, dann den Status zugehöriger Jira-Vorgänge aktualisieren und Nachrichten an den Slack-Channel des Teams senden. Zudem kannst du von Einblicken profitieren, die Scan-, Test- und Analyseberichte liefern.
Experimente
Kundenbedürfnisse ändern sich aufgrund von Personalisierungen und optimierten Konversionstrichtern. Daher besteht die Notwendigkeit, Produkte zu optimieren, um auf diese Bedürfnisse zu reagieren, was zu ständigen Experimenten führt. Produktionsumgebungen können Hunderte von Experimenten und Feature-Flags ausführen. Dies macht es für Überwachungssysteme schwierig, die Ursache für eine verschlechterte Kundenerfahrung zu ermitteln.
Die zunehmenden Anforderungen an ständig verfügbare Services und Anwendungen sowie strenge SLAs können Anwendungen anfälliger machen. Entwicklerteams müssen deshalb sicherstellen, dass sie Service Level Objectives (SLOs) und Service Level Indicators (SLI) definieren, die überwacht und eingehalten werden.
Änderungsmanagement
Da die meisten Produktionsausfälle durch Änderungen verursacht werden, ist das Änderungsmanagement insbesondere für unternehmenskritische Anwendungen wie in der Finanz- und Gesundheitsbranche unerlässlich. Mit Änderungen verbundene Risiken müssen ermittelt und die Genehmigungsabläufe entsprechend dem Risiko der Änderung automatisiert werden.
Der Umgang mit diesen komplexen Problemen erfordert ein umfassendes Verständnis und eine Überwachungsstrategie. Dies wiederum erfordert die Definition und Einführung von Überwachungspraktiken und eine Reihe umfassender, flexibler und fortschrittlicher Überwachungstools, die für die Entwicklungsprozesse entscheidend sind.
Überwachung abhängiger Systeme
Verteilte Systeme sind keine Seltenheit mehr und bestehen oft aus vielen kleineren, unternehmensübergreifenden Services. Teams müssen jetzt nicht nur die von ihnen erstellten Systeme überwachen, sondern auch die Leistung und Verfügbarkeit abhängiger Systeme überwachen und verwalten. Amazon Web Services (AWS) bietet mehr als 175 Produkte und Services, darunter Tools für Computing, Speicher, Netzwerke, Datenbanken, Analysen, Deployment, Management, Mobilgeräte und Entwicklung. Wenn du deine Anwendung auf AWS erstellst, musst du sicherstellen, dass du den richtigen Service für die Anforderungen deiner Anwendung auswählst. Außerdem benötigst du eine Instrumentierung und Strategien, um auch verteilte Fehler zu verfolgen und Ausfälle abhängiger Systeme zu beheben.
Hauptfunktionen der DevOps-Überwachung
Gemäß der DevOps-Tradition erfordert die Entwicklung und Implementierung einer Überwachungsstrategie auch die Beachtung der Kernpraktiken sowie eine Reihe von Tools.
Shift-Left-Tests
Shift-Left-Tests, die zu einem früheren Zeitpunkt im Lebenszyklus durchgeführt werden, tragen dazu bei, die Qualität zu erhöhen, die Testzyklen zu verkürzen und Fehler zu reduzieren. DevOps-Teams sollten unbedingt ihre Praktiken für Shift-Left-Tests erweitern, um den Zustand von Vorproduktionsumgebungen zu überwachen. So wird sichergestellt, dass die Überwachung frühzeitig und häufig durchgeführt wird, um sowohl die Kontinuität während der Produktion als auch die Qualität der Überwachungsmeldungen aufrechtzuerhalten. Tests und Überwachung sollten miteinander einhergehen, wobei eine frühzeitige Überwachung dazu beiträgt, das Verhalten der Anwendung während der wichtigsten Benutzerabläufe und -transaktionen zu bewerten. Dadurch lassen sich auch Abweichungen bei der Leistung und Verfügbarkeit vor dem Produktions-Deployment erkennen.
Warnmeldungs- und Vorfallmanagement
In der Cloud gehören Vorfälle ebenso dazu wie Fehler im Code. Zu diesen Vorfällen zählen Hardware- und Netzwerkausfälle, Fehlkonfigurationen, erschöpfte Ressourcen, Dateninkonsistenzen und Softwarefehler. DevOps-Teams sollten mit Vorfällen rechnen und über hochwertige Überwachungslösungen verfügen, um darauf zu reagieren.
Hier sind einige Best Practices, die dabei helfen:
- Schaffe eine Kultur der Zusammenarbeit, in der neben Feature-/Funktionstests und automatisierten Tests auch Überwachung während der Entwicklung eingesetzt wird.
- Integriere während der Entwicklung geeignete, aussagekräftige Warnmeldungen in den Code, um die mittlere Zeit bis zur Erkennung (MTTD) und die mittlere Zeit bis zur Isolierung (MTTI) zu minimieren.
- Erstelle Monitore, um sicherzustellen, dass abhängige Services wie erwartet funktionieren.
- Reserviere Zeit für die Erstellung erforderlicher Dashboards und die Schulung aller Teammitglieder in deren Verwendung.
- Plane Ernstfälle für den Service, um sicherzustellen, dass die Monitore wie erwartet funktionieren und fehlende Monitore erkannt werden.
- Plane während der Sprints, Aktionen aus früheren Vorfallprüfungen abzuschließen, insbesondere Maßnahmen im Zusammenhang mit der Erstellung fehlender Monitore und der Automatisierung.
- Erstelle Detektoren für Sicherheit (Upgrades/Patches/Rolling Credentials).
- Fördere die Denkweise, dass alles gemessen und überwacht werden muss, wobei die Reaktion auf erkannte Warnmeldungen durch Automatisierung bestimmt wird.
DevOps-Überwachungstools
Eine Reihe solider Überwachungspraktiken werden durch fortschrittliche Tools ergänzt, die sich an der DevOps/YBIYRI-Kultur orientieren. Dies erfordert eine sorgfältige Identifizierung und Implementierung von Überwachungstools, zusätzlich zu den bekannten Entwicklertools wie Code-Repositorys, IDEs, Debugger und Fehlerverfolgung sowie Continuous Integration- und Deployment-Tools.
Eine zentrale Ansicht bietet einen umfassenden Überblick über die verschiedenen Anwendungen, Services und Infrastrukturabhängigkeiten – nicht nur in der Produktion, sondern auch beim Staging. Dies bietet die Möglichkeit, komplexe verteilte Umgebungen bereitzustellen, zu erfassen, zu kennzeichnen, anzuzeigen und deren Zustand zu analysieren. Zum Beispiel enthält das interne PaaS-Tool Micros von Atlassian ein Tool namens Microscope, das alle Informationen über Services in übersichtlicher Form bereitstellt.
Die Überwachung der Anwendungsleistung ist unerlässlich, um sicherzustellen, dass neben den typischen Systemmetriken wie CPU- und Speicherauslastung auch die anwendungsspezifischen Leistungsindikatoren, wie die Zeit zum Laden einer Seite, Latenzen nachgelagerter Services oder Übergänge, überwacht werden. Tools wie SignalFX und NewRelic eignen sich hervorragend, um Metrikdaten in Echtzeit zu beobachten.
Implementiere verschiedene Arten von Monitoren, etwa zur Überwachung von Fehlern, Transaktionen, Synthetik, Heartbeats, Warnmeldungen, Infrastruktur, Kapazität und Sicherheit während der Entwicklung. Stelle sicher, dass jedes Teammitglied in diesen Bereichen geschult ist. Diese Monitore sind oft anwendungsspezifisch und müssen entsprechend den Anforderungen der jeweiligen Anwendung implementiert werden. Beispielsweise implementiert unser Opsgenie-Entwicklerteam synthetische Monitore, die eine Warnmeldung oder einen Vorfall erstellen und prüfen, ob der Warnmeldungsablauf wie erwartet ausgeführt wird (d. h. ob Integrationen, Routing und Richtlinien ordnungsgemäß funktionieren). Wir implementieren auch synthetische Monitore für Infrastrukturabhängigkeiten, die die Funktionalität verschiedener AWS-Services regelmäßig überprüfen.
Implementiere ein Warnmeldungs- und Vorfallmanagementsystem, das sich nahtlos in die Tools deines Teams (z. B. Protokollmanagement, Crash-Reporting usw.) integrieren lässt, damit es sich ganz natürlich in den Entwicklungs- und Operations-Rhythmus deines Teams einfügt. Das Tool sollte wichtige Warnmeldungen mit möglichst geringen Latenzzeiten an deine bevorzugten Benachrichtigungskanäle senden. Es sollte auch die Möglichkeit bieten, Warnmeldungen zu gruppieren, um sie zu filtern, insbesondere wenn eine Vielzahl an Warnmeldungen aufgrund eines einzigen Fehlers oder Ausfalls generiert wird. Wir bei Atlassian bieten Opsgenie nicht nur als Produkt an, das diese Funktionen für unsere Kunden bereitstellt, sondern nutzen es auch intern, um sicherzustellen, dass wir über ein robustes, flexibles und zuverlässiges Warnmeldungs- und Vorfallmanagementsystem verfügen, das in unsere Entwicklungspraktiken integriert ist.
Fazit
Bei der Einführung von DevOps muss sichergestellt werden, dass neben den Tests auch die Überwachung frühzeitig stattfindet und die Praktiken und Tools eingesetzt werden, um das Versprechen des DevOps-Ansatzes zu erfüllen: Änderungen schnell und mit hoher Qualität in die Produktion zu überführen.
Weitere Informationen zum Thema DevOps, Vorfallmanagement und Änderungsmanagement findest du in diesen zusätzlichen Ressourcen von Atlassian.
Diesen Artikel teilen
Nächstes Thema
Lesenswert
Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.