Web应用程序监视最佳实践

我们正在完成我们的Web应用程序和计划部署。 部署到生产的非常重要的方面是监视系统的健康状况。 拥有一小组开发人员/支持人员,对于我们早日获得潜在问题的通知 ,并在影响用户之前加以解决非常重要。

使用Nagios接口就像一个很好的select,但是想要获得更多关于通用应用程序(特别是Django应用程序)的最佳监视工具/实践的更多意见? 除了显而易见的CPU,内存,磁盘空间,数据库连接之外,还欢迎关于应该监视什么的build议。

我们的networking应用程序是用Django编写的,我们在Apache + Fast CGI和PostgreSQL数据库下运行Linux(Ubuntu)。

编辑我们在Linode下有一个完全虚拟化的环境。

编辑我们正在使用Django日志logging,所以我们有一个单独的信息,错误,关键问题等方式。

Nagios很好,也许有系统testing(Selenium)定期运行也不错。

编辑: Hyperic和Groundwork也看起来有趣。

有可能是一个testing套件系统,可以保持压力testing一切为你。 我记不清头顶上的名字,也许有人可以在下面提一个。

我喜欢做的其他事情:

基础设施的最好的座右铭总是修理,检测,修理。 拿起来,find它的根,如果可以的话,治愈/预防。

由于系统存在多层次,我们应该在很多层面上进行testing:

编辑:将所有错误或警告通过电子邮件直接发送给您的个案pipe理员。 这样你就可以在一个地方跟踪事件。

1) 连接 :从服务器和外部监控您的互联网连接。 logging这个地方

2) 服务器 :监控你需要的所有进程,以确保它们正在运行,而不是固定服务器。 使用惠普服务器或类似的硬件故障通知,它可以从一个BIOS级别。 通知和logging,如果他们是。

3) 软件 :确定总是需要运行的关键软件。 设置性能等级,然后监视它们。 Nagios应该能够帮助这个。 在Windows上可以多一点。 发生exception时,您应该能够运行脚本来自动重新启动进程。 我的梦想系统是允许我通过短信服务器与服务器交互,如果服务器认为它是一个例外,我必须允许,或者一个会自动发生,除非我通过短信取消。 一天..

4) 远程电源 :确保远程电源重置function在你的手中。 如果您曾经使用过任何窗口,则可能需要安排每周重新启动。

5) 业务逻辑testing :定期运行脚本来testing系统的工作stream程。 selenium可能可以实现一些这一点,但我也喜欢logging结果,以及说这在这个时候运行,这些文件有错误。 如果可能,请让系统通过脚本监视自己。

6) 备份 :做一个备份,你可以设置和忘记。 如果你能把东西放到虚拟机中,那么这将是理想的,因为你可以在任何地方扩展,移动或部署基础架构的任何部分。 我遇到了一些情况,我把一台死了的服务器移到我的笔记本电脑上,让我在修复一个问题的时候运行在vmware上。

监视连接到Web服务器和数据库的数量是另一件好事情。 有机会,如果一个人通过屋顶射击,东西是资源匮乏,网站即将下降。

另外请确保您有一个对系统进行合理的端到端testing的URL的定期请求。 如果您的网站支持search,那么请让nagios执行search – 这应该确保search索引是健康的,Web服务器和数据库服务器。

另外,请确保您的应用程序在您的用户看到错误或者有未处理的exception时随时向您发送电子邮件。 这样你就知道应用程序在现场失败了。

如果我必须select一种types的testing,那就是testing系统的最终用户function。 重要的是要考虑的是用户。 在testing诸如数据库可用性,服务器正常运行时间等方面都非常重要,通过您的系统通过远程UItesting系统testing工作stream程涵盖了所有这些基础。 如果您知道系统的关键部分对于最终用户是可用的,那么您知道您的系统已经完好无损。

  1. 确定系统中的重要工作stream程。 例如,如果您编写了电子商务网站,则可能会标识“search产品,将产品放入购物车并购买产品”的工作stream程。
  2. 优先考虑工作stream程,首先build立更高优先级的testing。 在您开始生产之后,您可以随时添加其他testing。
  3. 使用其中一个可用的UItesting框架来构buildUItesting。 有许多自由和商业的UItesting框架可以以自动化的方式运行。 首先构build一套核心的testing,以解决关键的工作stream程。
  4. 设置至less一个远程运行testing的位置。 你想testing你的系统的每个方面,这意味着远程testing它。 互联网连接了吗? Web服务器是否正在运行? 连接到数据库服务器是否工作? 等等。如果您远程testing,请确保您的系统可用于外部世界,这意味着它很可能是端到端的工作。 您也可以在内部运行这些testing,但我认为从外部运行这些testing非常重要。
  5. 确保您的解决scheme包括报告和通知。 如果你的一个关键的工作stream程testing失败,你希望有人知道它来尽快解决这个问题。 如果一个非关键的任务失败了,也许你只想报告,这样你就可以解决带外问题。

