Web-Server

我可以自定義 netdata 以不提醒我有關 303 重定向的資訊嗎?

  • August 30, 2018

在使用者送出表單後,我使用 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 除外)”,但我不知道這是否可能或我將如何去做。

謝謝

303 See Other正如RFC 7231 6.4.4中所述,您的目的是正確的。

此狀態碼適用於任何 HTTP 方法。它主要用於允許 POST 操作的輸出將使用者代理重定向到選定的資源,因為這樣做以可以單獨辨識、添加書籤和記憶體的形式提供與 POST 響應相對應的資訊,獨立於原始請求。

您的站點似乎比通常的站點更多地基於這些 POST 請求及其重定向,因此超出了1m_redirectsNetData 模板中定義的門檻值conf.d/health.d/web_log.conf。最簡單的方法是增加行warn:和的門檻值crit:,因為配置中的“(3xx 除外 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 請求,如果不是因為條件評估為 false 的事實,將導致響應200 (OK) 。換句話說,伺服器不需要傳輸目標資源的表示,因為請求表明使請求有條件的客戶端已經具有有效的表示;因此,伺服器正在重定向客戶端以使用該儲存的表示,就好像它是 200(OK)響應的有效負載一樣。

在第746 -761 和906python.d/web_log.chart.p -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

如果您真的希望將其修改為 exclude 303,請添加or code == '303'到第 752 和 912 行。

引用自:https://serverfault.com/questions/926487