プログラマーとして、私たちはシステム管理者を当たり前だと思う傾向があります。優れたシステム管理者がいなかった数回のおかげで、皆さんが何をしているのか本当に理解できました。システム管理者のいない環境に挑戦するとき、どのような知恵の言葉を提供できますか?
プログラマーとして、私たちはシステム管理者を当たり前だと思う傾向があります。優れたシステム管理者がいなかった数回のおかげで、皆さんが何をしているのか本当に理解できました。システム管理者のいない環境に挑戦するとき、どのような知恵の言葉を提供できますか?
回答:
私は次のことから始めます:
<ここに大きな投稿の免責事項を挿入>
これらのいくつかは以前に言われていますが、繰り返す価値があります。
ドキュメンテーション:
すべてを文書化します。持っていない場合は、レーダー下のwikiをインストールしますが、必ずバックアップしてください。事実の収集から始めて、ある日、全体像が形成されます。
論理チャンクごとに図を作成し、それらを最新の状態に保ちます。正確なネットワークマップまたはクラスター図が私を救った回数を数えられませんでした。
ビルド方法のコマンドをコピーアンドペーストするだけでも、各システムのビルドログを保持します。
システムを構築するときは、アプリをインストールして構成し、動作をテストして、ベンチマークを実行します。次に、ディスクを拭きます。真剣に。ディスクの前面にある最初のメガバイトを「dd」にするか、ボックスをブート不能にします。クロックは刻々と過ぎています:ドキュメントがゼロから再構築できることを証明します(または、さらに良いことには、ドキュメントだけで同僚ができることを証明します)。これは、災害復旧計画の半分を形成します。
これで、災害復旧計画の前半ができました。残りを文書化します。アプリケーションの状態を元に戻す方法(テープからファイルを復元し、ダンプからデータベースをリロードする)、ベンダー/サポートの詳細、ネットワーク要件、交換用ハードウェアを入手する方法と場所-考えられることはすべて、システムのバックアップに役立ちます。
オートメーション:
モニタリング:
アプリケーション計装は純金です。システムを通過するトランザクションを監視できると、デバッグとトラブルシューティングが非常に簡単になります。
エンドツーエンドのテストを作成して、アプリケーションが動作していることを証明するだけでなく、本来の動作を実際に実行します。警告のために監視システムに接続できる場合、ポイントはあなたのものです。これは二重の義務を果たします。アプリが動作することを証明するだけでなく、システムのアップグレードが大幅に簡単になります(システムレポートの監視、アップグレードの実行、帰宅までの時間)。
それを行うためにすべてが正気であるすべての指標をベンチマークし、監視し、収集します。ベンチマークは、いつ何かが魔法の煙を放つことを期待するかを教えてくれます。監視は、いつ発生したかを知らせます。メトリックと統計により、管理を通じて新しいキット(新しい魔法の煙)を簡単に入手できます。
監視システムがない場合は、それを実装します。上記のエンドツーエンドのテストを実際にジャックすると、ボーナスポイントになります。
セキュリティ:
「chmod 777」(別名、すべてのアクセス/特権を付与する)が解決策になることはありません。
「最小ビット」の原則に同意します。インストールされていない、コピーされていない、またはディスク上に存在していない場合、侵害されることはありません。「キッチンシンク」OSとソフトウェアのインストールは、ビルドフェーズ中の生活を楽にするかもしれませんが、最終的には費用を支払うことになります。
サーバー上のすべての開いているポートが何のためにあるかを知っています。頻繁に監査して、新しいものが表示されないようにします。
侵害されたサーバーのクリーニングを試みないでください。ゼロから再構築する必要があります。新しくダウンロードしたメディアを使用して予備サーバーに再構築し、バックアップからデータのみを復元する(バイナリが危険にさらされる可能性があるため)、または同じキットで再構築できるように、危険にさらされたホストを分析用に分離された場所に複製します。これには法的な悪夢がありますので、法的手段を追求する必要がある場合に備えて、保存の側に誤りがあります。(注:IANAL)。
ハードウェア:
箱に書かれていることを何でも行うと思い込まないでください。必要ない場合に備えて、必要なことを行うことを証明してください。予想以上に「ほぼ機能している」と頻繁に言うでしょう。
リモートハードウェア管理を軽視しないでください。シリアルコンソールとライトアウト管理は必須と見なされる必要があります。オプションを使用できない場合のリモート制御の電源タップのボーナスポイント。
(それ以外:午前3時に問題を修正する方法は2つあります。1つは暖かく、パジャマでVPNを介してラップトップで作業する方法、もう1つは厚手のジャケットとデータセンター/オフィスへのドライブです。好む。)
プロジェクト管理:
プロジェクトのライフサイクルの初日からシステムを保守する人を巻き込みます。キットのリードタイムと頭脳の時間には驚かされる可能性があり、プロジェクトの依存関係となる標準や要件があることは疑いの余地がありません。
ドキュメントはプロジェクトの一部です。プロジェクトが閉じられ、システムがメンテナンスに移行した後は、すべてを書き上げる時間はありませんので、開始時にスケジュールに労力として含まれていることを確認してください。
計画された陳腐化を1日目からプロジェクトに実装し、プロジェクトドキュメントで指定したスイッチオフの6か月前に更新サイクルを開始します。
サーバーは、実稼働環境での使用に適している場合、有効期間が定義されています。この有効期間の終了は、通常、ベンダーがキットの更新にかかる費用よりも年間保守で多くの料金を請求し始めるとき、または約3年のうち短い方と定義されます。この後は、開発/テスト環境に最適ですが、ビジネスを実行するためにそれらに頼るべきではありません。2年半で環境を再検討することで、新しいキットを注文するために必要な管理と財務のフープをたどり、古いキットを空の大きなベンダーに送る前にスムーズな移行を実装するための十分な時間が与えられます。
開発:
バックアップ
バックアップしていないデータは、不要なデータです。これは不変の法律です。あなたの現実がこれと一致することを確認してください。
バックアップは見た目よりも困難です。一部のファイルは開いているかロックされていますが、他のファイルは回復の希望を得るために静止する必要があり、これらすべての問題に対処する必要があります。一部のバックアップパッケージには、開いている/ロックされたファイルを処理するエージェントまたは他の方法がありますが、他のパッケージにはありません。データベースをディスクにダンプしてバックアップすることは、「静止」の1つの形式としてカウントされますが、それが唯一の方法ではありません。
バックアップはテストしない限り価値がありません。数か月ごとに、ランダムなテープをアーカイブから取り出し、実際にデータが保存されていること、およびデータの一貫性を確認します。
最も重要な...
故障モードを選択します。そうしないと、マーフィーが...マーフィーがスケジュールどおりに機能しません。
障害に備えて設計し、各システムの設計上の弱点、それらを引き起こすもの、および回復方法を文書化します。何かがうまくいかないとき、それはすべての違いを生むでしょう。
簡単だと思い込まないでください。私は、Webファームを実行できる開発ボックスにIISまたはApacheをセットアップできるからと考えている多くのプログラマーを知っています。ジョブが何を含むのかを理解し、調査と計画を行います。sysadminの作業は、アプリをデプロイするために10分でできる簡単なことだとは思わないでください。
セキュリティは後付けではありません。ハッキングされたアプリはプログラマーを無能に見せることはできますが、システム管理者のバックアップの検証、クリーニング、および/または復元に費やされる週末は(少なくとも)失われます。
その点で、バックアップをバージョン管理として扱わないでください。これらは災害復旧用であり、変更内容を忘れたためコードを復元するようには設計されていません。
また、コードが壊れているためにWindows Updateを盲目的に非難することを止めます。私はそれが前に動作したことを気にしません、なぜ今は動作しないのか教えてください-それから私たちはそれが誰の障害であるかを見ることができます。
ネットワークの問題をデバッグし、sysadminツールを使用してプログラムの実行を監視する方法。システム管理を始めたプログラマーとして、私は多くのプログラマーがネットワーキングが「ただ止まる」と無力になることに驚かされます。
openssl s_client -connect target-host:port
ネットワークサービスに手動で接続するための、暗号化を使用した同じこと(ヒント:しばらく試してください)のOpenSSL問題のトラブルシューティング方法を知ってください。
費用を渡すのは非常に簡単です(たとえば、ネットワークがデータベースとの通信を停止しているなど)。ネットワークの障害である可能性がありますが、GoogleまたはSOを使用してアプリの構成の問題を明らかにする可能性のあるエラーを含むアプリケーションログが必要です。
誰もがハードウェア、OS、またはネットワークを非難するのが好きなので、もう少しデューデリジェンスを実践すれば、システム管理者を幸せな人にすることができます。なぜなら、他に何もなければ、何が間違っているのかを特定の方向に向けることができるかもしれないからです(「あなたのネットワークはひどい」などと言うのとは対照的に)。
ドキュメンテーション:簡単に説明する必要はありませんが、アプリケーションの仕組み、ビットの適合性を示す図、各コンポーネントがすべてうまくいかない場合のテスト方法。サンプルデータと出力は素晴らしいです。
要件:どのモジュールに依存していますか?バージョン?OS?
監視:理想的には、開発者はアプリケーションとともに監視情報とテストを含めるでしょう。
包装といえば、PACKAGING!VCSからファイルの新しいリビジョンをチェックアウトし、それを多数のサーバーにコピーすることを意味する「展開」ほど悪いことはありません。多くの場合、プログラマーはソフトウェアの展開の複雑さを理解していません。バージョン管理され、パッケージ化されたソフトウェアがほとんどのOSのバックボーンを形成する理由があります。
開発者が、簡潔で包括的なドキュメントといくつかのNagiosテストで初めてインストールしたRPMで私に来た場合、彼らは私の新しい親友になるでしょう。
これは初心者のプログラマーにのみ適用されるかもしれませんが、私はすべてのプロジェクトでいくつかのプログラマーといくつかのことを扱っています。
「私のマシンで動作する」というのは有効な表現ではありません。サーバーで使用するインストールプログラムを作成するか、少なくともサーバーで必要となるすべての接続とdllおよびアドインを文書化するのはプログラマの責任です。
(これは何度も聞いたことがありますので、笑わないでください)私は自分のマシンからサーバー上でexeを実行すると動作します。しかし、サーバー(Citrix、Terminal Serverなど)で実行すると機能しません。dllとocx、およびプログラムに必要なもの、それらが登録されている場所と方法、およびプログラムがそれらを使用する方法を理解してください。
これらは単純に見えるかもしれませんが、私は絶えず対処しています。
ブライアン
OK、これは少し不平を言っていますが:
a)コーディングするときは、基盤となるインフラストラクチャに障害が発生する可能性があり、幸福な常設の土地ではないことを想定してください。またはGoogle。
b)おそらくあなたが読んだインフラストラクチャのようなものを実装するためのリソースがないので、物事がダウンしたときに私たちを楽にしてください。何をする必要があるかはわかっていると思われますが、何らかの理由でまだ発生していません。私たちはあなたのパートナーです!
c)上記のjhsのように、ping、traceroute(または両方の組み合わせ-mtr)、digなど、インフラストラクチャのトラブルシューティングを行うツールに十分な知識があると、本当に役立ちます。
d)コンピューターをプログラムする場合、ネットワークへの接続方法、およびipconfig / allまたはifconfigの出力を解析できるなどの基本事項を本当に理解する必要があります。最小限のヘルプでインターネット接続を確立して実行できるはずです。
そうでなければ、エイブリーはそれをほとんど釘付けにしたと思う。ちょっとしたシステム管理者をしている開発者は、自分の体重に見合うだけの価値があります!しかし、同様に、開発者がどのように物事を進めているか(バージョン管理などを含む)を理解するシステム管理者は、この日と時代において非常に重要です。
これは現時点では空中にあるようです。ブログでの開発者と運用者の関係についてのより多くの議論に気づきました-チェックアウト
インフラストラクチャアーキテクトはプログラマーになりましたが、将来そのトランザクションをロールバックしたいと思うかもしれません:)