Web应用程序监视最佳实践

时间:2009-01-30 15:52:04

标签: django deployment web-applications monitoring

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

使用Nagios接缝是一个不错的选择,但是想要获得更多关于Web应用程序的最佳监控工具/实践的意见,特别是对于Django应用程序?除了显而易见的CPU,内存,磁盘空间,数据库连接之外,还欢迎有关应该监控的内容的建议。

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

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

修改的 我们正在使用django-logging,因此我们有一种单独的信息,错误,关键问题等等。

18 个答案:

答案 0 :(得分:36)

Nagios很好,可能正常运行系统测试(Selenium)。

修改:HypericGroundwork看起来也很有趣。

可能有一个测试套件系统可以为您保持压力测试。我不记得我头顶的名字,也许有人可以在下面提一个。

我喜欢做的其他事情:

基础设施的最佳座右铭始终是修复,检测和修复。得到它,找到它的根源,并在可能的情况下治愈/预防它。

由于系统存在于多个层面,我们应该在多个层面进行测试:

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

1)连接:监控来自服务器和外部的互联网连接。记录这个地方

2)服务器:监控您需要的所有进程,以确保它们正在运行而不是固定服务器。使用HP服务器或类似的硬件故障通知,它可以从BIOS级别执行。如果是,请通知并记录。

3)软件:确定始终需要运行的关键软件。设置性能级别(如果有),然后监视它们。 Nagios应该能够帮助解决这个问题。在Windows上它可以多一点。发生异常时,您应该能够从中运行脚本以自动重新启动进程。我的梦想系统允许我通过短信与服务器进行交互,如果服务器将其视为我必须允许的例外,或者除非我通过短信取消,否则将自动发生。有一天......

4)远程电源:确保您手中有远程电源重置功能。如果你曾经使用过任何窗户,你可能想要安排每周重新启动。

5)业务逻辑测试:定期运行测试系统工作流程的脚本。 Selenium可能可以实现其中一些,但我喜欢记录结果,并说这次运行并且这些文件有错误。如果可能的话,让系统通过脚本监视自己。

6)备份:进行备份,您可以设置并忘记。如果您可以将其置于虚拟机中,那么它将非常理想,因为您可以在任何地方扩展,移动或部署基础架构的任何部分。我有一些实例,我将死了的服务器移到我的笔记本电脑上,让我在修复问题时在vmware中运行。

答案 1 :(得分:12)

监控与Web服务器和数据库的连接数是另一个需要跟踪的好事。如果一个人在屋顶射击,有些东西正在匮乏资源,而且该地点即将倒塌。这可能是事实。

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

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

答案 2 :(得分:11)

如果我必须选择一种类型的测试,那就是测试系统的最终用户功能。需要考虑的重要事情是用户。虽然测试数据库可用性,服务器正常运行时间等等都非常重要,但通过远程UI测试系统测试工作流程涵盖了所有这些基础。如果您知道最终用户可以使用系统的关键部分,那么您就知道您的系统非常好了。

  1. 确定系统中的重要工作流程。例如,如果您编写了电子商务网站,则可能会确定“搜索产品,将产品放入购物车,以及购买产品“。
  2. 优先考虑工作流程,并首先构建更高优先级的测试。您可以在投入生产后随时添加其他测试。
  3. 使用一个可用的UI测试框架构建UI测试。有许多免费和商业UI测试框架可以自动运行。首先构建一组核心测试,以解决关键工作流程。
  4. 至少设置一个运行测试的远程位置。您希望测试系统的各个方面,即远程测试。互联网连接? Web服务器是否正在运行?与数据库服务器的连接是否有效?等等。如果您进行远程测试,请确保您的系统可供外界使用,这意味着它最有可能端到端地工作。您也可以在内部运行这些测试,但我认为在外部运行它们至关重要。
  5. 确保您的解决方案同时包含报告和通知。如果您的某个关键工作流测试失败,您希望有人了解它以尽快解决问题。如果非关键任务失败,您可能只需要报告,以便可以在带外修复问题。
  6. 此最终用户测试不应该取消对数据中心系统的监控,但我想重申最终用户测试是您可以为Web应用程序执行的最重要的测试类型。

答案 3 :(得分:7)

啊,监视。我早上3点如何爱你和你的振动。

基本上,您需要一种方法来检查应用程序的内部状态,包括在特定时刻以及跨越时间跨度(后者对于在问题发生之前检测问题非常重要)。另一种思考方式就是美化单元测试。

我们有自己的(非常好的)监控系统,因此我无法评论Nagios或其他应用程序。我们的用例与你的用例类似(cache app on apache)。

  1. 添加logging.monitor()类型方法,该方法将信息记录到磁盘。这应该至少支持记录简单的数字和数字序列(key =>值关联可以非常方便)。
  2. 拥有一个抓取监控日志并将其存储到数据库中的流程。
  3. 拥有一个获取数据库信息,根据规则检查并发出警报的进程。请记住,有些东西可能是片状的。仅仅因为你有一个404 一次并不意味着它应用它。
  4. 有办法静音警报(对维护或阅读电子邮件非常有用)。
  5. 这都是相当高的水平。重要的是,您随时间了解应用程序状态的历史记录。从这里,您可以创建规则(可能只是您在某处配置的原始SQL查询),说“如果每秒查询加倍,发送SlashDotted警报”,或“如果50%的响应是404,请发送一个警报”。它还可以管理因素,因为您可以量化关于其上,下,快或慢的任何评论。

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

    简单的端到端测试也非常方便,但它们可能很脆弱。最好保持简单,但你应该有一个尝试触摸应用程序的核心部分(缓存,数据库,身份验证)。

答案 4 :(得分:5)

