4

私は通常、週に少なくとも20台のサーバーを扱っています。それぞれにクエリを実行し、「稼働中」かどうかを判断するスクリプトを作成することをお勧めします。

  • サーバーはApache2またはIIS7のいずれかを実行します。
  • ホスティングプロバイダーはさまざまです
  • 通常、各サーバーには複数のサイトがあります
  • 設定に一貫性がなく、IPに直接アクセスしたときにデフォルトのapache「helloworld」ページが常に存在するとは限りません。
  • サイトはすべて仮想ホストです

私が考えていたのは、サーバーからの応答が200 OKであることを確認するために、各サーバーから1つのサイトを取得し、http HEAD要求を行うだけで、それらが稼働しているかどうかを判断する最良の方法でしょうか。明らかに、次の場合、これは「誤検知」の傾向があります。

  1. サイトの構成/セットアップは、4xxエラーコードを返す必要があるときに200OKを不適切に返します
  2. 個々のサイト(<VirtualHost>)の構成が無効になっている場合、またはサイトが別のサーバーに移動した場合。

しかし、ほとんどの場合、HEADリクエストと200 OKに依存することは、信頼できるはずですよね?ドメインのAレコードが、サイト移動の場合にリストされているものと一致することを確認するだけでなく。

擬似コード:

import http

list = {
  '72.0.0.0' : 'domain.com',
  '71.0.0.0' : 'blah.com',
}

serverNames = {
  'jetty' : '72.0.0.0',
  'bob'   : '71.0.0.0'
}

for each ( list as server => domain ) { 
    headRequest = http.head( domain )
    if ( headRequest.response == 200 && http.arecord(domain) == server ) { 
       print serverNames[server] + ' is up ';
    } else {
       print 'Server is either down or the site attached to the server lookup has moved.';
    }
}

おそらくPythonまたはPHPでスクリプトを作成しますが、この質問はロジックについてのみ説明します。

4

1 に答える 1

3

ロジックは私には健全に思えます。Apache サーバーで mod_status モジュールを使用するように拡張することをお勧めします。ヘッドチェックを行った後、 /server-status を取得して、それを使用してサーバーが正常であることを再確認してください。私はこのようなことを考えています:

statusRequest = http.get('/server-status')
if(statusRequest == 200) {
 // Make sure you don't have insane load averages, etc
}
else { /* Check something IIS specific, or just be happy the head check worked */ }

私が過去に使用したもう 1 つの手法は、404 を返す必要があるとわかっているものをチェックすることです。こうすることで、サーバーが要求した人に 200 を配布しているだけかどうかを知る可能性が高くなります。(設定が悪いので一度見ました)

于 2010-08-02T21:16:28.360 に答える