这种最终用户testing不应该消除数据中心系统的监控,但我想重申,最终用户testing是您可以为Web应用程序执行的最重要的testingtypes。

啊,监控。 我如何爱你和你的振动在凌晨3点。

从本质上讲,您需要一种方法来检查应用程序的内部状态,既可以在特定的时间也可以在多个时间范围内进行(后者对于在发生问题之前检测问题非常重要)。 另一种思考方式是unit testing。

我们有我们自己的(非常好的)监控系统,所以我不能评论Nagios或其他应用程序。 我们的用例与您的类似,但(apache上的cgi应用程序)。

  1. 添加一个logging.monitor()types的方法,它将信息logging到磁盘。 这应该至less支持logging简单的数字和字母数字(key => value association可以非常方便)。
  2. 有一个过程,将监视日志和存储到数据库中。
  3. build立一个处理过程,获取数据库信息,根据规则检查它们,并发出警报。 请记住,有些东西可以是片状的。 仅仅因为你有一次404并不意味着它的应用程序。
  4. 有一种方法来静音警报(非常有用的维护或阅读您的电子邮件)。

这是非常高的水平。 重要的是你有一段时间的应用程序状态的历史。 从这里,你可以创build规则(也许只是将原始的sql查询放到某个configuration文件中),即“如果每秒查询次数加倍,发送SlashDotted警报”,或者“如果50%的响应是404,警报”。 它也使pipe理变得麻烦,因为你可以量化任何关于它的上,下,快,慢的评论。

要监视的事情包括(其他人可能也提到这些):http状态,端口可访问,http加载,数据库加载,打开连接,查询延迟,服务器可访问性(ssh,ping),每秒查询,工作进程数,错误百分比,错误率。

简单的端到端testing也非常方便,虽然它们可能很脆弱。 尽量保持它们简单,但是你应该有一个尝试去触摸应用程序的核心部分(caching,数据库,authentication)。

我使用了Munin和Monit ,并且对他们都非常满意。

内部日志logging是好的,花花公子,但是当你的整个应用程序崩溃或你的盒子/ enviro崩溃,你也需要一个外部检查。 http://www.pingdom.com/对我来说一直很可靠。;

我唯一的其他build议是我不会花太多的时间在这个。 我最好的例子是推特,他们投入系统的能量是多less,而不是仅仅投入那么多的时间和精力投掷更多的硬件/扩展。

有可能是最终导致你失望,你的日志和卫生系统将错过任何。

监控任何在线网站的最重要的方法是对外进行监控。 目标应该是以最能反映用户使用网站的方式来监控您的网站。 在99%的案例中,只要您知道您的网站是在外部的,就很容易find根本原因。 最重要的是尽快知道您的客户无法加载您的网站。

这通常意味着使用外部性能监视服务。 他们从非常低端(mon.itor.us,pingdom)到高端(Webmetrics,Gomez,Keynote)。 和往常一样,你得到你所支付的。 逛街购物时要注意的事情包括:

  • 监控networking的规模和分布
  • 无论监控解决scheme是否能够使用真实的浏览器监控您的网站(否则您不像真正的用户那样testing您的网站)
  • 脚本语言(脚本对您的网站交易)
  • 支持部门,为您提供帮助,并提供如何正确监控的专业知识

祝你好运!

IP Patrol或SiteSentry的 Web监控对我们来说非常有用。 第二个有点像网站的信心,但稍微漂亮哈哈。

