質問

サイトがHTTP 202で応答しているかどうかを知るために、5分ごとに20のWebサイトのリストをpingする最良の方法は何ですか?

簡単なアイデアは、データベースに20個のURLを保存し、データベースを実行してそれぞれをpingすることです。しかし、答えないとどうなりますか?その後はどうなりますか?

また、これに対してより良いが簡単な解決策はありますか?リストが20000のWebサイトに成長する可能性があると思いますが、5分間ですべてをpingする必要があるのに十分な時間がありません。

基本的に、私はPingdom、Uptimerobot、そして好きな作品を説明しています。

node.jsとRuby on Railsを使用してこのシステムを構築しています。また、Mongodbを使用して、すべてのpingと監視結果の履歴を保存する傾向があります。

提案?

本当にありがとう!

役に立ちましたか?

解決

github

私はnode.jsが本当に好きで、この問題に取り組むことを望んでいます。私は今ホストされている非常に基本的なセットアップしか持っていないことに留意してください https://github.com/alfredwesterveld/freakinping

サイトがHTTP 202で応答しているかどうかを知るために、5分ごとに20のWebサイトのリストをpingする最良の方法は何ですか?

ping(icmp)

最初に私はあなたが本当にやりたいかどうか知りたいです ping(icmp) または、ウェブサイトがコード200(OK)で返され、時間を測定するかどうかを知りたい場合。私は、あなたが本当にpingをしたくないのではなく、HTTP要求と時間を測定するだけでなく、文脈から信じています。 node.js/ruby/pythonからのpingは、プログラミング言語からping(root user)を行うには生のソケット(ルートユーザー)が必要なため、通常のユーザーからは実行できないためです。たとえば、これを見つけました ping Pythonのスクリプト(私は本当に大きなRubyプログラマーではありませんが、どこかで簡単なRubyスクリプトを見たと思います)が、ルートアクセスが必要です。 node.jsのpingモジュールがまだあるとは思わない

メッセージキュー

また、これに対してより良いが簡単な解決策はありますか?リストが20000のWebサイトに成長する可能性があると思いますが、5分間ですべてをpingする必要があるのに十分な時間がありません。

基本的に、私はPingdom、Uptimerobot、そして好きな作品を説明しています。

この種のスケールを達成するために必要なのは、 メッセージキュー たとえばように Redis, BeanStalkd またはギアマンド。 Pingdomの規模では、1人の労働者プロセスはそれを削減するつもりはありませんが、あなたの場合(私は)、1人の労働者がそうするでしょう。 Redisは、C(node.js)拡張機能のために最速のメッセージキューになると思いますが、もう1つの一般的なメッセージキューであるBeanstalkdに対してベンチマークする必要があります(ただし、C拡張子はまだありません)。

リストが20000のWebサイトに成長する可能性があるのではないかと心配しています

そのスケールで取得した場合、ロードを処理するために複数のボックス(多くのワーカースレッド/プロセス)をホストする必要があるかもしれませんが、あなたはまだそのスケールではなく、node.jsは速いです。 1つのボックスでもその負荷を処理することさえできるかもしれませんが、私は確かに知りません(いくつかのベンチマークを実行/実行する必要があります)。

DataStore/Redis

これはnode.jsで非常に簡単に達成できると思います(node.jsが本当に好きです)。私がこれを行う方法は、それが狂気であるため、私のデータストアとしてRedisを使用することです!

PING: 20000 ops 46189.38 ops/sec 1/4/1.082
SET: 20000 ops 41237.11 ops/sec 0/6/1.210
GET: 20000 ops 39682.54 ops/sec 1/7/1.257
INCR: 20000 ops 40080.16 ops/sec 0/8/1.242
LPUSH: 20000 ops 41152.26 ops/sec 0/3/1.212
LRANGE (10 elements): 20000 ops 36563.07 ops/sec 1/8/1.363
LRANGE (100 elements): 20000 ops 21834.06 ops/sec 0/9/2.287

使用 node_redis(hredis(node.js)cライブラリ)。 URLを使用してRedisに追加します 悲しい.

5分ごとにタスクを実行します

これは、ほとんど努力せずに達成できます。私は使用します setInterval(callback, delay, [arg], [...]) サーバーの応答時間を繰り返しテストします。すべてのURLをオンにします callback Redisを使用して スメルズ. 。すべてのURL(メッセージ)をメッセージキューに使用して配置します rpush.

応答のチェック(時間)

しかし、答えないとどうなりますか?その後はどうなりますか?

私はこの文を完全に理解していないかもしれませんが、ここには行きます。失敗した場合、それはただ失敗します。 5秒で応答(時間)をもう一度確認して、オンラインであるかどうかを確認することができます。これの正確なアルゴリズムを考案する必要があります。その後のものは、同じサーバーに存在しない限り、以前のURLとは何の関係もありません。また、あなたが私が推測することもはっきりと考えていることは、それらのすべてのURLを同じサーバーに同時にpaingしてはいけないのではなく、それらを並べてはいけません。

処理URL

ワーカープロセスから(今のところは1つだけで十分です)Redisからメッセージ(URL)をFETCH(URL) brpop 指図。 URL(メッセージ)の応答時間を確認し、リストから次のURL(メッセージ)を取得します。おそらく、プロセスをスピードアップするために、同時にいくつかのリクエストを行うでしょう。

他のヒント

多くのユースケースを処理する必要があるため、「基本的な方法」はありません。

  • HTTPリダイレクト、
  • httpsページ、
  • タイムアウトをリクエストし、
  • あなたがpingに使用するサーバーのCPU負荷、
  • 必要なレポートの種類(可用性?アップタイム?応答性?ダウンタイム?)
  • QoS測定値を時間ごとに集約する方法
  • 収集したデータの寿命(5分ごとに数十のターゲットを測定すると、すぐに多くのデータが生成されます)
  • リアルタイムアラート

Pingdomなどは「基本的な」ツールではありません。似たようなものが必要な場合は、既存のオープンソースの代替品に依存したい場合があります。私は自分でリモート監視アプリケーションを構築したので、確かにそれを知っています。アップタイムと呼ばれ、node.jsとmongodbで書かれており、Github(https://github.com/fzaninotto/uptime/uptime)でホストされています。それを開発するのに数週間の努力がかかったので、私を信じてください:それは簡単なことではありません。

Zabbix、Nagios、Blah Blahなどの監視ツールを使用して、マス数のサーバーのさまざまなパラメーターを測定できます。

JSに実装したい場合、時間間隔-ed HTTPリクエストを実行してから、HTTP戻りステータスコードを決定し、XPathまたはRegexを使用して特定の要素を検証することができます。

Rubyの場合、デーモンプロセスとスレッドプール(マルチスレッドアイデア)とURIを使用してHTTPコードとコンテンツを表示して、XPathを使用してコンテンツが正しく動作しているかどうかを検証します。

あなたが興味があるなら、私はこれを行うPingerというアプリを作成しました。 Ruby on RailsとResqueの上に構築されています:

https://github.com/austinthecoder/pinger

非常に安定したウェブサイトのアップタイムチェックと通知を提供する無料の品質サービスがいくつかあります。この指示とレビューを確認できます http://fastjoomlahost.com/how-to-monitor-website-uptime

これをnode.jsで使用することもできます ノードピンモニター パッケージ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top