【问题标题】:What are good ways to create real-time stats for high-load webservers?为高负载网络服务器创建实时统计数据的好方法是什么?
【发布时间】:2011-09-07 15:25:32
【问题描述】:

假设我有一堆网络服务器,每个服务器每秒处理 100 个请求,我想查看实时统计信息,例如:

  • 过去 5 秒、60 秒、5 分钟等的请求率
  • 每个时间窗口内再次看到的唯一身份用户数

或者一般来说,对于一堆带时间戳的事件,我想查看实时派生的统计数据 - 最好的方法是什么?

我考虑过让每个 GET 请求在某处更新一个全局计数器,然后以不同的时间间隔对其进行采样,但在事件发生率下,我发现很难获得足够快的分布式计数器。

欢迎任何想法!

添加:服务器是运行 Apache/mod_wsgi 的 Linux,带有 Python (Django) 堆栈。 补充:为了了解我想要跟踪统计数据的事件率,它们以超过 10K 事件/秒的速度出现。即使以这种速率递增分布式计数器也是一项挑战。

【问题讨论】:

    标签: statistics monitoring


    【解决方案1】:

    您可能想帮助我们试用我们的代理测试版,以在 Python Web 应用程序中监控应用程序性能。

    http://newrelic.com

    它更多地研究应用程序的性能,而不仅仅是网络服务器,但由于不会产生任何瓶颈将是网络服务器,但你的应用程序无论如何都会更有用。

    免责声明。我为 New Relic 工作,这是我正在从事的项目。它是付费产品,但测试版意味着它现在是免费的,具有所有功能。稍后当这种情况发生变化时,如果您不想为此付费,它们仍然是免费的 Lite 订阅级别,它为您提供基本的网络指标报告,仍然涵盖您所追求的一些内容。无论如何,现在是一个很好的机会,可以利用它来调试你的性能。

    【讨论】:

    • 谢谢。在我们尝试 newrelic 时接受您的回答,虽然它不是我们想要的,但它似乎是一个不错的工具,可以满足问题的要求。
    【解决方案2】:

    几乎所有好的服务器都提供这种开箱即用的功能。例如,Apache 有 mod_status 模块,Glassfish 支持 JMX。此外,还有许多用于监控集群的商业包,例如 Hyperic 和 Zenoss。

    您使用的是什么网络或应用程序服务器?没有这些信息就很难提供解决方案。

    【讨论】:

    • 更多的是监控和整理业务级别的指标,例如唯一用户(AFAIK,Apache 不能这样做)或其他任意事件。我看过的大多数集群监视器都会以 10K 事件/秒的速度挣扎,这就是我正在处理的问题
    【解决方案3】:

    看看使用 WebSockets,它们的开销比 HTTP 请求小得多,它们非常适合实时 Web 应用程序。有关基于节点的 websocket 示例,请参阅:http://nodeknockout.com/

    http://en.wikipedia.org/wiki/WebSocket

    如果你想在你的 apache 服务器上运行它,你需要运行一个守护进程。

    还可以看看: http://kaazing.com/ 如果您不想减少麻烦,但愿意花一些钱。

    【讨论】:

    • 看不到 WebSockets 对此有何帮助。问题不在于我无法处理 10K req/s(我可以),而是监控在这种规模发生的事情是一个挑战
    • @Malcolm 我不确定你想要实现什么,但是......如果你使用 Node.js(一个事件驱动的平台,所有代码都是异步的)你可以跟踪所有实时处理这些请求,并在需要时存储它们。
    【解决方案4】:

    在 Windows 方面,Perfmonance monitor 是您应该研究的工具。

    正如Jared O'Connor所说,你应该明确你想要监控什么样的网络服务器。

    【讨论】:

      猜你喜欢
      • 2015-05-24
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多