Linux Labs

Практики SRE: SLO, инциденты, отказоустойчивость / Ступень 2 из 8

SLO и бюджет ошибок

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 5 из 6 · лаба · 30 минсредняя

Доступность и p95 по журналу

Скрипт, который по журналу nginx за любое окно времени считает доступность сайта и 95-й перцентиль времени ответа, — чтобы SLI считался одной командой вместо конвейера, набранного по памяти.

Ситуация

SLI магазина shop.lab.test — доступность и p95 времени ответа — дежурные до сих пор считают конвейером, который каждый набирает по памяти, и цифры за один и тот же час у всех выходят разные. Нужен один скрипт, которому доверяют все.

Журнал сайта — /var/log/nginx/shop.access.log (вчерашний — shop.access.log.1.gz), формат строки задан в /etc/nginx/conf.d/sre-log.conf: в конце строки — время ответа $request_time и unix-время запроса $msec. Журналы nginx читаются через sudo.

Задача

Напиши скрипт ~/sli.sh, который запускается так:

~/sli.sh LOG FROM TO
  • LOG — журнал nginx в этом формате, обычный или сжатый gzip (.gz);
  • FROM и TO — время в любом виде, который понимает date -d: '2026-10-22 13:00', '2026-10-22T13:00:00';
  • в окно попадают запросы с FROM включительно до TO не включая — по unix-времени запроса.

Скрипт печатает одну строку:

total=<запросов в окне> availability=<доступность> p95=<p95>
  • доступность — процент ответов с кодом меньше 500 среди всех запросов окна, две цифры после точки (93.04);
  • p95 — время ответа ближайшим рангом: времена по возрастанию, строка номер ⌈0,95 · total⌉, значение как в журнале;
  • за окно без запросов — total=0 availability=- p95=-.

Проверка запустит скрипт от твоего имени на своих журналах, которых на машине нет, поэтому sudo внутри скрипта не нужен. Сверить скрипт на журнале машины можно по ~/sli-check.txt: там команда и строка, которую она должна напечатать.

Нужные инструменты уже установлены. Интернета на машине нет.

Лаба · самостоятельно

Команды в этой лабе не даны: набирай их в терминале сам. Цели проверяются на машине после каждой команды.

Цели

0 из 4
  • ~/sli.sh — исполняемый скрипт, на журнале машины печатает одну строку total=… availability=… p95=… — ещё не выполнена
  • На журналах проверки total и доступность совпадают с эталоном — ещё не выполнена
  • На журналах проверки p95 совпадает с эталоном — ещё не выполнена
  • Сжатый журнал (.gz) скрипт читает сам, за окно без запросов печатает total=0 availability=- p95=- — ещё не выполнена
Ctrl+Enter
Запустит машину node1 · Ubuntu 24.04

Машина запускается

Подсказки

0 из 3

Цели лабы

0 из 4
  • ~/sli.sh — исполняемый скрипт, на журнале машины печатает одну строку total=… availability=… p95=… — ещё не выполнена
  • На журналах проверки total и доступность совпадают с эталоном — ещё не выполнена
  • На журналах проверки p95 совпадает с эталоном — ещё не выполнена
  • Сжатый журнал (.gz) скрипт читает сам, за окно без запросов печатает total=0 availability=- p95=- — ещё не выполнена
node1 Ubuntu 24.04

Цели лабы

0 из 4
  • ~/sli.sh — исполняемый скрипт, на журнале машины печатает одну строку total=… availability=… p95=… — ещё не выполнена
  • На журналах проверки total и доступность совпадают с эталоном — ещё не выполнена
  • На журналах проверки p95 совпадает с эталоном — ещё не выполнена
  • Сжатый журнал (.gz) скрипт читает сам, за окно без запросов печатает total=0 availability=- p95=- — ещё не выполнена
Загрузка…