Frage Welche Sysadmin-Dinge sollte jeder Programmierer wissen?


Als Programmierer neigen wir dazu, Systemadministratoren für selbstverständlich zu halten. Die wenigen Male, in denen ich ohne einen guten Systemadministrator auskommen musste, haben mich wirklich dazu gebracht zu schätzen, was ihr tut. Wenn wir uns in eine Umgebung ohne Systemadministrator wagen, welche Worte der Weisheit können Sie uns anbieten?


96


Ursprung




Antworten:


Ich würde anfangen mit:

  1. Immer habe ein Backup-System irgendeiner Art. Noch besser, wenn es eine Geschichte hat.
  2. Berücksichtigen Sie einzelne Fehlerpunkte und wie Sie mit ihnen umgehen sollten, sollten sie fehlschlagen.
  3. Abhängig von der Anzahl der beteiligten Computer wird das Suchen nach einer Möglichkeit, ein Standardbild auf mehreren Computern zu erstellen und zu erstellen, jedem das Leben leichter machen - nein, "es funktioniert auf meinem Computer", weil es ein solches Programm normalerweise nicht installiert hat.
  4. Dokumentiere alles, nur weil du es bist werden vergiss, wie du etwas aufgebaut hast.
  5. Halten Sie sich über Sicherheitsupdates auf dem Laufenden.

70



Ich habe gesehen, wie gute Systemadministratoren alle Schritte dokumentieren, und ich habe angefangen, es selbst zu tun. Sehr hilfreich, in der Tat. - Nathan DeWitt
Betrachten Sie selbstdokumentierende Systeme. Zum Beispiel, warum eine Liste von Hostnamen irgendwo in einer Textdatei oder einem Wiki gespeichert wird, wenn eine gut kommentierte Zonendatei die kanonische Informationsquelle ist. - Dave Cheney
Dave, ist diese gut kommentierte Zone-Datei für alle zugänglich? Wenn ich eine neue Person bin, die an Bord kommt, ist es nicht leichter zu sagen "gehe zu diesem Wiki für alle deine Antworten" statt "alles ist überall dokumentiert. DNS ist in den DNS-Einstellungen dokumentiert. Das whozit ist im whozit dokumentiert Konfigurationsdatei. Die Datenbank ist in der Konfigurationsdatei der Datenbank dokumentiert. " Das scheint mir sehr ... unfreundlich zu sein. - Nathan DeWitt
Nathan, Dave: Der Trick ist natürlich, ein Skript zu verwenden, um das Wiki von der kanonischen Quelle zu aktualisieren. Es hat Wunder für mich bewirkt, es tut mir wirklich leid, dass ich es dort nicht verwenden kann, wo ich arbeite. - Anders Eurenius
Ich würde hinzufügen: Erstellen Sie ein Testsystem. Sie benötigen eine Umgebung, in der Fehler eine Option darstellen. Ich habe Server, auf dem VirtualBox ausgeführt wird, aber ich habe meine persönliche Arbeitsstation verwendet, wenn Server nicht verfügbar sind - Mark Porter


<hier großen Haftungsausschluss einfügen>

Einige davon wurden bereits erwähnt, aber es lohnt sich, dies zu wiederholen.

Dokumentation:

  • Dokumentiere alles. Wenn du keins hast, installiere ein Wiki unter dem Radar, aber achte darauf, dass du es versicherst. Beginnen Sie damit, Fakten zu sammeln, und eines Tages wird sich ein großes Bild bilden.

  • Erstellen Sie Diagramme für jeden logischen Block und halten Sie sie auf dem neuesten Stand. Ich konnte nicht zählen, wie oft eine genaue Netzwerkkarte oder ein Clusterdiagramm mich gespeichert hat.

  • Behalten Sie Build-Protokolle für jedes System bei, auch wenn Sie nur Befehle kopieren und einfügen, um sie zu erstellen.

  • Wenn Sie Ihr System aufbauen, installieren und konfigurieren Sie Ihre Apps, testen Sie es und führen Sie Ihr Benchmarking durch. Jetzt wische die Festplatten ab. Ernst. 'dd' das erste Megabyte von der Vorderseite der Festplatten entfernt oder die Box anderweitig startbar macht. Die Uhr tickt: Beweisen Sie, dass Ihre Dokumentation sie von Grund auf neu erstellen kann (oder, noch besser, beweisen Sie, dass Ihr Kollege nur mit Ihrer Dokumentation arbeiten kann). Dies wird die Hälfte Ihres Disaster Recovery-Plans bilden.

  • Jetzt haben Sie die erste Hälfte Ihres Disaster Recovery Plans, dokumentieren Sie den Rest; wie Sie den Status Ihrer Anwendung zurückbekommen (Dateien von Band wiederherstellen, Datenbanken von Dumps neu laden), Hersteller- / Supportdetails, Netzwerkanforderungen, wie und wo Sie Ersatzhardware bekommen können - alles, was Ihnen dabei einfällt, hilft Ihnen, Ihr System wieder hochzufahren.

