Pingは、サーバーが使用可能かどうかを確認する信頼できる方法ですか?


96

私のアプリケーションでは、サーバーにpingを実行し、応答を待っています。これを使用して、サーバーが使用可能で応答性があるかどうかを判断しています。

これは可用性を判断する信頼できる方法ですか?ファイアウォールがicmpトラフィックをフィルタリングしている可能性があると思います...他に欠点はありますか?より信頼性の高い方法はありますか?

回答:


139

特定のリモートサービスが動作しているかどうかを判断する最善の方法は、意図したとおりに要求を処理するように要求することです。実際、それは何かが正しく機能していることを本当に知る唯一の方法です。

例として、私は常にロードバランサーにWebサーバーから実際の「ヘッド」応答を返させます。必要に応じて、または実際のサーバーが提供するものであれば、DBボックスの小さな選択に対しても同じことができます。ヒントとして、Webサーバー上で 'online.txt'(または任意の名前)を作成し、LBにそのファイルを取得させ、失敗した場合はVIPからサーバーを削除します。単一のファイルの名前を変更するだけで、VIPから個々のサーバーを手動で削除する便利な方法。

Pingはpingに応答する能力のみをテストするため、それは基本OS、IPスタックの一部、物理リンクです-それだけです。他のすべてがダウンする可能性があり、あなたは知りません。

これについては以下で説明しますが、何度も繰り返します。

ICMPエコー要求(別名「Ping」)(別名ICMPタイプ8)は、IPスタック仕様に組み込まれています。ただし、実装または使用する必要はありません。実際のところ、多くのインターネットプロバイダーは、ネットワーク攻撃(pingfloodと呼ばれる)の一種であるため、それらの転送を拒否し、それらの要求を静かに破棄します。

前述のように、これはOSによって(特にネットワークスタックレベルで)処理されるため、これらに応答するかどうかはOSの設定次第です。これがオフになっている場合(セキュリティ対策ですか?)、相手からのping応答の受信については何もできません。これが信頼できない理由です。


34
男が言ったこと!サーバーが現在サービスXを提供しているかどうかを判断する最善の方法は、サービスX要求することであることを常にクライアントにアドバイスします。
MadHatter

5
私たちは、実際に我々のアプリの中に「テスト」RESTfulなAPIを構築するだけで、このために。だから我々は、アプリが何とかに応答するかどうか/ whatever_app /それは要求にサービスを提供し、最高だし、それが(依存関係などDBを)必要とするすべてのツールを持っていることを知っているパルス
tsykoduk

5
MadHatterに追加するには、pingとリクエストを行うことをお勧めします。この方法により、ネットワーク接続とサービス停止のどちらを扱っているかをすぐに知ることができます...どちらか一方が他方とはまったく異なるものを作成する傾向があります。
user606723

Pingは、サーバー自体がpingに応答できるという信頼できるテストでさえありません。もしそうでない場合は、あなたとあなたの間の何かがICMPトラフィックをフィルタリングしていることだけがわかります
Rob Moir

4
マシンが通常の状況でpingに応答すると仮定すると、pingを何らかのブルームフィルターとして使用できます:pingが失敗した場合、サービスは完全にダウンしています(通常はpingが確立されているため、ネットワークに問題があります)。pingがまだダウンしている可能性がありサービスをsucceds場合は、この回答で説明したように
3Doubloons

10

ただし、ほとんどの場合、はい、ただし:

  • 一部のサーバーはping要求をブロックします

  • サーバーが応答しているからといって、Webサイト(または使用する予定のサービス)自動的に機能しているわけではないため、応答期待されるコンテンツと一致するかどうかも確認する必要があります。


5

多くの場合、ICMPトラフィックが除外されるため、信頼できない可能性があります...

より良い方法は、おそらくあなたが興味のあるサービスポートでサーバーにtelnetすることです。

すなわち、telnet 127.0.0.1 8080


5

サーバーがpingに応答することのみが必要な場合、これは可用性を判断するための良い方法です。たとえばWebサービスを提供する必要がある場合は、何らかの形式のテストを実行して、ファイルサービスなどで同様に機能するかどうかを確認する必要があります。


3

pingには2つの欠点があります。

  • pingはicmpを送信します。これはファイアウォールでフィルタリングできます
  • アプリケーションが使用するtcpまたはudpポートがビジーまたは開いていない可能性があります-pingはそれをチェックしません

より良い解決策は、udp / tcpポートを直接チェックして、サービスがまだ利用可能かどうかを確認することです... :-)


3

Nagios / Icingaのようなテストおよび監視用の特別なツールがあります。
これらのツールを使用すると、(もちろん)さまざまなpingテストでチェックを実行できますが、サービスのチェックも実行できます。

すべてのチェックは、返された値を使用して、結果を「良好」、「警告」、および「クリティカル」に分類し、ほぼすべてのプログラミング言語で作成できます。

もちろん、設定は簡単ではありませんが(ポイントアンドクリックなど)、カスタマイズ可能で、信頼性が高く、拡張可能です。さまざまなLinuxおよびUnixディストリビューションで実行できます。


2

探しているサービスをテストします。サーバーに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);
?>

2

pingを使用してサーバーが使用可能かどうかを判断することは、患者が呼吸しているかどうかを確認するER医師のようなものです。はい、始めるのに良い場所ですが、他の問題があるかもしれません。


1

