来自日志文件的实时统计数据

来自日志文件的实时统计数据

我在多个 Web 服务器前运行 nginx 作为负载均衡器。我希望能够查看响应时间的实时统计数据(可能是过去 10 秒的直方图?)

我认为 Varnish 有类似的东西

Tail 不是很有用,因为每秒大约有 1k 个请求

您知道有什么工具可以做到这一点吗?(只是为了让我不重新发明轮子)

编辑

我认为我在原帖中表达得不够清楚。我们已经使用 collectd 从所有服务器收集各种统计数据,并且我们有一个很好的界面来实时查看这些图表。

我正在寻找类似于 htop 的东西

答案1

我这里没有具体的解决方案,所以希望其他人能参与进来,但这看起来像是一项工作RRD工具。您需要查找(或编写)某些内容,将所需的数据从日志拉入循环数据库,但该工具设置为仅处理您所谈论的内容,即最新的时间序列数据块。

答案2

你知道Nginx 统计存根,对吧?该页面底部还有一些与 Nginx 监控技术相关的链接。不过,我不确定能否从中获取响应时间。

答案3

不幸的是,我不知道有任何现有的方法来获取实时响应时间数据。鉴于我认为您需要检查此类数据的情况很少,因此它所需的性能成本(即每个请求的额外处理/记录)似乎不合理。我建议简单地将响应时间数据记录到您的日志中(例如像这样) 并在您对数据感兴趣时运行 shell 脚本来解析部分日志(并输出摘要)。

实时统计数据并不难获得 - 但获取响应时间却比较困难。以下方法仅提供原始数据 - 它们不会为您绘制图表。

如果你能活下去没有响应时间(例如,仅请求/秒 - 以及读取,写入,活动,总连接数等的细分),使用HTTP 存根状态模块。它提供文本信息输出,可轻松查询和解析。(要使用此模块,Nginx 需要使用 进行编译--with-http_stub_status_module

示例输出:

Active connections: 291
server accepts handled requests
  16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106

(第三行是接受的连接数、处理的连接数、接受的请求数)

有一篇有趣的文章介绍了如何使用这些数据通过 rrdtool 生成图表,这里

如果响应时间数据对你来说特别重要,那么应该可以修改 Stub Status Module。代码(实际上只有大约 5kB)位于src/http/modules/ngx_http_stub_status_module.c。例如,有一个修改这里该模块输出返回的 HTTP 状态代码的汇总计数。

最后,如果您只想要响应时间。您可以使用HTTP 内存模块。出于直方图的目的,您基本上每秒创建 2 个键 - 根据时间创建键(例如$time_local) - 一个键用于存储该秒内请求数的计数器,另一个键用于存储平均响应时间(或累积响应时间) - 使用$request_time和/或$upstream_response_time变量。

我相信,一旦你有了数据,你就能想出一种简单的绘制数据图表的方法,但这里有一些可能的起点:

  • 使用脚本提取数据(从 stub、memcached 等)并生成 ASCII 条(例如像这样),用于watch监视脚本的输出。
  • 如果你的服务器有 PHP(并且你愿意使用它(不是理想的脚本语言)),请考虑修改这个脚本
  • 最后,也许可以考虑 gnuplot(输出as_ascii),尽管对于这个目的来说它似乎有点过度。

相关内容