Ruby 如何在Node.js/RoR中监控20个网站(Ping或HTTP)的正常运行时间
例如,每5分钟ping一次20个网站的列表,以了解该网站是否使用HTTP 202响应的最佳方法是什么 不需要动脑筋的想法是将20个URL保存在一个数据库中,然后运行数据库并ping每个URL。然而,当一个人不回答时会发生什么?那之后的那些会怎么样 还有,有没有更好但更简单的解决方案?我担心这个列表可能会增加到20000个网站,然后没有足够的时间在我需要ping的5分钟内ping它们 基本上,我是在描述PingDom、UptimeRobot等的工作原理 我正在使用node.js和RubyonRails构建这个系统。 我还倾向于使用MongoDB保存所有ping和监视结果的历史记录 建议Ruby 如何在Node.js/RoR中监控20个网站(Ping或HTTP)的正常运行时间,ruby,ruby-on-rails-3,node.js,pingdom,Ruby,Ruby On Rails 3,Node.js,Pingdom,例如,每5分钟ping一次20个网站的列表,以了解该网站是否使用HTTP 202响应的最佳方法是什么 不需要动脑筋的想法是将20个URL保存在一个数据库中,然后运行数据库并ping每个URL。然而,当一个人不回答时会发生什么?那之后的那些会怎么样 还有,有没有更好但更简单的解决方案?我担心这个列表可能会增加到20000个网站,然后没有足够的时间在我需要ping的5分钟内ping它们 基本上,我是在描述PingDom、UptimeRobot等的工作原理 我正在使用node.js和RubyonRai
非常感谢 使用诸如zabbix、nagios之类的监控工具,这些工具可以大量测量服务器的各种参数 如果您想在js中实现它,您可以执行一个时间间隔的http请求,然后确定http返回状态代码,并使用xpath或正则表达式验证某些元素是否正确 对于ruby,一个守护进程,使用线程池(多线程思想)和URI open来查看http代码和内容,使用xpath来验证内容是否正确运行。Github 我非常喜欢node.js,我想解决这个问题,并希望很快在github上共享一些代码来实现这一点。请记住,我现在只有一个veryy基本设置托管在 ping列表的最佳方式是什么 每5分钟20个网站(适用于 示例)以了解现场 是否使用HTTP 202响应 PING(ICMP) 首先,我想知道你是否真的想做一个测试,或者你只是想知道网站是否返回代码200(OK)并测量它所花费的时间。从上下文来看,我相信您并不真正想要执行ping,而只是一个http请求并测量时间。我这样问是因为(我相信)普通用户无法从node.js/ruby/python执行ping,因为我们需要原始套接字(root用户)来从编程语言执行ping(ICMP)。例如,我在python中发现了这个脚本(我相信我在某处也看到了一个简单的ruby脚本,尽管我不是一个真正的ruby程序员),但它需要根访问权限。我认为node.js甚至还没有ping模块 消息队列 还有,有更好但不需要思考的吗 这个问题的解决方案是什么?恐怕名单上没有 可以发展到20000个网站,然后 没有足够的时间打击他们 在我需要的5分钟内 pinging 基本上,我是在描述PingDom, UptimeRobot,以及类似的工作 要达到这种规模,需要使用like,例如gearmand。在PingDom的规模下,一个工作进程不会削减它,但在您的情况下(我假设)一个工作进程可以。我认为(假设)由于C(node.js)扩展,redis将是最快的消息队列,但我应该再次将其与beanstalkd进行对比,beanstalkd是另一种流行的消息队列(但还没有C扩展) 恐怕名单会增加到20000人 网站 如果达到这个规模,您可能必须拥有多个主机箱(许多工作线程/进程)来处理负载,但您还没有达到这个规模,node.js速度非常快。它甚至可以用一个盒子来处理这个负载,尽管我不确定(你需要做/运行一些基准测试) 数据存储/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
使用(与hredis(node.js)c库一起)。我将使用添加URL到redis
每5分钟运行一次任务
这几乎不需要任何努力就可以实现。我将使用setInterval(回调、延迟、[arg]、…])
重复测试服务器的响应时间。使用从redis获取回调
上的所有URL。我将使用将所有URL(消息)放在消息队列上
检查响应(时间)
然而,如果一个人不这样做,会发生什么呢
答案?那些会怎么样
之后呢
我可能不完全理解这句话,但它是这样的。如果一个失败了,那就是失败。您可以尝试在5秒钟内再次检查响应(时间),或者看看它是否在线。应该为此设计一个精确的算法。之后的URL不应该与以前的URL有任何关系,除非是到同一个服务器。我想这也是你想得很清楚的一件事,因为你不应该在同一时间将所有这些URL ping到同一个服务器上,而是将它们排成一列或其他什么的
处理URL
从工作进程(目前只需一个)使用命令从redis获取消息(URL)。检查URL(消息)的响应时间,并从列表中获取下一个URL(消息)。我可能会同时做几个请求来加速这个过程。如果你好奇的话,我已经创建了一个名为Pinger的应用程序来实现这一点。它基于Ruby on Rails和Resque构建: 没有“基本方法”,因为您必须处理许多用例:
- http重定向
- https页面
- 请求超时
- 用于ping的服务器的cpu负载
- 您需要的报告类型(可用性?正常运行时间?响应能力?停机时间?)
- 如何按时间聚合qos度量
- 您收集的数据的生命周期(每五分钟ping几十个目标会快速生成大量数据)
- 实时警报
- 等等