web-dev-qa-db-ja.com

すべてのプログラマが知っておくべきシステム管理者のことは何ですか?

プログラマーとして、私たちはシステム管理者を当然のことと見なす傾向があります。良いシステム管理者がいなかったことが何度かありましたが、皆さんに感謝しています。システム管理者のいない環境に挑戦しているとき、どのような知恵の言葉を私たちに提供できますか?

96
Nathan DeWitt

私はまず始めます:

  1. Always何らかのバックアップシステムがあります。歴史があればなおさらです。
  2. 単一障害点と、障害が発生した場合の対処方法を検討します。
  3. 関係するコンピューターの量によっては、コンピューター間で標準イメージを作成および作成する方法を検討することで、誰もが簡単に生活できるようになります。
  4. 意志何かを設定する方法を忘れたからといって、すべてを文書化します。
  5. セキュリティ更新に遅れないようにしてください。
70
Chealion

<ここに大きな免責事項を挿入>

これらのいくつかは以前に言われましたが、繰り返す価値があります。

ドキュメンテーション:

  • すべてを文書化します。持っていない場合は、レーダーの下のwikiをインストールしますが、必ずバックアップしてください。事実の収集から始めて、ある日、全体像が形成されます。

  • 各論理チャンクの図を作成し、それらを更新し続けます。正確なネットワークマップまたはクラスターダイアグラムによって救われた回数を数えることができませんでした。

  • ビルド方法のコマンドをコピーアンドペーストするだけの場合でも、各システムのビルドログを保持します。

  • システムを構築するときは、アプリをインストールして構成し、機能することをテストして、ベンチマークを実行します。次に、ディスクを拭きます。真剣に。ディスクの前面から最初の1メガバイトを「dd」にするか、そうでなければボックスを起動不可能にします。時計は刻々と過ぎています。ドキュメントがゼロから再構築できることを証明してください(または、さらに良いことに、ドキュメントだけで同僚ができることを証明します)。これは、災害復旧計画の半分を形成します。

  • これで、災害復旧計画の前半が完了しました。残りを文書化します。アプリケーションの状態を元に戻す方法(テープからファイルを復元し、ダンプからデータベースをリロードする)、ベンダー/サポートの詳細、ネットワーク要件、交換用ハードウェアを取得する方法と場所-考えられるものはすべて、システムを元に戻すのに役立ちます。

オートメーション:

  • できる限り自動化してください。 3回行う必要がある場合は、2番目が自動化の開発に費やされ、3番目が完全に自動化されるようにしてください。自動化できない場合は、文書化してください。そこに自動化スイートがあります-それらをあなたのために機能させることができるかどうかを見てください。

モニタリング:

  • アプリケーションの計装は純金です。システムを通過するトランザクションを監視できるため、デバッグとトラブルシューティングが非常に簡単になります。

  • エンドツーエンドのテストを作成して、アプリケーションが生きていることを証明するだけでなく、実際に想定されていることを実行します。警告の目的で監視システムにジャッキできる場合、ポイントはあなたのものです。これは二重の義務を果たします。アプリが機能することを証明するだけでなく、システムのアップグレードが大幅に容易になります(システムレポートの監視が緑色、アップグレードが機能し、帰宅するまでの時間)。

  • ベンチマーク、監視、およびそれを実行するためにすべての正常なすべてのメトリックを収集ベンチマークは、何かが魔法の煙を放出することを期待するタイミングを教えてくれます。監視すると、いつ通知されます。メトリックと統計により、管理を通じて新しいキット(新鮮な魔法の煙)を簡単に入手できます。

  • 監視システムがない場合は、実装します。上記のエンドツーエンドのテストを実際にジャックする場合のボーナスポイント。

