14 KiB
Автономное тройное ревью П30 · август 2020 · «Метрики приложения»
Статус: принят независимым редактором в выпусковой набор. В нём ровно три revision для стабильных slug:
editorial-2020-08-practice-metrics-basics;editorial-2020-08-mechanism-metrics-basics;editorial-2020-08-field-metrics-basics.
Созданы только пять разрешённых файлов П30:
web/scripts/upgrade-2020-08.mjs;web/public/assets/editorial/2020/metrics-signal-contract-2020.svg;web/public/assets/editorial/2020/metrics-label-boundary-2020.svg;web/public/assets/editorial/2020/metrics-diagnosis-2020.svg;- этот документ.
Module export не задаёт date или author. При будущей
интеграции registry может наложить только редакционные поля на базовые записи
архива. articles.json, registry, стандарт, очередь, package config
и Git данным пакетом не менялись. Команда --print-revisions
печатает только JSON, а --verify-fixture запускает отдельную
детерминированную проверку в памяти.
Проход 1. Факты и техника — пройдено
| Утверждение | Первичный или официальный источник | Проверенная граница |
|---|---|---|
Имя метрики описывает одну величину и единицу; для counter используется суффикс _total, duration измеряется в seconds |
Prometheus: Metric and label naming | store_http_requests_total отделён от store_http_request_duration_seconds; учебные имена не смешивают запросы, ошибки и время |
| Для online-serving системы полезно считать завершённые запросы, ошибки и latency; errors нужны рядом с числом попыток | Prometheus: Instrumentation | Counter увеличивается после завершения operation; operation и outcome ограничены allowlist |
| Counter накапливает события и при рестарте может сброситься; server-side query над окном не равен ручной разности двух точек | Prometheus: Instrumentation, Prometheus: Querying basics | PromQL с increase(...[10m]) приведён как будущий вопрос к серверу; fixture проверяет только монотонную учебную серию и не моделирует reset или scrape |
| Уникальная комбинация имени и labels создаёт отдельную time series; неограниченные значения раздувают storage | Prometheus: Metric and label naming, Prometheus: Instrumentation | Учебная арифметика 3 operations × 2 outcomes и пример с 100 user ID не выданы за RAM-, disk- или workload-замер |
| Counter, gauge, histogram и summary описывают разные формы величины | Prometheus: Metric types | Counter не назван current state; fixture с sum/count не выдаёт p95 или распределение за production telemetry |
Все четыре официальные страницы использованы для сверки смысла names, labels, types и запросов. Они не представлены как доказательство развернутого в августе 2020 года production-контура. В тексте нет claim о реальном Prometheus server, exporter, scrape interval, dashboard, alert delivery, нагрузке или производственном пороге.
Техническая граница учебной фикстуры
runMetricsFixture() создаёт четыре synthetic event, допускает
ровно catalog, checkout, profile и
success/error, затем формирует локальный exposition-текст. Вторая
часть fixture сравнивает две серии counter:
0 → 1 → 2за учебное окно даёт delta2и пересекает упражнение>= 2;0 → 1 → 1даёт delta1и его не пересекает.
Эта проверка не подменяет PromQL, target scrape, counter reset, network, storage, client library или alerting. Её задача уже: зафиксировать, что изменение labels или числа в учебном контракте не пройдёт незаметно.
Вердикт прохода: пройден. Утверждения о Prometheus отделены от учебной модели, а учебная модель — от запуска на реальной инфраструктуре.
Проход 2. Редактура, глубина и голос М3 — пройдено
| Ревизия | Симптом и цена в первых двух абзацах | Главный вопрос | Объём основного текста |
|---|---|---|---|
| Практика | Общий график requests не показывает operation и outcome; цена — поиск не по той границе и разрастание бесполезных линий | Как выбрать один completed-request signal, bounded labels и учебный threshold | 9 182 знаков body |
| Механизм | Уникальный label размножает series и делает запрос неясным; цена — хранение и потеря агрегированного смысла | Где заканчивается полезная dimension и почему request context живёт в журнале | 10 230 знаков body |
| Полевой разбор | Одна линия requests не объясняет деградацию; цена — шумный порог и правка timeout без факта | Как прочитать controlled counter-series, окно и threshold, не выдав их за production-диагноз | 9 480 знаков body |
- Во всех материалах начало устроено по схеме «симптом → цена → ограниченная учебная граница», затем следует «причина → проверка → действие».
- У каждой revision больше пяти смысловых разделов, есть figure с
самостоятельным
alt/figcaption, таблица сcaption/thead, code/query/fixture example, нумерованный маршрут и четыре официальные ссылки. - Статьи не используют общую риторику про важность наблюдаемости. Они фиксируют completed request, counter, seconds, operation/outcome, time series, окно, порог, log и следующий сценарий.
- Голос соответствует М3 / августу 2020 года. Автор связывает application-code с наблюдаемым измерением, но не приписывает себе SLO, error budget, observability platform, реальные production-значения или опыт большого инцидента.
- Все цифры в графике, таблице cardinality и пороге явно названы учебными. Нагрузка, допустимая ошибка и стоимость alert не придуманы вместо данных проекта.
Второй редакторский проход проверил, что count, duration и latency не
смешиваются. Counter не назван current state, а increase() не
выдана за ручную разность snapshots. Pseudocode над client library отмечен как
контракт labels, а не как запущенный exporter.
Вердикт прохода: пройден. Тексты укладываются в 5 000–15 000 знаков, остаются прагматичными и не перескакивают к зрелой платформенной терминологии.
Проход 3. Визуал, fixture и выпусковой preflight — пройдено в пределах пакета
metrics-signal-contract-2020.svgведёт от операционного вопроса к counter, двум ограниченным labels, учебному окну и действию после пересечения порога.metrics-label-boundary-2020.svgотделяет allowlistoperation/outcomeдля series от request ID, email и полного URL, которые остаются в журнале.metrics-diagnosis-2020.svgпоказывает три synthetic snapshots counter0 → 1 → 2, условиеincrease(...[10m]) = 2и следующий диагностический шаг.- У схем есть
title,desc,role="img", вертикальные viewBox 720 px, контрастные карточки и текст не мельче 20 px в исходном SVG. В них нет JavaScript,foreignObject, внешних URL или raster data URI. - Отдельный mobile preflight отрендерил все три SVG в PNG шириной 375 px через Sharp и просмотрел результат. У всех схем крупные заголовки, короткие строки и вертикальная композиция; clipping, наложение и горизонтальный overflow внутри SVG не обнаружены. Это статическая проверка visual asset, не browser-run и не test screen reader.
Фактически выполненные проверки
Запущены после финальной редакторской правки 31 июля 2026 года:
cd web && node --check scripts/upgrade-2020-08.mjs
cd web && npm run audit:draft -- scripts/upgrade-2020-08.mjs
cd web && node scripts/upgrade-2020-08.mjs --verify-fixture
cd web && xmllint --noout \
public/assets/editorial/2020/metrics-signal-contract-2020.svg \
public/assets/editorial/2020/metrics-label-boundary-2020.svg \
public/assets/editorial/2020/metrics-diagnosis-2020.svg
| Проверка | Реальный результат |
|---|---|
node --check |
PASS, code 0 |
| Import-safe export и draft gate | PASS: 9 182 / 10 230 / 9 480 знаков body; три slug, tables, figures, code, routes, sources и assets найдены |
| In-memory fixture | PASS: bounded labels сохранены, counter error checkout найден, threshold пересекается на 2 и не пересекается на 1 |
xmllint --noout |
PASS, все три SVG — корректный XML |
| Sharp mobile preflight | PASS: три PNG шириной 375 px просмотрены; нет clipping, наложения или horizontal overflow внутри схем |
| Scope/self-review | PASS: в revision нет date/author; созданы только пять файлов П30; чужие незакоммиченные пакеты не редактировались и не индексировались |
Независимая интеграционная приёмка
Основной редактор 31 июля 2026 года подключил три revision к
web/data/editorial-revisions.mjs, не меняя базовый
articles.json, даты или автора архивных записей. После подключения
в registry стало 85 revision. Отдельно выполнены:
| Проверка после интеграции | Реальный результат |
|---|---|
| Строгий audit трёх slug | PASS: 9 182 / 10 230 / 9 480 знаков; у каждой статьи один figure, одна table и два code example |
| Production build | PASS: Next.js собрал 374 статические страницы |
| Независимый mobile visual review | PASS: основной редактор повторно просмотрел все три SVG, отрендеренные Sharp в 375 px; clipping, overlap и overflow не обнаружены |
Ни этот отчёт, ни интеграция не утверждают, что был запущен настоящий Prometheus, exporter, scrape, browser или assistive technology. Они фиксируют границы автономного учебного пакета и результат статических проверок.
Выпусковой вердикт: ACCEPT. Commit и push выполняются отдельной публикационной операцией; Git остаётся источником её фактической записи.