使用telegraf监控nginx(500' s)

时间:2018-03-23 13:03:12

标签: nginx nginx-reverse-proxy telegraf telegraf-inputs-plugin nginx-status

我想了解我的nginx实例返回的内容以及它要求处理请求的人。我的查询的哪一部分由rails处理,哪些部分由nginx直接处理,哪些部分由nginx_status处理,等等。

同样,我也想了解我返回的HTTP结果代码的数量。如果在500年代达到顶峰,我想知道。

telegraf nginx plugin提供了一些关于nginx的非常基本的统计数据但不多了。我已经看到了一些模糊复杂的结果代码解决方案,主要涉及设置日志监控基础架构。这些数据看起来如此根本,我觉得我必须遗漏一些东西。

我没有看到任何可以帮助我理解 实际上正在处理查询的内容(即哪个处理程序)。

所有这一切都很有趣,因为(1)处理程序调度的长期增长可以比处理机上的简单负载更清晰地指示扩展问题,(2)任何事物中的峰值都可以警告问题。

任何指针?

2 个答案:

答案 0 :(得分:0)

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

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

[[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"

答案 1 :(得分:0)

如果是实际的话,我想编写自己的配置。它基于尾部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和telegrap数据应在Graphana中可用。我配置了一个新图enter image description here
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