セキュリティ:

  • "chmod 777"(別名、すべてのアクセス/特権を付与)は決して解決策ではありません。

  • 「最少」の原則に同意してください。インストールされていない、コピーされていない、またはディスク上に存在している場合でも、侵害されることはありません。 「キッチンシンク」のOSとソフトウェアのインストールにより、ビルドフェーズでの作業が楽になる場合がありますが、最終的にはそれを支払うことになります。

  • サーバー上で開いているすべてのポートが何のためにあるのかを把握します。それらを頻繁に監査して、新しいものが表示されないことを確認します。

  • 侵害されたサーバーをクリーンアップしないでください。最初から再構築する必要があります。新たにダウンロードしたメディアを使用してスペアサーバーに再構築し、バックアップからデータのみを復元するか(バイナリが侵害される可能性があるため)、侵害されたホストを分析のために隔離された場所に複製して、同じキットで再構築できるようにします。これには法的な悪夢が潜んでいるので、法的手段を追求する必要がある場合に備えて、保存の側に誤りがあります。 (注:IANAL)。

ハードウェア:

  • 箱に書かれていることを実行するとは限りません。必要がない場合に備えて、必要なことを実行することを証明します。予想よりも頻繁に「ほぼ機能する」と感じるでしょう。

  • リモートハードウェア管理を無駄にしないでください。シリアルコンソールと消灯管理は必須と見なす必要があります。オプションがなくなったときのために、リモートコントロールされた電源タップのボーナスポイント。

(脇に:午前3時に問題を解決する方法は2つあります。1つは暖かく、パジャマのVPNを介してラップトップで作業する方法、もう1つは厚いジャケットとデータセンター/オフィスへのドライブを使用する方法です。好む。)

プロジェクト管理:

  • プロジェクトのライフサイクルの初日からシステムを保守する人々を巻き込みます。キットのリードタイムとブレインタイムは驚かれることがあり、驚かれるでしょう。そして、プロジェクトの依存関係になる標準や要件があることは間違いありません(すべきですか?)。

  • ドキュメントはプロジェクトの一部です。プロジェクトが終了し、システムがメンテナンスに移行した後は、すべてを書き上げる時間がないので、開始時にスケジュールに含めるようにしてください。

  • 1日目から計画的な陳腐化をプロジェクトに実装し、プロジェクトのドキュメントで指定したスイッチオフ日の6か月前に更新サイクルを開始します。

サーバーは、運用環境での使用に適している場合、定義された有効期間があります。通常、このライフタイムの終了は、ベンダーがキットの更新にかかるコストよりも年次メンテナンスでより多く、または約3年のうちどちらか短い方の料金を請求し始めたときと定義されます。この期間を過ぎると、それらは開発/テスト環境に最適ですが、ビジネスの実行をそれらに依存すべきではありません。 2年半後に環境を再検討することで、新しいキットを注文するために必要な管理と資金調達の輪を切り抜け、古いキットを空の大きなベンダーに送る前にスムーズな移行を実装するための十分な時間を確保できます。

開発:

  • 開発およびステージングシステムが本番環境に似ていることを確認します。 VMやその他の仮想化技術(ゾーン、LDOM、vserver)により、現実世界ではありますがパフォーマンスの高い本番環境のクローンを簡単に作成できます。

バックアップ

  • バックアップしないデータは、不要なデータです。これは不変の法律です。あなたの現実がこれと一致することを確認してください。

  • バックアップは見かけよりも困難です。一部のファイルは開いたりロックされたりしますが、他のファイルは回復の希望を得るには静止する必要があり、これらの問題すべてに対処する必要があります。一部のバックアップパッケージには、エージェントやその他のオープン/ロックされたファイルを処理する方法がありますが、他のパッケージにはありません。データベースをディスクにダンプし、それらをバックアップすることは、「休止」の1つの形式として数えられますが、これが唯一の方法ではありません。

  • テストしない限り、バックアップは役に立ちません。数か月ごとに、ランダムなテープをアーカイブから取り出し、実際にデータが含まれていること、およびデータに一貫性があることを確認します。

最も重要な...

障害モードを選択するか、マーフィーが選択します...そして、マーフィーはスケジュールどおりに動作しません。

障害に備えて設計し、各システムの設計された弱点、それらを引き起こす原因、および回復方法を文書化します。何かがうまくいかないとき、それはすべての違いを生むでしょう。

44
Greg Work

簡単だと思い込まないでください。私は、IISまたはApacheを開発ボックスでセットアップできるため、Webファームを実行できると考えている多くのプログラマーを知っています。ジョブの内容を理解し、調査と計画を行ってください。 sysadminの作業は、アプリを展開するために10分でできる簡単なことだと考えてください。

