回答:
特定のリモートサービスが動作しているかどうかを判断する最善の方法は、意図したとおりに要求を処理するように要求することです。実際、それは何かが正しく機能していることを本当に知る唯一の方法です。
例として、私は常にロードバランサーにWebサーバーから実際の「ヘッド」応答を返させます。必要に応じて、または実際のサーバーが提供するものであれば、DBボックスの小さな選択に対しても同じことができます。ヒントとして、Webサーバー上で 'online.txt'(または任意の名前)を作成し、LBにそのファイルを取得させ、失敗した場合はVIPからサーバーを削除します。単一のファイルの名前を変更するだけで、VIPから個々のサーバーを手動で削除する便利な方法。
Pingはpingに応答する能力のみをテストするため、それは基本OS、IPスタックの一部、物理リンクです-それだけです。他のすべてがダウンする可能性があり、あなたは知りません。
これについては以下で説明しますが、何度も繰り返します。
ICMPエコー要求(別名「Ping」)(別名ICMPタイプ8)は、IPスタック仕様に組み込まれています。ただし、実装または使用する必要はありません。実際のところ、多くのインターネットプロバイダーは、ネットワーク攻撃(pingfloodと呼ばれる)の一種であるため、それらの転送を拒否し、それらの要求を静かに破棄します。
前述のように、これはOSによって(特にネットワークスタックレベルで)処理されるため、これらに応答するかどうかはOSの設定次第です。これがオフになっている場合(セキュリティ対策ですか?)、相手からのping応答の受信については何もできません。これが信頼できない理由です。
多くの場合、ICMPトラフィックが除外されるため、信頼できない可能性があります...
より良い方法は、おそらくあなたが興味のあるサービスポートでサーバーにtelnetすることです。
すなわち、telnet 127.0.0.1 8080
探しているサービスをテストします。サーバーにpingするだけでは、サービスが機能しているわけではありません。
例えば:
数十のWebサイトを持つWebサーバーを想像してください。Webサイトが稼働しているかどうかを知る必要があります。PHPで小さなスクリプトを作成し、10分ごとに実行します。
スクリプトは以下を行います->
<?php
$website1 = "http://www.mywebsite.com/";
$myWebsite = file_get_contents($website1);
$message = 'My website' . $website1 . ' is DOWN at the moment.';
if (empty($myWebsite)) mail('mail@server.com', 'Website is DOWN', $message);
?>
ping
ホストへのssh接続を試行するsystemdサービスを起動する前に、ホストの電源がオンで到達可能であることを事前確認するために使用します。systemctl start
コマンドはすぐに失敗し、静かに失敗してjournalctlジャングルで迷子になるので、これによりデバッグの時間が節約されます。
pingはTCPと同じ意味で「信頼できる」ものではないことに注意してください。接続に問題がある場合(または不正なネットワークスタック、Intel mpssに感謝)、パケットがドロップされている場合、単一のパケットpingが失敗する可能性があります。一方、TCP接続は、ドロップされたパケットに対して信頼性があります。だから、皮肉なことに、ssh接続があります動作し、単一の直後にping
障害が発生。したがって、pingを使用して健全性チェックを行う場合は、必ず何らかの失敗を許可してください。
ちょうど2セントです。この方法を使用するレガシーアプリケーションがあり、pingはサービスの可用性を判断するのに十分ではなかったため、サービスを提供する必要がありました。
Pingはサーバーがリッスンできることを示すだけですが、この場合、サービスは人間の介入なしに開始できませんでした。
その結果、サーバーが利用可能であると単純に想定していたユニットは、接続とタイムアウトを試行していました。「サーバーが利用できません」というメッセージを表示する代わりに。
-
XMLHTTPRequestsを介してWebサーバーと通信する現在のアプリケーションは、サーバーがステータスコードで応答する形式のメッセージを送信します。ステータスコードは、さまざまなサブシステムがオンラインであることを確認するために、サーバーが多数のチェックを実行することによって計算されます(DB、必要なディレクトリが書き込み可能など)。
通常の状況でサーバーがpingに応答する場合、1分間隔でpingを実行して応答するかどうかを確認すると便利です。もちろん、これはそのIPアドレスにサーバーがあり、pingのソースから宛先へのネットワークパスがあることを示しているだけです。応答時間のしきい値を設定すると、ネットワークの状態を監視することもできます。インターネット上のサーバーにpingを送信している場合、ネットワークを修正するためにできることはほとんどないかもしれませんが、顧客が苦情を申し立てた場合は、すでに問題を認識しています。さらにgoogle.comにpingを実行することも便利です。あなたとグーグルの両方がダウンしている場合、何かが起こっています。
他の人が述べたように、あなたが提供しているサービスが応答していること、そしてそのパフォーマンスがOKであることを監視することが重要です。つまり、通常1秒で応答するWeb時代がなぜ10秒で応答するのかを確認する必要があるかもしれません。
したがって、サービスが応答せず、pingが失敗していることを知ると、1つのアプローチよりもはるかに多くの情報が得られます。また、pingが応答することを知っているプロセスも監視する場合、サービスは応答せず、Webサーバーに正しい数のプロセスがないため、最初に調べる場所がわかります。
監視に夢中になる可能性があるので、何か悪いことが起こったり、危険になったりしていることを十分に監視してください。つまり、スワッピングが多すぎる、ディスク使用率が90%を超える、ディスクioが高い、CPU使用率が100%の長時間にわたる監視は、サービス拒否攻撃が非常にゆっくりと実行されることを忘れないでください。
スクリプトで使用する最良の方法は
#rsh servername.com "date"
Mon Sep 19 04:42:20 PDT 2011
remshのようなrshの代替を使用できます。これにより、リモートシステムが完全に起動し、コマンドを実行できるようになります。ブート中にネットワークサービスが開始されると、システムはpingに応答し始めるため、単純なpingでは不十分です。
rsh
?本当に?ssh
代わりに使用しないのはなぜですか?
rsh
それとはssh
別に、date
Webサーバー、SMTPサーバー、DNSサーバー、ローカルデータベースサーバーなどが実行されていて、リクエストを処理できるかどうかについて、実行できるとはどういうことですか(そもそも)可用性を確認したい特定のサービス(実際にはリモートシェルの場合がありますが、そうである必要はありません)を実際に要求する方がよいでしょう。
Windowsサーバーを再起動するとき、コマンドプロンプトボックスを開いて入力します
ping <box> -t
最初に、それが利用可能であることを示唆します-それはボックスが下がっていることです。その後、多くの「リクエストタイムアウト」が発生します。返信を受け取り始めると、ボックスが開きます。