2

我想了解我的 nginx 实例返回的内容以及它要求谁处理请求。我的查询中有多少是由 rails 处理的,有多少是 nginx 直接处理的,有多少是转到 nginx_status 的,等等。

同样,我也想了解我返回了多少 HTTP 结果代码。如果500年代有一个高峰,我想知道。

telegraf nginx 插件提供了一些关于 nginx 的非常基本的统计信息,但仅此而已。对于结果代码,我已经看到了一些模糊复杂的解决方案,这些解决方案基本上涉及设置日志监控基础设施。这些数据似乎很重要,我觉得我一定遗漏了一些东西。

我没有看到任何东西可以帮助我了解在实际处理查询(即,哪个处理程序)。

所有这些都很有趣,因为 (1) 处理程序调度的长期增长可以比处理程序机器上的简单负载更清楚地表明扩展问题,并且 (2) 任何事物的峰值都可以提醒问题。

任何指针?

4

2 回答 2

1

如果它是实际的,我想编写我自己的配置。它基于tail telegraf插件。

  1. 将特殊日志格式添加到 http 部分
    log_format codes_combined 'code=$status ts=$time_iso8601';
  1. 在服务器部分使用此格式
    access_log /var/log/nginx/codes.log codes_combined;
  1. 编辑 /etc/telegraf/telegraf.conf:
[[inputs.tail]]
    files = ["/var/log/nginx/codes.log"]
    data_format = "logfmt"
  1. 重启 nginx 后,电报数据应该可以在 Graphana 中使用。我配置了一个新图表在此处输入图像描述
SELECT count("code") as code_2xx FROM "tail" WHERE $timeFilter AND code >= 200 AND code < 300 AND code  <> 204  GROUP BY time($__interval)
SELECT count("code") as  code_3xx  FROM "tail" WHERE $timeFilter AND code >= 300 AND code < 400 GROUP BY time($__interval)
SELECT count("code") as  code_4xx  FROM "tail" WHERE $timeFilter AND code >= 400 AND code < 500 GROUP BY time($__interval)
SELECT count("code") as  code_5xx  FROM "tail" WHERE $timeFilter AND code >= 500  GROUP BY time($__interval)
SELECT count("code") as code_204 FROM "tail" WHERE $timeFilter AND  code  = 204  GROUP BY time($__interval)
  1. 不要伪造检查/etc/logrotate.d/nginx。权限应该是这样的:
create 0644 www-data adm
于 2019-04-24T09:41:29.863 回答
0

你可以让 telegraf 收集你的 nginx 访问日志。然后您可以分析有多少请求具有哪个 HTTP 状态代码(1xx、2xx 等)。

将此添加到您的/etc/telegraf/telegraf.conf(并确保电报具有对日志文件的访问权限,如果没有,它不会告诉您):

[[inputs.logparser]]
   files = ["/var/log/nginx/access.log"]
   from_beginning = true
   name_override = "nginx_access_log"

   [inputs.logparser.grok]
     patterns = ["%{COMBINED_LOG_FORMAT}"]
     measurement = "nginx_access_log"
于 2018-10-01T23:39:09.000 回答