【问题标题】:Monitoring nginx (500's) with telegraf使用 telegraf 监控 nginx(500 个)
【发布时间】:2018-03-23 13:03:12
【问题描述】:

我想了解我的 nginx 实例返回的内容以及它要求谁处理请求。我的查询中有哪些部分由 rails 处理,哪些部分由 nginx 直接处理,哪些部分正在前往 nginx_status,等等。

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

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

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

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

任何指针?

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      您可以让 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"
      

      【讨论】:

      • Logparser 已被弃用。这对于参考仍然有用(并且它现在仍然有效,我只是不会用它开始 new 设置)。
      猜你喜欢
      • 1970-01-01
      • 2018-09-22
      • 2019-06-13
      • 2019-09-17
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多