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


96

プログラマーとして、私たちはシステム管理者を当たり前だと思う傾向があります。優れたシステム管理者がいなかった数回のおかげで、皆さんが何をしているのか本当に理解できました。システム管理者のいない環境に挑戦するとき、どのような知恵の言葉を提供できますか?

回答:


70

私は次のことから始めます:

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

11
すべての手順を文書化することは、優れたシステム管理者が行うことであり、自分でそれを始めました。本当にとても助かりました。
ネイサン

2
自己文書化システムを検討してください。たとえば、よくコメントされたゾーンファイルが正規の情報源である場合、ホスト名のリストをテキストファイルまたはWikiのどこかに保存するのはなぜですか。
デイブチェニー

3
デイブ、コメントの良いZoneファイルは誰でもアクセスできますか?私が新しい人の場合、「すべての答えがこのwikiに行く」と言われる方が簡単ではありません。構成ファイル。データベースは、データベース構成ファイルに文書化されています。」それは非常に...私には不親切です。
ネイサン

5
Nathan、Dave:もちろん、スクリプトを使用して正規のソースからwikiを更新するのがコツです。それは私にとって不思議に働いた、私は本当に私が今働いている場所でそれを使用できないことを残念に思う。
アンデルスユーレニウス2009年

6
これに追加します:テストシステムを構築します。障害がオプションとなる環境が必要です。私はこのためにVirtualBoxを実行しているサーバーを持っていますが、サーバーが利用できないとき、私は私の個人的なワークステーションを使用していた
マーク・ポーター

44

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

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

ドキュメンテーション:

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

  • 論理チャンクごとに図を作成し、それらを最新の状態に保ちます。正確なネットワークマップまたはクラスター図が私を救った回数を数えられませんでした。

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

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

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

オートメーション:

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

モニタリング:

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

  • エンドツーエンドのテストを作成して、アプリケーションが動作していることを証明するだけでなく、本来の動作を実際に実行します。警告のために監視システムに接続できる場合、ポイントはあなたのものです。これは二重の義務を果たします。アプリが動作することを証明するだけでなく、システムのアップグレードが大幅に簡単になります(システムレポートの監視、アップグレードの実行、帰宅までの時間)。

  • それを行うためにすべてが正気であるすべての指標をベンチマークし、監視し、収集します。ベンチマークは、いつ何かが魔法の煙を放つことを期待するかを教えてくれます。監視は、いつ発生したかを知らせます。メトリックと統計により、管理を通じて新しいキット(新しい魔法の煙)を簡単に入手できます。

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

セキュリティ:

  • 「chmod 777」(別名、すべてのアクセス/特権を付与する)が解決策になることはありません。

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

  • サーバー上のすべての開いているポートが何のためにあるかを知っています。頻繁に監査して、新しいものが表示されないようにします。

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

ハードウェア:

  • 箱に書かれていることを何でも行うと思い込まないでください。必要ない場合に備えて、必要なことを行うことを証明してください。予想以上に「ほぼ機能している」と頻繁に言うでしょう。

  • リモートハードウェア管理を軽視しないでください。シリアルコンソールとライトアウト管理は必須と見なされる必要があります。オプションを使用できない場合のリモート制御の電源タップのボーナスポイント。

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

プロジェクト管理:

  • プロジェクトのライフサイクルの初日からシステムを保守する人を巻き込みます。キットのリードタイムと頭脳の時間には驚かされる可能性があり、プロジェクトの依存関係となる標準や要件があることは疑いの余地がありません。

  • ドキュメントはプロジェクトの一部です。プロジェクトが閉じられ、システムがメンテナンスに移行した後は、すべてを書き上げる時間はありませんので、開始時にスケジュールに労力として含まれていることを確認してください。

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

サーバーは、実稼働環境での使用に適している場合、有効期間が定義されています。この有効期間の終了は、通常、ベンダーがキットの更新にかかる費用よりも年間保守で多くの料金を請求し始めるとき、または約3年のうち短い方と定義されます。この後は、開発/テスト環境に最適ですが、ビジネスを実行するためにそれらに頼るべきではありません。2年半で環境を再検討することで、新しいキットを注文するために必要な管理と財務のフープをたどり、古いキットを空の大きなベンダーに送る前にスムーズな移行を実装するための十分な時間が与えられます。

