Wie kann der Ansible-Einsatz zur Minderung von Unfällen geschützt werden?

12

Vor kurzem hatte der Amazon S3 einen großen Ausfall in der Region USA-Ost-1. Es sieht so aus, als ob es wahrscheinlich durch einen Rechtschreibfehler beim Ausführen eines Wartungs-Playbooks in Ansible oder einem ähnlichen Tool verursacht wurde. Sie können einen Shell-Skript-Wrapper um ansible-playbook legen, um wie folgt auszusehen:

#!/bin/bash
/usr/bin/ansible-playbook "$@" --list-hosts --list-tasks
read -p "Are you sure? (y/n) " answer
test "$answer" = "y" || exit 0
exec /usr/bin/ansible-playbook "$@"

Auf welche andere Weise können Sie jedoch die Sicherheit verbessern und die Wahrscheinlichkeit von Fehlern verringern, die zu einem größeren Ausfall Ihres Unternehmens führen.

Jiri Klouda
quelle
1
Ich wähle diese Frage als Wegthema zu schließen , weil sie besser geeignet sein für unix.stackexchange.com oder superuser.com
Romeo Ninov
4
Infrastruktur als Code ist eine der Schlüsselkomponenten, um Hunderte von Bereitstellungen pro Tag zu erreichen. In der Lage zu sein, die Tools, die diese Geschwindigkeit bieten, vor größeren Ausfällen im Betrieb zu schützen, scheint mir ein relevantes Thema zu sein. Ich könnte mich natürlich irren. Ich schätze Ihre Ansicht jedoch. Möchten Sie an dieser Diskussion über Fragen zu und außerhalb von Themen in Meta teilnehmen?
Jiri Klouda
Zum Beispiel scheint diese Frage als Thema akzeptiert zu werden: devops.stackexchange.com/questions/98/…
Jiri Klouda
Jiri, machen Sie einen Unterschied zwischen Ihrer und anderen Fragen, die Sie erwähnen?
Romeo Ninov
5
Wenn diese Art von Fragen für Superuser geeignet wäre, wäre devops.se nicht erforderlich. Dies ist definitiv ein Thema hier. Operationen und die Minderung menschlicher Fehler bilden den Kern von DevOps.
Evgeny

Antworten:

6

Wir verwenden Jobs in Jenkins, um Bereitstellungen auszulösen. Es stellt sicher, dass der ausgeführte ansible-Befehl unabhängig davon, wer die Bereitstellung ausführt, derselbe ist. Ein schöner Bonus ist die Aufzeichnung der Erstellungsprotokolle, wann Bereitstellungen ausgelöst wurden, wer sie ausgelöst hat und was genau während der Bereitstellung passiert ist.

Es ist sicherlich nicht kinderleicht, aber es ist eine schöne Verbesserung gegenüber dem manuellen Ausführen von Ansible-Playbooks.

Bei größeren / riskanteren Änderungen sollte dies idealerweise mit einer Form des Änderungsmanagements kombiniert werden, sodass Änderungen erst vorgenommen werden, nachdem eine andere Person / ein anderes Team die Änderung und den Ansatz für die Änderung überprüft hat, um potenzielle Probleme frühzeitig zu erkennen und zu lösen.

Außerdem schadet es nie, wenn ein Teamkollege, der die von Ihnen vorgenommenen Änderungen versteht, anwesend ist und zuschaut, während Sie große Änderungen vornehmen, damit er auf Fehler bei der Ausführung der Änderungen achten und diese verhindern kann.

Bradym
quelle
4

Fehlerkategorien

Es gibt zwei Arten, menschliche Faktoren zu betrachten, die zu Problemen und Unfällen führen:

  1. Sie können das menschliche Versagen als Ursache eines Missgeschicks sehen. In diesem Fall ist "menschliches Versagen" unter welcher Bezeichnung auch immer - Verlust des Situationsbewusstseins, Verfahrensverletzung, regulatorische Mängel, Managementmängel - das Ergebnis Ihrer Untersuchung.
  2. Sie können das menschliche Versagen als Symptom für tiefere Probleme sehen. In diesem Fall ist menschliches Versagen der Ausgangspunkt für Ihre Untersuchung. Sie werden untersuchen, wie menschliches Versagen systematisch mit Funktionen der Tools, Aufgaben und der betrieblichen / organisatorischen Umgebung von Personen verbunden ist.