Automatisierung:

  • Automatisiere so viel wie du kannst. Wenn Sie drei Mal etwas tun müssen, stellen Sie sicher, dass die zweite für die Entwicklung Ihrer Automatisierung verwendet wird, damit die dritte vollständig automatisiert wird. Wenn Sie es nicht automatisieren können, dokumentieren Sie es. Es gibt Automatisierungssammlungen da draußen - sehen Sie, ob Sie sie für Sie arbeiten lassen können.

Überwachung:

  • Anwendungsinstrumente sind reines Gold. Die Möglichkeit, Transaktionen zu beobachten, die das System passieren, erleichtert das Debugging und die Fehlersuche erheblich.

  • Erstellen Sie End-to-End-Tests, die nicht nur beweisen, dass die Anwendung am Leben ist, sondern wirklich tut, was sie soll. Punkte liegen bei Ihnen, wenn Sie zu Warnzwecken in das Überwachungssystem eingebunden werden können. Dies dient der doppelten Pflicht; Abgesehen davon, dass die App funktioniert, macht sie System-Upgrades erheblich einfacher (Monitoring-System meldet grün, Upgrade funktioniert, Zeit, nach Hause zu gehen).

  • Messen, überwachen und sammeln Sie Metriken für alles, was dazu gehört. Benchmarks sagen Ihnen, wann Sie erwarten, dass etwas den magischen Rauch herauslässt. Überwachung sagt Ihnen wann es ist. Metriken und Statistiken machen es einfacher, ein neues Kit (mit frischem magischen Rauch) durch das Management zu bekommen.

  • Wenn Sie kein Überwachungssystem haben, implementieren Sie eins. Bonuspunkte, wenn Sie tatsächlich die oben genannten End-to-End-Tests durchführen.

Sicherheit:

  • "chmod 777" (aka gewähren alle Zugriffe / Privilegien) ist nie die Lösung.

  • Abonnieren Sie das Prinzip des kleinsten Bits. Wenn es nicht installiert, kopiert oder anderweitig auf der Festplatte gespeichert ist, kann es nicht kompromittiert werden. "Kitchen Sink" Betriebssystem und Software-Installationen können das Leben während der Build-Phase erleichtern, aber Sie bezahlen am Ende für die Strecke.

  • Wissen Sie, wofür jeder offene Port auf einem Server vorgesehen ist. Überprüfen Sie sie regelmäßig, um sicherzustellen, dass keine neuen erscheinen.

  • Versuchen Sie nicht, einen kompromittierten Server zu reinigen. es muss von Grund auf neu aufgebaut werden. Erneutes Erstellen eines Ersatzservers mit frisch heruntergeladenen Medien, Wiederherstellen nur der Daten aus den Sicherungskopien (da die Binärdateien kompromittiert werden können) oder Klonen des kompromittierten Hosts zu einer isolierten Stelle für die Analyse, so dass Sie auf dem gleichen Kit wiederherstellen können. Da ist ein ganzer rechtlicher Albtraum, also irren Sie sich auf der Seite der Konservierung, falls Sie legale Wege gehen müssen. (Anmerkung: IANAL).

Hardware:

  • Niemals davon ausgehen, dass irgendetwas tun wird, was auf der Verpackung steht. Beweisen Sie, dass es tut, was Sie brauchen, nur für den Fall, dass es nicht tut. Sie werden feststellen, dass "es fast funktioniert" häufiger als Sie erwarten würden.

  • Sparen Sie nicht bei Remote-Hardware-Management. Serielle Konsolen und Lights-Out-Management sollten als obligatorisch betrachtet werden. Bonuspunkte für ferngesteuerte Powerstrips für Zeiten, in denen Sie keine Optionen mehr haben.

(Nebenbei bemerkt: Es gibt zwei Möglichkeiten, ein Problem um 3 Uhr morgens zu beheben, eines beinhaltet, warm zu sein, auf einem Laptop über ein VPN im Pyjama zu arbeiten, das andere beinhaltet eine dicke Jacke und eine Fahrt zum Rechenzentrum / Büro bevorzugen.)