43
Sam Cogan
  • 良くも悪くも、多くのサーバーやネットワーキング機器は、2番目の家族の子供とよく似ていることを理解してください。 これらは彼らの赤ん坊です。彼らは彼らに傾向を与え、彼らが病気のときに彼らを助け、そして問題がないか警戒して監視します。これはこのようにするべきではありませんが、何年も経ってからしばしばそうなります。機器が正常に動作しない、または期待どおりに動作しないという懸念を伝えるときは、このことを覚えておいてください。また、理解できない返信があった場合は、この世界観でフィルタリングしてみてください。
  • 良い労働条件にあります。奇妙に聞こえるかもしれませんが、金で割った価値はあります。いつの日か、あなたは特別な好意を必要とするでしょう。そしていつの日か、そのシステム管理者は、あなたの人生を少し楽にするために、今回だけは喜んで出ます。
  • その仕事上の関係は双方向です。システム管理者が非常に忙しく、小さなスクリプトやプログラムを書くことで生活を少し楽にすることができるなら、そうしてください!彼らはあなたが知っているよりもそれを感謝します。
  • 非常に明確にしてください。 「これはうんざりする」は「断続的なネットワーク接続を持っていることは少し面倒です、あなたがそれを見ることができますか?」ほど明確ではありません。
  • アプリがスケーリングすると思われる場合は、仮定する前に管理者に問い合わせてください。彼らはあなたが見ないものを「見る」か、あなたが展開しようとしている機器の性能限界について何かを知っているかもしれません。
  • アプリのチューニングが必要であるが、コードの問題ではないように見える場合は、サーバーのパフォーマンスについて適切に質問してください。システム管理者は自分のマシンに愛情を込めて世話をし、彼らが「病気」または「誤動作」しているときは満足しません。うまく質問すると、問題のあるマシンが好転します(または、修理/交換されます)。
  • (他の場所で述べたように)使用する設定と、なぜ使用するかを文書化します。 「チェックボックスXを設定する」または「構成ファイル行Yをコメント解除する」だけでは効果がありません。あなたが知っているすべてのために、次の再起動時にすべてのデータを消去するオプションを設定している可能性があります。
  • 紙に設定を文書化する時間がない場合は、可能であればシステムに文書化してください。設定ファイルを使用すると、これはほぼ標準的な方法です。すべての設定変更は、イニシャル、その設定の予想される効果、および理由whyを使用して日付スタンプを付ける必要があります変更されました(前の箇条書きを参照)。この小さな習慣が、クランチタイムに私のベーコンを2度以上救いました。 「なぜそれをしたのですか?」 「ポリシーXが必須であり、設定YがポリシーXに必要な動作を提供するため」.
  • ビール。またはコーラ。または水。飲み物はいつでも歓迎です。システム管理者になることは喉が渇いた仕事です。
27
Avery Payne

セキュリティは後付けではありません。ハッキングされたアプリはプログラマーを無能に見せることができますが、システム管理者のバックアップの確認、クリーニング、および/または復元に費やされた(少なくとも)失われた週末です。

そのため、バックアップをバージョン管理として扱わないでください。これらはディザスタリカバリ用であり、変更内容を忘れたため、実際にはコードを復元するようには設計されていません。

そして、コードが壊れているためにWindows Updateを盲目的に非難するのをやめます。私はそれが以前にうまくいったことを気にしません、なぜそれが今うまくいかないのか教えてください-それから私たちはそれが誰の欠点であるかを見ることができます。

23
Mark Brackett

ネットワークの問題をデバッグし、sysadminツールを使用してプログラムの実行を監視する方法。システム管理を始めたプログラマーとして、ネットワークが「止まる」と、多くのプログラマーがいかに無力になるかに驚いています。

  • Wireshark、パケットがパケットごとにブラックボックスで実行されるのを監視する
  • ネットワークサービスに直接接続するためのツール:
    • Telnet、netcat、またはsocat TCPまたはUDPを介したプレーン接続の場合
    • OpenSSL暗号化を使用した同じもの(ヒント:openssl s_client -connect target-Host:portいつか)、ネットワークサービスに手動で接続するため
  • Dig(BIND 9パッケージ内)名前解決のデバッグ用
  • 失敗した接続のタイミングやその他の特性に基づいて、ネットワークスタックのどの部分が失敗したかを知ることができる
  • おそらくHTTPFoxやFirebug