我使用MuninMonit,对他们两个都非常满意。

答案 5 :(得分:4)

监控任何在线网站的最重要方法是外部监控。目标应该是以最能反映用户使用网站方式的方式监控您的网站。在99%的情况下,只要您知道您的网站在外部发生故障,就可以相对轻松地找到根本原因。最重要的是尽快了解您的客户无法加载您的网站。

这通常意味着使用外部性能监控服务。他们非常低端(mon.itor.us,pingdom)到高端(Webmetrics,Gomez,Keynote)。和往常一样,你得到你付出的代价。购买监控服务时需要注意的事项包括:

  • 监控网络的大小和分布
  • 监控解决方案是否能够使用真实浏览器监控您的网站(否则您不会像真实用户那样测试您的网站)
  • 脚本语言(针对您​​网站的交易编写脚本)
  • 支持部门,为您提供帮助,并提供有关如何正确监控的专业知识
祝你好运!

答案 6 :(得分:4)

内部日志记录很好,但是当你的整个应用程序出现故障或你的盒子/环境崩溃时,你也需要进行外部检查。 http://www.pingdom.com/对我来说非常可靠。

我唯一的其他建议是我不会花费太多时间。我最好的例子是twitter,他们投入多少能量进入系统能够半死,而不是仅仅投入时间和精力投入更多硬件/扩展它。

最终可能会让你失望,你的伐木和健康系统无论如何都会错过。

答案 7 :(得分:3)

IP PatrolSiteSentry进行的网络监控对我们非常有用。第二个有点像网站信心,但稍微漂亮一点。

答案 8 :(得分:2)

除了已经回答的监控内容之外,您还需要确保 - 无论您使用何种系统 - 每次请求只能获得多次一次错误通知。或者你的收件箱将耗尽内存:)此外,它很烦人......

将支持/开发团队之间的待机转换分开,因此每个晚上都不需要一个人待命。那会让人失望。监控是好事,但每个人都需要有机会偶尔过一次生活。你的手机在凌晨2点嗡嗡几声,很快就会非常老了,相信我。并非每个开发人员都习惯于全天候支持,因此您需要在使用监控和滥用监控之间找到平衡点。

基本上,有不同的升级级别,如果天空没有下降,请在晚上定义一个“serenity now”窗口,其中较小的升级级别不会消失。

答案 9 :(得分:2)

我一直在使用 Nagios + CruiseControl + Selenium 来运行关键任务Web应用程序的高级测试。我被一个简单的jquery错误烧毁了,这个错误阻止了用户通过在线注册表单进行处理。

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

答案 10 :(得分:2)

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

答案 11 :(得分:2)

您是否考虑过监控功能?脚本(使用脚本语言,如Perl或Pyton或使用某些工具,如WebTest)与您的应用程序对话并执行一些重要步骤,如登录,进行购买等等,这是非常好的。

答案 12 :(得分:1)

用Richard Levasseur的话来解释:啊,监控工具,你的不完美之处让我感到沮丧。似乎没有一个完美的工具; Nagios很容易设置,但UI有点老式,你必须在每个被监控的服务器上运行一个守护进程。 Zenoss有一个更好的UI,包括资源使用的趋势图,但它使用SNMP,所以你必须熟悉它才能使它正常工作,文档不是最好的 - 有数百页但是很难找到开始所需的信息。

我的朋友也建议CactiHyperic,但我没有亲身经历。

最后一件事 - 其他一个答案建议运行一个强调您网站的工具。我不建议你在你的现场网站上这样做,除非你有一个可靠的安静时期,没有人打它;即便如此,你也可能意外地降低它。最好有一个登台服务器,您可以在将更改投入生产之前运行负载测试。

答案 13 :(得分:1)

  

可能正常运行系统测试(Selenium)。

=> 100%确认。我们使用http://www.alertfox.com来实现此目的。使用我们的PRO2帐户,他们会在1小时内进行回归测试,这很棒。您甚至可以使用他们的免费帐户执行此操作,但仅限于一个交易传感器。

答案 14 :(得分:0)

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

警报不收费,无论是什么类型或多少,它们都提供电子邮件,语音邮件和短信提醒 - 如果发生重大事件,可以通过电话直接来帮助您。

这一切都基于服务 - 您不安装软件,并且您有一位顾问与您合作,以确定最适合您业务的方法。它是最方便的web application monitoring服务之一,因为它们可以处理所有事情。

答案 15 :(得分:0)

我只想补充一点,您可以根据过去错误的历史记录并修复它们来预测错误可能性。对于较小规模的内部测试,如果要绘制已经纠正到的问题的频率和严重性,您将对可预测的新问题进行概述。如果一切都已经运行了一段时间没有错误,那么两个问题的根源就是最近的变化或可扩展性问题。

从上面可以看出,可扩展性是你唯一的担心,但我只是提到了过去的错误频率测试,因为我一直以来的团队总是认为他们已经修复了最后一个错误而且没有更多。直到有。

答案 16 :(得分:0)

稍微更改一行,我认为有用并且改变了很多我监控我的应用程序的方法是在某处记录javascript异常。有一个非常好的实现,可以直接从用户浏览器记录到Google Analytics。 对于以Javascript为中心的Web应用程序,这是必须的,并且可以直接在用户浏览器上为您提供可能导致非常意外错误的结果(iE和移动浏览器很痛苦)

免责声明:我的帖子如下

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

答案 17 :(得分:-1)

对于互联网存在监控,我会建议我正在进行的服务:Sucuri NBIM(基于网络的完整性监控)。

它执行可用性和完整性检查,查找您的Internet存在(站点,DNS,WHOIS,标头等)的更改以及连接丢失。这是免费的,你可以尝试here