Projektmanagement:

  • Beteiligen Sie die Personen, die das System vom ersten Tag des Projektlebenszyklus an verwalten. Die Vorlaufzeiten bei Kit und Brain Time können und werden überraschen, und es gibt keinen Zweifel, dass sie Standards oder Anforderungen haben werden (sollten?), Die zu Projektabhängigkeiten werden.

  • Dokumentation ist Teil des Projekts. Sie werden nie die Zeit haben, das Ganze zu schreiben, nachdem das Projekt geschlossen wurde und das System in die Wartung gewechselt ist. Stellen Sie daher sicher, dass es als Aufwand für den Zeitplan am Anfang enthalten ist.

  • Implementieren Sie die geplante Obsoleszenz vom ersten Tag an in das Projekt und starten Sie den Aktualisierungszyklus sechs Monate vor dem in der Projektdokumentation angegebenen Abschalttag.

Server haben eine definierte Lebensdauer, wenn sie für die Produktion geeignet sind. Das Ende dieser Nutzungsdauer wird normalerweise definiert, wenn der Verkäufer anfängt, mehr in die jährliche Wartung zu investieren, als es kosten würde, um das Kit zu aktualisieren, oder ungefähr drei Jahre, je nachdem, welcher Zeitraum kürzer ist. Nach dieser Zeit sind sie ideal für Entwicklungs- / Testumgebungen, aber Sie sollten sich nicht darauf verlassen, dass sie das Geschäft führen. Wenn Sie die Umgebung nach 2 1/2 Jahren erneut besuchen, haben Sie genügend Zeit, um durch die notwendigen Management- und Finanzrahmen zu springen und eine reibungslose Migration durchzuführen, bevor Sie das alte Kit an den großen Anbieter am Himmel schicken.

Entwicklung:

  • Stellen Sie sicher, dass Ihre Entwicklungs- und Staging-Systeme der Produktion ähneln. VMs oder andere Virtualisierungstechniken (Zonen, LDOMs, V-Server) machen Produktionsklone in der realen Welt einfach, aber einfach.

Sicherungen

  • Daten, die Sie nicht sichern, sind Daten, die Sie nicht möchten. Dies ist ein unveränderliches Gesetz. Stelle sicher, dass deine Realität mit dieser übereinstimmt.

  • Backups sind schwieriger als sie aussehen; Einige Dateien sind offen oder gesperrt, während andere stillgelegt werden müssen, um auf eine Wiederherstellung hoffen zu können, und all diese Probleme müssen angegangen werden. Einige Sicherungspakete verfügen über Agenten oder andere Methoden, mit offenen / gesperrten Dateien umzugehen, andere nicht. Das Auslagern von Datenbanken auf die Festplatte und das Sichern dieser Datenbanken zählt als eine Form des "Stilllegens", aber es ist nicht die einzige Methode.

  • Backups sind wertlos, wenn sie nicht getestet werden. Alle paar Monate ziehen Sie ein zufälliges Band aus den Archiven, stellen Sie sicher, dass es tatsächlich Daten enthält und dass die Daten konsistent sind.

Und am wichtigsten...

Wählen Sie Ihre Ausfallmodi, oder Murphy wird ... und Murphy arbeitet nicht an Ihrem Zeitplan.

Design for failure, dokumentiere die Schwachstellen jedes Systems, was löst sie aus und wie erholt man sie. Es macht den Unterschied, wenn etwas schief geht.


44



+1 Es ist, als ob mir jemand in den Sinn kam - und es war wunderschön - Oskar Duveborn
"Benchmark, Monitor und sammeln Sie Messdaten zu allem, was dazu gehört. Benchmarks sagen Ihnen, wann Sie erwarten, dass etwas den magischen Rauch herauslässt. Überwachung zeigt Ihnen, wann es ist. Metriken und Statistiken machen es leichter, neue Ausrüstung zu bekommen (mit frischer Magie Rauch) durch Management. "  Reines Gold - T.J. Crowder


Gehen Sie nicht davon aus, dass es einfach ist. Ich kenne viele Programmierer, die meinen, nur weil sie IIS oder Apache auf ihrer Dev-Box einrichten können, dass sie eine Webfarm ausführen können. Verstehen Sie, was der Job beinhaltet, und forschen und planen Sie. Denken Sie nicht nur daran, dass die Arbeit mit dem Sysadmin innerhalb von 10 Minuten so einfach ist, dass Sie Ihre App bereitstellen können.