你有没有想过监视function呢? 一个脚本(或者像Perl或Pyton这样的脚本语言,或者使用WebTest之类的工具)与您的应用程序进行交谈,并执行一些重要步骤,例如login,购物等,这是非常好的。

除了已经被回答的监控内容之外,您还需要确保 – 无论您使用什么系统,只要您在每个请求中获得一次多次发生错误的通知。 或者你的收件箱内存不足:)另外,这是很烦人的…

将支持/开发团队之间的待机class次划分开来,这样一个人不必每个晚上都要打电话。 那会让人失望。 监测是一件好事 ,但每个人都需要有机会偶尔过一次生活。 你的手机在凌晨两点蜂拥而至,很快就会变老,相信我。 并不是每个开发者都习惯24/7支持,所以你需要find使用监控和滥用监控之间的平衡点。

基本上,有不同的升级水平,如果天空没有下降,那么在夜间定义一个“ 宁静现在 ”的窗口,小的升级水平不会出现。

我一直在使用Nagios + CruiseControl + Selenium来运行关键任务Web应用程序的高级testing。 我被一个简单的jquery错误所困扰,导致用户无法继续进行在线注册。

http://www.agileatwork.com/the-holy-trinity-of-web-2-0-application-monitoring/

你可以看看AlertGrid 。 这个Web应用程序允许您过滤和转发警报给您的团队(全球)。 它也有很好的监控能力,如果没有发生。

用理查德·莱维瑟尔的话来解释一下:啊,监视工具,你的不完美如何使我感到挫败。 那里似乎没有一个完美的工具。 Nagios设置起来相当简单,但是用户界面有点老式,你必须在被监视的每台服务器上运行一个守护进程。 Zenoss有一个更好的用户界面,包括资源使用的趋势图,但它使用SNMP,所以你必须有一些熟悉,才能正常工作,文件不是最好的 – 有几百页,但真的很难只需find你需要的信息开始。

我的朋友也推荐仙人掌和Hyperic ,但我没有亲身经历。

最后一件事 – 其他答案之一build议运行一个工具,强调您的网站。 我不会build议你在现场做这个,除非你有一个可靠的安静期, 即使那样你也可能会意外地把它弄掉。 更好的是有一个登台服务器,您可以在更改生产之前运行负载testing。

也许有系统testing(Selenium)定期运行是很好的。

=> 100%ACK。 我们使用这个http://www.alertfox.com 。 通过我们的PRO2账户,他们进行了1小时的回归testing,这非常棒。 你甚至可以用他们的免费账户来做这件事,但只限于一个交易传感器。

我们的一位客户使用了Techout(www.techout.com),对这项服务非常满意。

警报不收取任何费用,无论是什么types或多less,他们提供电子邮件,语音信箱和短信提醒 – 如果发生重大事件,来自活人的电话将帮助您。

这一切都基于服务 – 您不需要安装软件,而且您有一位顾问与您合作,为您的业务确定最佳方法。 这是最方便的Web应用程序监视服务之一,因为他们负责一切。

我只想补充一点,你可以根据过去的错误历史来预测错误的可能性,并修正错误。 如果您要绘制已经纠正的问题的频率和严重程度,那么对于较小规模的内部testing,您将会了解可预见的新问题。 如果现在一切都运行无误,那么这两个麻烦来源将是最近的变化或可扩展性问题。

从上面来看,可扩展性听起来像是你唯一的担心,但我只是提到过去的错误频率testing,因为我一直以来的团队总是认为他们得到了最后一个错误,没有更多的错误。 直到有。

改变一点点,我真的认为是有用的,改变了很多,我监视我的应用程序是loggingJavaScript的例外的地方。 有一个非常好的实现,可以直接从用户浏览器logging到Google Analytics。 这对于以JavaScript为中心的Web应用程序是必须的,并且可以直接在用户浏览器上给出结果,从而导致非常意外的错误(iE和手机浏览器都很痛苦)

免责声明:我的邮箱

http://www.directperformance.com.br/en/javascript-debug-simples-com-google-analytics

对于互联网状态监测,我会build议我正在从事的服务:Sucuri NBIM(基于networking的完整性监测)。

它会进行可用性和完整性检查,查找互联网存在方面的变化(网站,DNS,WHOIS,标题等)以及连接性的丧失。 它是免费的,你可以在这里试试。