開発:

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

バックアップ

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

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

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

最も重要な...

故障モードを選択します。そうしないと、マーフィーが...マーフィーがスケジュールどおりに機能しません。

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


1
+1それは誰かが私の心を覗き込んだようなもので、美しいものでした; p
Oskar Duveborn

3
「ベンチマーク、監視、およびすべての正常なメトリックを収集します。ベンチマークは、何かが魔法の煙を放つことをいつ予測するかを示します。監視は、それがいつあるかを示します。煙)管理を通じて。」 ピュアゴールド
TJクラウダー

43

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


7
+1。それが実際に簡単に見えるようにするためではありません。
ゲルトM

管理作業とプログラミング作業の両方を行うジェネラリストとして、私はあなたの苦境を完全に理解しています。+1
エイブリーペイン

4
もちろん、他の方法もあります。私たちがすべてノックアップできるスクリプトと小さなユーティリティプログラムの違いと「実際の」プログラミングの違いを本当に理解していないタイプのシステム管理者がいくつか見つかりました。
ロブ・モイア

2
+1ロバート:または、システム管理者が「単純なifステートメントだ」と言って、適切に設計されていないネットワークアーキテクチャを回避します。相互尊重と理解が重要です。
スティーブンエバーズ

27
  • 良くも悪くも、サーバーやネットワーク機器の多くは、2番目の家族の子供に非常によく似ていることを認識してください。 これらは彼らの赤ちゃんです。 彼らは彼らを世話し、病気になったときに助け、トラブルがないか注意深く監視します。これこのようにすべきではありませんが、何年もたってからそうなることがよくあります。機器が正常に機能しないことや期待することに関する懸念を伝えるときは、このことに留意してください。そして、あなたが理解できない返事を受け取ったら、この世界観を通してそれをフィルタリングしてみてください。
  • 良好な労働条件を守ってください。安っぽいように聞こえますが、それは金でその価値があります。いつか特別な恩恵が必要になります。そしていつの日か、そのシステム管理者はあなたの生活を少し楽にするために彼らの邪魔にならないようになります、これは一度だけです。
  • その働く関係は、両方の方向に行きます。システム管理者が非常に忙しく、小さなスクリプトやプログラムを書くことで生活を少し楽にすることができるなら、それをしてください!彼らはあなたが知っているよりも感謝しています。
  • 非常に明確にしてください。「これはひどい」というのは、「断続的なネットワーク接続があるのは少し面倒ですが、それを見るチャンスはありますか?」ほど明確ではありません。
  • あなたのアプリが拡大すると思う場合は、前に管理者に尋ねると仮定すると、それがします。彼らは、あなたが見ないものを「見る」かもしれませんし、あなたが展開しようとしている機器の性能限界について何かを知っているかもしれません。
  • アプリのチューニングが必要であるが、コードの問題ではないようであれば、サーバーのパフォーマンスについてよく聞いてください。システム管理者は愛情を込めてマシンを手入れし、「病気」または「行儀が悪い」場合には満足しません。きちんと尋ねると、病んでいる機械が向きを変えます(または修理/交換されます)。
  • (別の場所で述べたように)使用する設定と使用する理由を文書化します。「チェックボックスXを設定する」または「設定ファイルの行Yのコメントを外す」だけでは役に立ちません。次の再起動時にすべてのデータを消去するオプションを設定している可能性があります。
  • 用紙に設定を文書化する時間がない場合は、可能であればシステムに文書化するようにしてください。設定ファイルでは、これはほとんどの標準的な慣行でなければなりません-すべての設定変更は、イニシャル、その設定の期待される効果、および理由で、日付スタンプされなければならない理由は、それが変更された(前の箇条書きを参照してください)。この小さな習慣は、クランチ時間中に私のベーコンを複数回保存しました。「なぜそうしたのですか?」「ポリシーXを義務付けており、設定YはポリシーXに必要な動作を提供するためです」。
  • ビール。またはコーラ。または水。飲み物はいつでも大歓迎です。システム管理者であることはのどが渇いています。