17
jhs

問題のトラブルシューティング方法を知っています。

見返りを渡すのは非常に簡単です(たとえば、ネットワークがデータベースとの通信を妨害しているなど)。これはネットワークの障害である可能性がありますが、GoogleまたはSOを使用してアプリの構成に問題がある可能性があるというエラーのあるアプリケーションログが必要です。

誰もがハードウェア、OS、またはネットワークのせいにするのが好きなので、もう少しデューデリジェンスを実践すれば、システム管理者は幸せな人になります。なぜなら、他に何もなければ、何が悪いのかについて特定の方向にそれらを示すことができる可能性があるためです(「ネットワークに問題がある」または同等に役立つ何かを言うのではなく)。

14
Milner

できる限りすべてを文書化します。前回のシステム管理者が「ジョブセキュリティ」のために何かを文書化しないことがかわいいと思った回数や、誰かが出入りしたいと思った回数はわかりません。プログラマーが良いコメントを残すように、システム管理者は文書化する必要があります。トポロジーの図もいいでしょう。

8
Terry

次のプラン。

ソリューションを設計および開発するときは、常に災害復旧計画を念頭に置いてください。停止につながる可能性のある単一障害点を認識します。

7
spoulson

ドキュメンテーション:大げさである必要はありませんが、アプリケーションがどのように機能するか、ビットがどのようにフィットするかを示した図と、すべてがうまくいかない場合に各コンポーネントをテストする方法。サンプルデータと出力はいいです。

要件:どのモジュールに依存していますか?バージョン? OS?

モニタリング:理想的には、開発者はアプリケーションにモニタリング情報とテストを含めることができます。

包装と言えば、包装! VCSからファイルの新しいリビジョンをチェックアウトし、それを多数のサーバーにコピーすることを意味する「デプロイメント」よりも悪いことはありません。多くの場合、プログラマーはソフトウェアの展開の複雑さを理解していません。バージョン管理され、パッケージ化されたソフトウェアがほとんどのOSのバックボーンを形成する理由があります。

簡潔で包括的なドキュメントといくつかのNagiosテストで初めてインストールされたRPMで開発者が私に来た場合、それらは私の新しい親友になるでしょう。

6
markdrayton

これまでに示した17の回答のどれにも、標準ユーザーとしてログオンしたときにアプリケーションが確実に実行されるようにするためのすべてが含まれていることに驚いています。

インストールプロセス以外のアプリケーションは、標準のユーザーアカウントでログオンすると正常に実行されます。

6
Bryan
  • あなたが何をしているのかについて、公式にも非公式にも管理者に相談してください。彼らは通常興味を持ち、早い段階で生産への影響の可能性を表現できます。同意する必要はありませんが、問題の箇所を特定するのに役立ちます。
  • いいえ、サーバー全体を自分で所有することはできません...必要な場合は、技術的に適切かどうかに関係なく、政治的な決定です。政治に取り組みたいのなら、先に進んでください。
  • 本番ハードウェアは、開発サーバーとは外観が異なる場合が多く、ファーム内でも、マシンの仕様は異なります。
  • 生産がどのようにセットアップされるかを学習します。これは、デスクトップで複製を作成できない可能性が高いため、これを行うことで、不適切な仮定を行うことがなくなります。
  • ものをメモリにキャッシュできるからといって、そうする必要があるわけではありません。最初にボトルネックを待ちます(単体テストまたは本番前のパフォーマンステスト)。
  • データベースにデータを貼り付ける場合は、データを読み取り専用データ(水平方向にスケーリングできる)と読み取り/書き込みデータ(通常は垂直方向にのみスケーリングする)に分割する方法について考えてください。
  • データベースにデータを貼り付けている場合、本当にRDBMSである必要がありますか?他のキーと値のペアシステムが他にもあります(netcache)。
  • AJAXは最終的なソリューションですが、見た目は良いですが、監視と自動化の可能性を制限します。使用しないでください。よく考えてください。