Der erste heißt der menschlicher Ansatz und der zweite als Systemansatz bezeichnet .

Um das Scheitern mit dem menschlichen Ansatz zu erklären, würden Sie das Scheitern suchen und die ungenauen Einschätzungen, falschen Entscheidungen oder schlechten Urteile der Menschen finden.

Um Fehler anhand des Systemansatzes zu erklären, versuchen Sie nicht herauszufinden, wo Menschen falsch gelaufen sind. Finden Sie stattdessen heraus, wie die Einschätzungen und Handlungen der Menschen zu dieser Zeit angesichts der Umstände, die sie umgaben, sinnvoll waren.

Zum Beispiel argumentiert Donald Berwick vom Institute for Healthcare Improvement (IHI), dass eine Verbesserung der Patientensicherheit erforderlich ist Änderungen im Design von Systemen :

... Wir sind Menschen und Menschen irren sich. Trotz Empörung, trotz Trauer, trotz Erfahrung, trotz unserer besten Bemühungen, trotz unserer tiefsten Wünsche werden wir fehlbar geboren und werden es auch bleiben. Vorsicht hilft, aber es bringt uns bei weitem nicht zur Perfektion ... Das Mittel liegt in der Veränderung der Arbeitssysteme. Das Mittel ist im Design. Das Ziel sollte extreme Sicherheit sein. Ich glaube, wir sollten in unseren Krankenhäusern genauso sicher sein wie in unseren Häusern. Aber wir können dieses Ziel nicht durch Ermahnung, Tadel, Empörung und Scham erreichen. Wir können es nur durch eine Verpflichtung zur Veränderung erreichen, so dass normale menschliche Fehler für das Ergebnis irrelevant werden, kontinuierlich gefunden und gekonnt gemildert werden können.

Donald M Berwick. Nicht noch einmal! BMJ 2001


Fehler aus dem System entfernen

Ein guter Weg, um die verschiedenen Arten des Versagens nachträglich zu finden (und zu korrigieren), ist die Suche nach der Grundursache, ohne die Menschen zu beschuldigen. Dies wird oft als "tadellose Obduktion" bezeichnet, und Etsy Code als Craft-Blogpost erweitert das Konzept. Die Leute bei Etsy präsentierten und schrieben mehr darüber in anderen Foren und Blogs.

Um Fehler zu vermeiden, sind einige Kulturmerkmale ein Muss. Verfahren und verschiedene im System erzeugte Artefakte müssen testen, ob ihre Verwendung durch Menschen sehr klar und selbsterklärend ist. Oft sind diejenigen, die kreieren, nicht diejenigen, die konsumieren, was zu einer Unterbrechung und Unklarheit führt. Das System ist dann nicht sicher zu betreiben, da die einzige Person, die alle Annahmen kennt, diejenige ist, die es erstellt hat (und sonst niemand).

Wirksame Kontrollmaßnahmen

Ergreifen Sie wirksame Kontrollmaßnahmen, um den Prozess zu stoppen, wenn ein Fehler auftritt. Dies ist fehlerfrei. Effektive Kontrollmaßnahmen sind Konstruktionsänderungen, die verhindern oder verhindern, dass Prozesse fortgesetzt werden, wenn ein Fehler aufgetreten ist, indem ein Prozessfehler eingeführt wird

Beispiel:

1896 erfand Sakichi Toyoda Japans ersten Webstuhl namens "Toyoda Steam Power Loom". Diese Entwicklung erhöhte die Produktivität um das Zwanzigfache, und die Qualität der Textilien verbesserte sich und löste eine Revolution in der Textilindustrie in Japan aus. Aber hier ist die subtile, aber sehr wichtige Entdeckung und das Prinzip:

Als die Nadel brach, hielt die Maschine an

Sakichi Toyoda schuf eine Innovation für den Webstuhl, die später zu einer der Säulen des Toyota Production System (Lean) wurde. Diese Säule nennen wir jetzt Jidoka, manchmal auch "intelligente Automatisierung mit menschlicher Note" oder "Autonomie" genannt.