3
構成ファイルのドキュメント/変更の問題については、すべての構成ファイルをバージョン管理システムに配置することをお勧めします。プログラマーはソースコードにこのようなシステムを既に使用していることが望ましいので、これはプログラマーにとって非常に簡単です。変更をコミットするたびにコメントも追加すると、簡単に履歴に戻って、いつ、なぜ変更されたかを確認できます。
アンデルスサンドビグ2009

変更管理で「ループを閉じる」ため、+ 1。素晴らしい提案。
エイブリーペイン

2
明確なエラーレポートを提供するための優れた提案。何も私に問題があると言われた後よりも失望しない、それが潜在的に多くの人々に影響を与える可能性があることを知って、私は利害プログラマから詳細をいじめるために持っている
デイブチェイニー

23

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

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

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


17

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

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

3
+1。堅実なネットワークパフォーマンスに依存するアプリケーションを作成する開発者は、コーディングを開始する前に、偉大なW.リチャードスティーブンスが執筆した「TCP / IP Illustrated v1」をお読みください。
ムラリSuriar

1
すべての賛成者に感謝します。基盤となるネットワーキングが失敗すると、プログラマーが無力な停止状態に陥るのを見るのは何年もの間私を悩ませてきました。そして最近では、ほとんどすべてのプログラミングはネットワークプログラミングです。
中学校

14

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

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

誰もがハードウェア、OS、またはネットワークを非難するのが好きなので、もう少しデューデリジェンスを実践すれば、システム管理者を幸せな人にすることができます。なぜなら、他に何もなければ、何が間違っているのかを特定の方向に向けることができるかもしれないからです(「あなたのネットワークはひどい」などと言うのとは対照的に)。


1
絶対に。私は私が私を指しているため、人々に間違った場所での問題を探して費やしてきた時間のカウントを開始することはできません間違った方向を
ゲルト・M

8

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


7

次の手段。

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


6

ドキュメンテーション:簡単に説明する必要はありませんが、アプリケーションの仕組み、ビットの適合性を示す図、各コンポーネントがすべてうまくいかない場合のテスト方法。サンプルデータと出力は素晴らしいです。

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

監視:理想的には、開発者はアプリケーションとともに監視情報とテストを含めるでしょう。

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

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


6

ここまでの17の回答のうち、これまでのところ、標準ユーザーとしてログオンしたときにアプリケーションが実行されるようにすることについての情報が含まれていないことに驚いています。

インストールプロセス以外では、アプリケーションは標準ユーザーアカウントでログオンしたときに正常に動作するはずです。


4

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


4

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

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

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

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

ブライアン


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

4

OK、これは少し不平を言っていますが:

a)コーディングするときは、基盤となるインフラストラクチャに障害が発生する可能性があり、幸福な常設の土地ではないことを想定してください。またはGoogle。

b)おそらくあなたが読んだインフラストラクチャのようなものを実装するためのリソースがないので、物事がダウンしたときに私たちを楽にしてください。何をする必要があるかはわかっていると思われますが、何らかの理由でまだ発生していません。私たちはあなたのパートナーです!

c)上記のjhsのように、ping、traceroute(または両方の組み合わせ-mtr)、digなど、インフラストラクチャのトラブルシューティングを行うツールに十分な知識があると、本当に役立ちます。

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

そうでなければ、エイブリーはそれをほとんど釘付けにしたと思う。ちょっとしたシステム管理者をしている開発者は、自分の体重に見合うだけの価値があります!しかし、同様に、開発者がどのように物事を進めているか(バージョン管理などを含む)を理解するシステム管理者は、この日と時代において非常に重要です。

これは現時点では空中にあるようです。ブログでの開発者と運用者の関係についてのより多くの議論に気づきました-チェックアウト

Twitterのツイッターを維持する

パーティションと戦争

運用の最初のテスト


3

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


2

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

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

2

開発者のシステム管理者であり、開発者自身である誰かとして、ここで与えられるアドバイスは金だけでなく、世界中の企業の新しい開発者のための雇用文書の一部であるべきです。

私が(まだ)説明していないことは、開発者が自分が支払われるプログラムを作成するために使用する製品を本当に知っている必要があるということです。開発者のマシンでApacheサーバー、Eclipse、Visual Studioのインストール、およびデータベースを説明して構成しなければならなかった時間は少々面倒です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.