4
ericslaw

OK、これは少しうんざりしていますが:

a)コーディングするときは、基盤となるインフラストラクチャに障害が発生する可能性があり、ハッピーハッピーオールウェイズオンランドから来るものではないことを前提とします。またはGoogle。

b)おそらく、あなたが読んだインフラストラクチャのようなものを実装するためのリソースがないので、状況が悪化したときに私たちに安心してください。何をする必要があるかはわかっている可能性がありますが、何らかの理由でまだ発生していません。私たちはあなたのパートナーです!

c)上記のjhsのように、ping、traceroute(または両方を組み合わせる-mtr)、Digなどのインフラストラクチャをトラブルシューティングするためのツールに精通している場合、それは本当に役立ちます。

d)コンピューターをプログラムする場合は、コンピューターがネットワークに接続する方法と、ipconfig/allまたはifconfigの出力を解析できるなどの基本を知っている必要があります。最小限のヘルプでインターネット接続を確立して実行できるはずです。

そうでなければ私はエイブリィがそれをかなり釘付けしたと思う少しのシステム管理者を行う開発者は、金をかける価値があります!しかし、同様に、開発者が物事(バージョン管理などを含む)をどのように行うかを理解しているシステム管理者は、今日の時代には非常に重要です。

これは現在放送中のようです。ブログで開発/運用の関係についての議論が増えていることに気づきました-チェックしてください

TwitterのTwitterを維持

パーティションと戦争

操作で最初にテスト

4
Cawflands

バックアップバックアップバックアップ....バックアップをテストする....常にロールバックの準備ができている

4
trent

これは初心者のプログラマーにのみ当てはまるかもしれませんが、私はすべてのプロジェクトでいくつかのプログラマーと一緒にいくつかのことを扱います。

  1. 「これは私のマシンで動作します」というのは有効な説明ではありません。サーバーで使用するインストールプログラムを作成するか、少なくともサーバーで必要なすべての接続とDLLおよびアドインを文書化するのは、プログラマの責任です。

  2. (私はこれを何度も聞いたので、笑わないでください)私は自分のマシンからサーバー上でexeを実行し、動作します。しかし、サーバー(Citrix、ターミナルサーバーなど)で実行すると機能しません。 dllやocx、およびプログラムに必要なその他のこと、およびそれらがどこにどのように登録されているか、およびプログラムがそれらをどのように使用しているかを理解してください。

これらは単純に思えるかもしれませんが、私は常に対処しています。

ブライアン

4
Brian

あるグループまたは機能が別のグループまたは機能よりも「優れている」わけではなく、お互いに「より大きな頭脳」を必要とするものもありません。私は、両方の側が相手の会社ですべてのプリマドナっぽさを得るのを見てきました-あなたはすべて同じ目標を達成しようとしています-異なるツールを使用するという事実ではなく、これらの類似点に焦点を合わせます。

3
Chopper3

インフラストラクチャアーキテクトはプログラマーになりましたが、将来そのトランザクションをロールバックしたいと思うかもしれません:)

  1. 早く、頻繁に、互いに話し合います。アプリが展開されるインフラストラクチャを管理する担当者と設計をレビューします(それが誰であるかがわかっている場合)。
  2. データ損失はゼロですが、それは開発者とシステム管理者が共有する責任です。繰り返しになりますが、お互いに話をすることがここで役立ちます。
  3. インフラストラクチャスタッフは、非機能要件の決定に関与している必要があります。
  4. ビール(仕事が終わったとき)とピザ(作業中)を手配します。どういうわけか、そのような食品の存在は、私たちの素敵な小さな32 cpuボックスに、あなたがやりたいことをすべて実行させる私たちの能力に影響を与えます:)
2

開発者のシステム管理者であり、私自身も開発者なので、ここで与えられるアドバイスは金だけではなく、企業全体の新しい開発者のための採用文書の一部になるはずです。

私が見たことがない(まだ)説明がないのは、開発者は、有償のプログラムを作成するために使用する製品を本当に知っているべきだということです。 Apacheサーバー、EclipseとVisual Studioのインストール、および開発者のマシン上のデータベースを説明および構成しなければならなかった回数は少し気になります。

2
canadiancreed