Andon (Stopp beim ersten Defekt) und Poka-Yoke (Fehlerprüfung) sind größtenteils spätere Entwicklungen, die ihren Einfluss auf den Webstuhl finden.

Entfernen von Einzelpunktschwächen

Der Begriff Einzelpunktschwäche bezieht sich auf die Schaffung von Redundanzen im System als Ansatz zur Verbesserung der Systemzuverlässigkeit. Redundanz entsteht durch die Erhöhung der Anzahl der am Prozess beteiligten Systeme oder Personen. Mehr Sicherungssysteme oder mehr Überprüfungen (doppelt, dreifach oder mehr) erhöhen die Wahrscheinlichkeit, dass der Prozess korrekt abläuft.

Ein gutes Beispiel dafür ist das "Vier-Augen-Prinzip", das bedeutet, dass "alle Geschäftsentscheidungen und Transaktionen der Genehmigung des CEO und des CFO bedürfen. Da der CFO nicht an den CEO berichtet, gibt es einen unabhängigen Kontrollmechanismus." .

Quelle: https://en.wikipedia.org/wiki/Two-man_rule

Machen Sie Gefahren offensichtlich

Wenn Gefahren offensichtlich oder unmöglich zu erreichen sind, kann der Mensch keine Fehler machen. Beispielsweise ist die Farbcodierung ein gängiger Ansatz, um Fehler offensichtlicher zu machen. Oder wenn Sie an verschiedene Computersteckdosen denken, die nur in die eine und nicht in die andere Richtung usw. eingesetzt werden können.


Einige großartige Bücher sprechen über das Thema, und es wäre keine gute Antwort, ohne sie zu erwähnen:

Evgeny
quelle
1
Eine sehr wichtige Methode, die Sie nicht erwähnen, ist das „Vier-Augen-Prinzip“, das in der Finanzierung angewendet wird - entweder als regulatorische Verpflichtung oder als Schutz. In der Softwareindustrie wird es auf verschiedene Arten implementiert, z. B. durch Codeüberprüfungen, kann aber auch zur Validierung von Befehlen verwendet werden, die sich auf Live-Systeme auswirken.
Michael Le Barbier Grünewald
Ich werde das zum SPW-Prinzip hinzufügen.
Evgeny
1
Tolle Diskussion über Fehler, aber es wird nicht gesagt, wie man sich vor versehentlichen Bereitstellungen schützt.
Alexandre
1
Die Frage fragt speziell nach Ansible. Diese Antwort ist sehr gründlich und gut recherchiert, aber nur einen Schritt vom realen Problem entfernt.
Woodland Hunter
1
@Evgeny Als ich auf Ihre AWS Lambda-Leistungsfrage antwortete, sagte ich zunächst nicht, wie Sie Ihre Tests ausführen sollen, und Sie haben darauf hingewiesen. Sie hatten Recht, und ich habe meine Antwort angepasst. Ich verstehe Leute, die hier Ihre Antwort ablehnen. Ihre Antwort wäre gut für eine Frage zum Thema "Wie können wir Fehler an unserem Arbeitsplatz angehen und reduzieren?". Hier hat OP eine Frage zu Ansible und Sie erwähnen sie nicht einmal. Schlimmer noch, OP gibt einen Hinweis auf die Art der Lösung, nach der er sucht, und Sie gehen in die andere Richtung. Ihre Antwort ist großartig (wirklich), aber nicht für diese Frage.
Alexandre
1

Wie @bradim sagte, ist die Verwendung Ihres CI / CD-Tools zum Initiieren der Bereitstellung anstelle von handbasierten Befehlen normalerweise ein guter Schritt nach vorne, ebenso wie das Hinzufügen von Tests in Ihrer Pipeline, die Ihre Bereitstellungsskripte tatsächlich in Ihrer Staging-Umgebung (oder einer frisch erstellten Umgebung) testen Sie können Fehler früher erkennen.

Ich möchte auch hinzufügen, dass Sie, anstatt Ihre ansible-Skripte direkt aufzurufen, auch Tools wie Ansible Tower in Ihren Flow aufnehmen können, mit denen Sie die Änderungen verfolgen können, die einfacher ausgeführt wurden, und Ihnen einen zusätzlichen Sicherheitsschritt in Ihrem System geben können fließen.

SztupY
quelle