pingホストへのssh接続を試行するsystemdサービスを起動する前に、ホストの電源がオンで到達可能であることを事前確認するために使用します。systemctl startコマンドはすぐに失敗し、静かに失敗してjournalctlジャングルで迷子になるので、これによりデバッグの時間が節約されます。

pingはTCPと同じ意味で「信頼できる」ものではないことに注意してください。接続に問題がある場合(または不正なネットワークスタック、Intel mpssに感謝)、パケットがドロップされている場合、単一のパケットpingが失敗する可能性があります。一方、TCP接続は、ドロップされたパケットに対して信頼性があります。だから、皮肉なことに、ssh接続があります動作し、単一の直後にping 障害が発生。したがって、pingを使用して健全性チェックを行う場合は、必ず何らかの失敗を許可してください。


0

ちょうど2セントです。この方法を使用するレガシーアプリケーションがあり、pingはサービスの可用性を判断するのに十分ではなかったため、サービスを提供する必要がありました。

Pingはサーバーがリッスンできることを示すだけですが、この場合、サービスは人間の介入なしに開始できませんでした。

その結果、サーバーが利用可能であると単純に想定していたユニットは、接続とタイムアウトを試行していました。「サーバーが利用できません」というメッセージを表示する代わりに。

-

XMLHTTPRequestsを介してWebサーバーと通信する現在のアプリケーションは、サーバーがステータスコードで応答する形式のメッセージを送信します。ステータスコードは、さまざまなサブシステムがオンラインであることを確認するために、サーバーが多数のチェックを実行することによって計算されます(DB、必要なディレクトリが書き込み可能など)。


0

通常の状況でサーバーがpingに応答する場合、1分間隔でpingを実行して応答するかどうかを確認すると便利です。もちろん、これはそのIPアドレスにサーバーがあり、pingのソースから宛先へのネットワークパスがあることを示しているだけです。応答時間のしきい値を設定すると、ネットワークの状態を監視することもできます。インターネット上のサーバーにpingを送信している場合、ネットワークを修正するためにできることはほとんどないかもしれませんが、顧客が苦情を申し立てた場合は、すでに問題を認識しています。さらにgoogle.comにpingを実行することも便利です。あなたとグーグルの両方がダウンしている場合、何かが起こっています。

他の人が述べたように、あなたが提供しているサービスが応答していること、そしてそのパフォーマンスがOKであることを監視することが重要です。つまり、通常1秒で応答するWeb時代がなぜ10秒で応答するのかを確認する必要があるかもしれません。

したがって、サービスが応答せず、pingが失敗していることを知ると、1つのアプローチよりもはるかに多くの情報が得られます。また、pingが応答することを知っているプロセスも監視する場合、サービスは応答せず、Webサーバーに正しい数のプロセスがないため、最初に調べる場所がわかります。

監視に夢中になる可能性があるので、何か悪いことが起こったり、危険になったりしていることを十分に監視してください。つまり、スワッピングが多すぎる、ディスク使用率が90%を超える、ディスクioが高い、CPU使用率が100%の長時間にわたる監視は、サービス拒否攻撃が非常にゆっくりと実行されることを忘れないでください。


0

Ping(Packet Internet Groper)は、システムがネットワーク経由で接続を確立したいシステムと通信しているかどうかを知らせます。pingを実行しても、たとえばRemoteRegistryサービスが実行されているという意味ではありません。

ただし、問題を修正するにはpingが必要です。問題をリモートで修正できます。したがって、pingには独自の重要性があります。


-3

スクリプトで使用する最良の方法は

#rsh servername.com "date"
Mon Sep 19 04:42:20 PDT 2011

remshのようなrshの代替を使用できます。これにより、リモートシステムが完全に起動し、コマンドを実行できるようになります。ブート中にネットワークサービスが開始されると、システムはpingに応答し始めるため、単純なpingでは不十分です。


3
rsh?本当に?ssh代わりに使用しないのはなぜですか?
ヨアヒムザウアー

5
rshそれとはssh別に、dateWebサーバー、SMTPサーバー、DNSサーバー、ローカルデータベースサーバーなどが実行されていて、リクエストを処理できるかどうかについて、実行できるとはどういうことですか(そもそも)可用性を確認したい特定のサービス(実際にはリモートシェルの場合がありますが、そうである必要はありません)を実際に要求する方がよいでしょう。
CVn

-3

Windowsサーバーを再起動するとき、コマンドプロンプトボックスを開いて入力します

ping <box> -t

最初に、それが利用可能であることを示唆します-それはボックスが下がっていることです。その後、多くの「リクエストタイムアウト」が発生します。返信を受け取り始めると、ボックスが開きます。


7
これは、実際の作業を実行できるという意味ではなく、pingに応答しているというだけです。
user9517

多分。サーバーにログオンできることは常に重要であり、それだけで十分です。
デイブ

サーバーがpingに応答することは完全に可能ですが、高レベルのネットワーク機能を開始することはできません(まだ、またはまったく)。pingテストはpingのみです。また、IPではなく名前でpingを実行した場合の名前解決
Rob Moir

サーバーがpingに応答したが、ログオンを含む他の種類のリクエストのサーバーに失敗したことが何度もありました。pingは、サーバーがいつ復旧し始めたかを伝える非常に粗雑な方法ですが、それだけです。もちろん、サーバーがpingにも応答することを前提としています。
ジョンガーデニアーズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.