43



+1 dafür. Es ist nicht, weil wir es schaffen aussehen einfach, dass es tatsächlich ist. - Gert M
Als Generalist, der sowohl Admin- als auch Programmierarbeit leistet, verstehe ich Ihre Notlage vollkommen. +1 - Avery Payne
Es geht natürlich auch anders, ich habe ein paar Sysadmin-Typen gefunden, die den Unterschied zwischen der Art von Skripten und kleinen Hilfsprogrammen, die wir alle knacken können, und "echter" Programmierung wirklich nicht verstehen. - Rob Moir
+1 Robert: Oder der Sysadmin sagt "Es ist eine einfache if-Anweisung", um eine schlecht entworfene Netzwerkarchitektur zu umgehen. Gegenseitiger Respekt und Verständnis ist der Schlüssel. - Steven Evers


  • Stellen Sie sich vor, dass viele der Server und / oder Netzwerkgeräte, die sie nutzen, Kindern aus einer zweiten Familie sehr ähnlich sind. Das sind ihre Babys.  Sie pflegen sie, helfen ihnen, wenn sie krank sind, und überwachen sie aufmerksam auf Ärger. Diese sollte nicht so sein, aber nach vielen Jahren, es ist oft. Behalten Sie dies im Hinterkopf, wenn Sie mit Ihren Bedenken über Geräte, die nicht richtig funktionieren oder Erwartungen erfüllen, in Verbindung treten. Und wenn du eine Antwort bekommst, die du nicht verstehst, versuche sie durch diese Weltansicht zu filtern.
  • Gute Arbeitsbedingungen haben. Klingt schäbig, aber es ist sein Gewicht in Gold wert. Eines Tages wirst du einen besonderen Gefallen brauchen. Und eines Tages wird dieser Systemadministrator glücklich sein, alles zu tun, um Ihnen das Leben ein wenig einfacher zu machen, nur dieses eine Mal.
  • Diese Arbeitsbeziehung geht in beide Richtungen. Wenn der Systemadministrator sehr beschäftigt ist, und Sie könnten das Leben ein wenig leichter machen, indem Sie ein kleines Skript oder Programm schreiben, dann tun Sie es! Sie werden es mehr zu schätzen wissen als Sie wissen.
  • Sei sehr klar. "Das ist scheiße" ist nicht so klar wie "eine intermittierende Netzwerkverbindung ist ein bisschen nervig, jede Chance, die man sich ansehen kann?"
  • Wenn du denkst, dass deine App skalieren wird, frage den Administrator vorher angenommen es wird. Sie können etwas "sehen", was Sie nicht wissen, oder etwas über die Leistungsgrenzen der Ausrüstung wissen, auf der Sie arbeiten werden.
  • Wenn Ihre App optimiert werden muss, aber kein Code-Problem auftritt, fragen Sie gut nach, wie die Server funktionieren. Sysadmins kümmern sich liebevoll um ihre Maschinen und freuen sich nicht, wenn sie "krank" oder "schlecht benommen" sind. Gut zu fragen wird eine kränkelnde Maschine umdrehen (oder reparieren lassen).
  • (Wie an anderer Stelle erwähnt) dokumentieren Sie die Einstellungen, die Sie verwenden, und Warum Du benutzt sie. Nur "Checkbox X setzen" oder "Kommentarzeile Y entfernen" hilft nicht. Sie könnten die Option einstellen, die beim nächsten Neustart alle Daten löscht, für alles, was Sie wissen.
  • Wenn Sie nicht die Zeit haben, die Einstellung auf Papier zu dokumentieren, versuchen Sie, sie möglichst im System zu dokumentieren. Bei Konfigurationsdateien sollte dies fast Standard sein - jede Einstellungsänderung sollte mit Datumsstempeln versehen sein, mit Initialen, dem erwarteten Effekt dieser Einstellung und dem Grund Warum es wurde geändert (siehe vorherigen Aufzählungspunkt). Diese kleine Angewohnheit hat meinen Speck mehr als einmal während der Crunch-Zeit gerettet. "Warum haben wir das gemacht?" "Weil wir die Richtlinie X festgelegt haben und die Einstellung Y uns das Verhalten gibt, das wir für die Richtlinie X benötigen."
  • Bier. Oder Cola. Oder sogar Wasser. Getränke sind immer willkommen. Ein Systemadministrator zu sein, ist durstige Arbeit.

27



