我可以自定义 netdata 不提醒我有关 303 重定向吗?

我可以自定义 netdata 不提醒我有关 303 重定向吗?

我使用 303 代码(我认为是正确的)在用户提交表单后重定向用户。不幸的是,这意味着我每天都会收到几次来自 netdata 的警报,内容如下:

netdata notification
yoursite needs attention
web_log_yoursite.response_statuses
1m redirects = 21.1% 
the ratio of HTTP redirects (3xx except 304) over the last minute

我想定制这种行为,使它变成“(3xx 除 304 或 303 之外)”,但我不知道这是否可能或者我该如何去做。

谢谢

答案1

您对的目的的理解是正确的303 See Other,正如在RFC 7231 6.4.4

此状态代码适用于任何 HTTP 方法。它主要用于允许 POST 操作的输出将用户代理重定向到选定的资源,因为这样做可以以可以独立于原始请求单独识别、添加书签和缓存的形式提供与 POST 响应相对应的信息。

看来您的网站比普通网站更多地基于这些 POST 请求及其重定向,因此超出了1m_redirectsNetData 模板中定义的阈值conf.d/health.d/web_log.conf。最简单的方法是增加行warn:和的阈值crit:,因为配置中的“(3xx except 304)”仅仅是一个信息文本,而不是用于匹配日志行的逻辑的一部分:

template: 1m_redirects
      on: web_log.response_statuses
families: *
  lookup: sum -1m unaligned of redirects
    calc: $this * 100 / $1m_requests
   units: %
   every: 10s
    warn: ($1m_requests > 120) ? ($this > (($status >= $WARNING ) ? (  1 ) : ( 20 )) ) : ( 0 )
    crit: ($1m_requests > 120) ? ($this > (($status == $CRITICAL) ? ( 20 ) : ( 30 )) ) : ( 0 )
   delay: up 2m down 15m multiplier 1.5 max 1h
    info: the ratio of HTTP redirects (3xx except 304) over the last minute
      to: webmaster

的特殊处理304 Not Modified来自于这样一个事实,即它确实与 相当200 OK

RFC 7232,4.1。 304 未修改

状态304 (Not Modified)代码表示已收到条件 GET 或 HEAD 请求,200 (OK) 如果不是条件评估为 false,则会产生响应。换句话说,服务器无需传输目标资源的表示,因为请求表明发出条件请求的客户端已经具有有效表示;因此,服务器会重定向客户端以使用该存储的表示,就好像它是 200(OK)响应的有效负载一样。

python.d/web_log.chart.p以下行正确遵循了此定义746-761 和906-921:

746/906:    def get_data_per_statuses(self, code):
747/907:        """
748/908:        :param code: str: response status code. Ex.: '202', '499'
749/909:        :return:
750/910:        """
751/911:        code_class = code[0]
752/912:        if code_class == '2' or code == '304' or code_class == '1':
753/913:            self.data['successful_requests'] += 1
754/914:        elif code_class == '3':
755/915:            self.data['redirects'] += 1
756/916:        elif code_class == '4':
757/917:            self.data['bad_requests'] += 1
758/918:        elif code_class == '5':
759/919:            self.data['server_errors'] += 1
760/920:        else:
761/921:            self.data['other_requests'] += 1

如果您确实希望修改它以排除303,那么请添加or code == '303'到第 752 行和第 912 行。

相关内容