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