Für die Dokumentation der Konfigurationsdatei / Änderungsproblem, empfehle ich, alle Konfigurationsdateien in einem Versionskontrollsystem zu setzen. Dies sollte für Programmierer sehr einfach sein, da sie hoffentlich bereits ein solches System für ihren Quellcode verwenden. Wenn sie auch einen Kommentar hinzufügen, wenn sie eine Änderung vornehmen, ist es einfach, in die Geschichte zurückzukehren und zu sehen, was wann geändert wurde und warum. - Anders Sandvig
+1 dafür, wie es "die Schleife schließt" auf Change Management. Großer Vorschlag. - Avery Payne
Hervorragender Vorschlag für klare Fehlermeldungen. Nichts frustriert mich mehr, als nachdem man mir gesagt hat, dass es ein Problem gibt, und da ich weiß, dass es potenziell viele Menschen betreffen könnte, muss ich die Details von einem uninteressierten Programmierer auffrischen - Dave Cheney


Sicherheit ist kein nachträglicher Einfall. Während eine gehackte App den Programmierer inkompetent erscheinen lässt, ist es (zumindest) ein verlorenes Wochenende, das zum Überprüfen, Bereinigen und / oder Wiederherstellen von Sicherungen für einen Systemadministrator benötigt wird.

Behandeln Sie Backups daher nicht als Versionskontrolle. Sie sind für Disaster Recovery gedacht und nicht wirklich darauf ausgelegt, Ihren Code wiederherzustellen, weil Sie vergessen haben, was Sie geändert haben.

Und stoppe blindlings Windows-Updates dafür, dass dein Code kaputt geht. Es ist mir egal, dass es beforte, sag mir, warum es jetzt nicht funktioniert - dann können wir sehen, wessen Schuld es ist.


23





Wie Sie Netzwerkprobleme beheben und sehen, wie Ihr Programm mit sysadmin tools läuft. Als Programmierer, der in der Systemadministration angefangen hat, bin ich erstaunt, wie ohnmächtig viele Programmierer werden, wenn Netzwerkarbeit "einfach aufhört".

  • Wireshark, um zu sehen, wie Ihr Code paketweise in einer Black-Box-Umgebung läuft
  • Tools zum direkten Herstellen einer Verbindung mit Netzwerkdiensten:
    • Telnet, Netcat oder Socat für einfache Verbindungen über TCP oder UDP
    • OpenSSL für die gleiche Sache mit Verschlüsselung (Hinweis: versuchen Sie es openssl s_client -connect target-host:port irgendwann) für die manuelle Verbindung mit Netzwerkdiensten
  • graben (im Paket BIND 9) zum Debuggen der Namensauflösung
  • Anhand des Timings und anderer Merkmale einer fehlgeschlagenen Verbindung können Sie feststellen, welcher Teil des Netzwerkstapels fehlgeschlagen ist
  • Möglicherweise HTTPFox und / oder Firebug

17



+1. Jeder Entwickler, der eine Anwendung schreibt, die von einer soliden Netzwerkleistung abhängig ist, sollte "TCP / IP Illustrated v1" von dem verstorbenen großen W. Richard Stevens lesen, bevor er mit dem Codieren beginnt. - Murali Suriar
Danke für die vielen Upvotes. Es macht mich jahrelang nervös, Programmierer in einem hilflosen Stillstand zu sehen, wenn die zugrunde liegende Vernetzung fehlschlägt. Und heutzutage ist fast jede Programmierung eine Netzwerkprogrammierung. - jhs


Erfahren Sie, wie Sie Probleme beheben können.

Es ist sehr einfach, das Geld zu verschenken (z. B. verhindert Ihr Netzwerk die Kommunikation mit der Datenbank). Möglicherweise liegt es am Fehler des Netzwerks, aber Sie sollten Anwendungsprotokolle mit Fehlern haben, die bei Verwendung von Google oder SO möglicherweise ein Problem in der Konfiguration einer App aufdecken.

Jeder mag es, die Hardware, das Betriebssystem oder das Netzwerk dafür verantwortlich zu machen. Wenn Sie also etwas mehr Sorgfalt üben, werden Sie den Systemadministrator zu einem glücklichen Menschen machen. Denn vielleicht können Sie sie in eine bestimmte Richtung lenken, was falsch sein könnte (im Gegensatz zu "Ihr Netzwerk saugt" oder etwas Ähnliches).


14



Absolut. Ich kann nicht damit anfangen, die Stunden zu zählen, die ich an den falschen Orten nach Problemen gesucht habe, weil die Leute mich in den falsch Richtung - Gert M