Чтобы сравнить «сайт работает» с жалобами, нужен счёт: какая доля запросов обслужена нормально.
curl проверил один запрос — свой. Покупатели за те же часы отправили тысячи, и каждый из них nginx записал строкой в access.log (журнал доступа) с кодом ответа. О работе сервиса судят по всем этим запросам сразу.
Такой счёт называют SLI (Service Level Indicator, показатель уровня обслуживания) — доля хороших событий среди всех. У сайта событие — запрос, а SLI доступности — доля хороших ответов:
Хороший ответ или нет, решает класс кода — его первая цифра:
| Класс | Пример | Для доступности |
|---|---|---|
| 2xx | 200 — ответ отдан | хороший |
| 3xx | 304 — у браузера свежая копия | хороший |
| 4xx | 404 — такого адреса нет | хороший: ошибся клиент |
| 5xx | 500, 502, 503, 504 — сбой на сервере | плохой |
Ответы 404 в этом журнале — запросы к /favicon.ico и /wp-login.php, которых в магазине нет. Сайт ответил на них правильно. Плохой ответ — когда запрос нормальный, а сервис с ним не справился, то есть 5xx.
Код ответа — девятое поле строки, $9 в awk. Поле с цифрами awk сравнивает как число, поэтому плохие ответы отбирает условие $9 >= 500, а NR в конце — число всех строк:
Что станет с доступностью всего журнала, если считать плохими ещё и ответы 404?
-
Доступность — доля хороших ответов: один плохой её не обнуляет. 404 — около 5 % строк, на столько она и упадёт.
-
Попадают: в выводе
uniq -cв начале урока 404 — второй по частоте код после 200. -
Знаменатель — все строки журнала, он не меняется. Меняется число хороших: 404 переходят в плохие.
404 — около 5 % строк журнала: если считать их плохими, доступность упадёт примерно с 97 до 92 %. Сайт ответил на них правильно — адресов /favicon.ico и /wp-login.php в магазине нет, — поэтому SLI доступности их хорошими и считает.
Главное в шаге
- SLI — доля хороших событий среди всех; у сайта событие — запрос, а SLI доступности — доля хороших ответов.
- Плохие ответы — 5xx: сбой на стороне сервера. С ответами 2xx, 3xx и 4xx сервис справился.
- Один curl проверяет один запрос, SLI — все запросы покупателей за время счёта.