Files
huncode 8e16858f16
Build and deploy / deploy (push) Successful in 13s
revise August 2020 metrics articles
2026-07-31 11:44:13 +03:00

14 KiB
Raw Permalink Blame History

Автономное тройное ревью П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 за учебное окно даёт delta 2 и пересекает упражнение >= 2;
  • 0 → 1 → 1 даёт delta 1 и его не пересекает.

Эта проверка не подменяет 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 отделяет allowlist operation/outcome для series от request ID, email и полного URL, которые остаются в журнале.
  • metrics-diagnosis-2020.svg показывает три synthetic snapshots counter 0 → 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 остаётся источником её фактической записи.