2

我想创建一个监视器,它将显示 Nginx 的近实时平均响应时间。

例如,下图显示了 CPU 使用情况,我想为avg response time

在此处输入图像描述

我知道如何跟踪单个请求的响应时间(https://lincolnloop.com/blog/tracking-application-response-time-nginx/

虽然我必须考虑如何忽略非页面/api 请求,例如静态图像请求。

这必须是非常基本的要求,但无法找到谷歌如何做到这一点。

4

1 回答 1

2

这实际上比您预期的要棘手:

Metricbeat

Metricbeat 的 nginx 模块不包含此信息。它是围绕stubstatus 构建的,并且更多地围绕流程本身而不是单个请求的时间安排。

文件节拍

Filebeat 的 nginx 模块是您可能期望的。它围绕 nginx 访问日志构建并具有单独的请求。不幸的是,响应时间默认不是访问日志的一部分(至少在 Ubuntu 上)——只有发送的字节数。这是一个示例(响应代码 200,发送了 158 个字节):

34.24.14.22 - - [10/Nov/2019:06:54:51 +0000] "GET / HTTP/1.1" 200 159 "-" "Go-http-client/1.1"

包节拍

这个领域有一个event.duration听起来很有希望的领域。但是要小心 HTTP 模块——这个模块实际上只用于 HTTP 流量而不是 HTTPS(因为你看不到加密的流量)。在大多数情况下,您会希望为您的应用程序使用 HTTPS,因此这并不是很有帮助,并且主要会显示到 HTTPS 的重定向。

其他协议,例如 TLS(这只是初始握手的时间)或流信息(这是一组数据包)不是您在 IMO 之后的样子。

定制

恐怕你需要一些定制,你基本上有两个选择:

  1. 自定义 nginx 的日志格式,如您链接到的博客文章中所述。您还需要更改 Elasticsearch 摄取管道中的模式以正确提取时间信息。
  2. 我假设您在 nginx 后面有一个应用程序。然后,您可能希望通过与各种语言的代理一起使用 (APM / tracking]( https://www.elastic.co/products/apm )来获得更多的洞察力,而不仅仅是计时。这样,您还可以自动跳过图像等静态资源,专注于应用程序的相关部分。
于 2019-11-11T01:12:14.240 回答