Могу ли я настроить 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_redirects
шаблон NetData's 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 был получен и привел бы к200 (OK)
ответ, если бы не тот факт, что условие оценивается как ложное. Другими словами, серверу нет необходимости передавать представление целевого ресурса, поскольку запрос указывает, что клиент, который сделал запрос условным, уже имеет допустимое представление; поэтому сервер перенаправляет клиента использовать это сохраненное представление, как если бы оно было полезной нагрузкой ответа 200 (ОК).
Это определение правильно соблюдается в 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.