我使用 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_redirects
NetData 模板中定义的阈值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 行。