@luanpdd/kit-mcp 1.34.0 → 1.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/cli.js +2 -2
- package/bin/mcp.js +6 -6
- package/bin/ui.js +74 -74
- package/gates/ai-prompt-stability.md +120 -120
- package/gates/budget-description.md +68 -68
- package/gates/confidence.md +29 -29
- package/gates/dependency-check.md +33 -33
- package/gates/dept-cycle-prevention.md +179 -179
- package/gates/golden-signals-coverage.md +133 -133
- package/gates/legacy-refactor-safety.md +178 -178
- package/gates/multi-tenant-rls-coverage.md +102 -102
- package/gates/no-personal-uuid.md +72 -72
- package/gates/obs-agents-mcp-supabase.md +86 -86
- package/gates/obs-skills-frontmatter.md +76 -76
- package/gates/observability-coverage.md +151 -151
- package/gates/omm-no-regression.md +83 -83
- package/gates/postmortem-template-required.md +127 -127
- package/gates/prr-checklist-coverage.md +128 -128
- package/gates/regression.md +32 -32
- package/gates/release-pipeline-policy.md +132 -132
- package/gates/secrets-scan.md +33 -33
- package/gates/service-role-not-in-user-facing.md +113 -113
- package/gates/skill-must-include.md +71 -71
- package/gates/sync-idempotent.md +62 -62
- package/gates/verify-phase-goal.md +34 -34
- package/kit/agents/designer-ui.md +216 -216
- package/kit/agents/workflow-generator.md +537 -0
- package/kit/commands/adicionar-backlog.md +1 -1
- package/kit/commands/adicionar-fase.md +1 -1
- package/kit/commands/adicionar-tarefa.md +1 -1
- package/kit/commands/auditar-observabilidade.md +103 -103
- package/kit/commands/auditar-toil.md +129 -129
- package/kit/commands/caracterizar-prompt.md +195 -195
- package/kit/commands/criar-workflow.md +158 -0
- package/kit/commands/definir-perfil.md +1 -1
- package/kit/commands/definir-slo.md +108 -108
- package/kit/commands/fio.md +1 -1
- package/kit/commands/golden-signals.md +142 -142
- package/kit/commands/instrumentar-fase.md +200 -200
- package/kit/commands/investigar-producao.md +162 -162
- package/kit/commands/observabilidade.md +118 -118
- package/kit/commands/postmortem.md +179 -179
- package/kit/commands/prr.md +205 -205
- package/kit/commands/publicar-rapido.md +207 -207
- package/kit/commands/risk-budget.md +220 -220
- package/kit/commands/sre.md +230 -230
- package/kit/file-manifest.json +5 -2
- package/kit/framework/references/output-style.md +22 -22
- package/kit/hooks/post-apply-migration.js +199 -199
- package/kit/hooks/sidecar-tool-publisher.js +210 -210
- package/kit/skills/_shared-dados-distribuidos/glossary.md +224 -224
- package/kit/skills/_shared-legacy/glossary.md +389 -389
- package/kit/skills/_shared-multi-tenant/glossary.md +186 -186
- package/kit/skills/_shared-observability/glossary.md +396 -396
- package/kit/skills/_shared-sre/glossary.md +712 -712
- package/kit/skills/_shared-supabase/glossary.md +234 -234
- package/kit/skills/blameless-postmortems/SKILL.md +340 -340
- package/kit/skills/burn-rate-alerting/SKILL.md +258 -258
- package/kit/skills/cascading-failures/SKILL.md +311 -311
- package/kit/skills/core-analysis-loop/SKILL.md +352 -352
- package/kit/skills/distributed-tracing/SKILL.md +362 -362
- package/kit/skills/dynamic-workflow-authoring/SKILL.md +327 -0
- package/kit/skills/eliminating-toil/SKILL.md +243 -243
- package/kit/skills/event-based-slos/SKILL.md +296 -296
- package/kit/skills/four-golden-signals/SKILL.md +314 -314
- package/kit/skills/hermetic-builds/SKILL.md +323 -323
- package/kit/skills/legacy-monster-methods/SKILL.md +444 -444
- package/kit/skills/llm-as-dependency/SKILL.md +436 -436
- package/kit/skills/load-shedding-graceful-degradation/SKILL.md +396 -396
- package/kit/skills/observability-driven-development/SKILL.md +315 -315
- package/kit/skills/observability-maturity-model/SKILL.md +222 -222
- package/kit/skills/opentelemetry-standard/SKILL.md +351 -351
- package/kit/skills/production-readiness-review/SKILL.md +305 -305
- package/kit/skills/release-engineering/SKILL.md +367 -367
- package/kit/skills/retry-strategies/SKILL.md +372 -372
- package/kit/skills/sre-risk-management/SKILL.md +221 -221
- package/kit/skills/structured-events/SKILL.md +265 -265
- package/kit/skills/supabase-cron-queues/SKILL.md +275 -275
- package/kit/skills/supabase-database-functions/SKILL.md +332 -332
- package/kit/skills/supabase-declarative-schema/SKILL.md +183 -183
- package/kit/skills/supabase-pgvector-rag/SKILL.md +253 -253
- package/kit/skills/supabase-postgres-style/SKILL.md +138 -138
- package/kit/skills/supabase-storage/SKILL.md +234 -234
- package/kit/skills/telemetry-pipelines/SKILL.md +259 -259
- package/kit/skills/telemetry-sampling/SKILL.md +256 -256
- package/kit/skills/ui-anti-padroes-ia/SKILL.md +261 -261
- package/kit/skills/ui-contexto-produto/SKILL.md +248 -248
- package/kit/skills/ui-cor-estrategia/SKILL.md +213 -213
- package/kit/skills/ui-critica-auditoria/SKILL.md +260 -260
- package/kit/skills/ui-motion-funcional/SKILL.md +264 -264
- package/kit/skills/ui-ritmo-espacial/SKILL.md +259 -259
- package/kit/skills/ui-tipografia/SKILL.md +211 -211
- package/package.json +1 -1
- package/src/cli/index.js +1114 -1114
- package/src/cli/render.js +194 -194
- package/src/cli/upgrade-check.js +135 -135
- package/src/core/error-redaction.js +76 -76
- package/src/core/failures.js +153 -153
- package/src/core/gate-runner.js +205 -205
- package/src/core/gates.js +82 -82
- package/src/core/logger.js +170 -170
- package/src/core/manifest-verify.js +174 -174
- package/src/core/metrics.js +268 -268
- package/src/core/notify.js +60 -60
- package/src/core/path-safety.js +141 -141
- package/src/core/replays.js +120 -120
- package/src/core/ui.js +185 -185
- package/src/mcp-server/install.js +149 -149
- package/src/mcp-server/roots.js +124 -124
- package/src/ui/auto-spawn.js +113 -113
- package/src/ui/browser.js +78 -78
- package/src/ui/client.js +130 -130
- package/src/ui/events.js +65 -65
- package/src/ui/lockfile.js +191 -191
- package/src/ui/port.js +67 -67
- package/src/ui/server.js +547 -547
- package/src/ui/wrapper.js +129 -129
|
@@ -1,712 +1,712 @@
|
|
|
1
|
-
# Glossário SRE — Termos, Comandos e Patterns Canônicos
|
|
2
|
-
|
|
3
|
-
> Arquivo de referência compartilhado pelas skills `sre-*`, `four-golden-signals`, `eliminating-toil`, `blameless-postmortems`, `production-readiness-review`. **NÃO é skill** — não tem `description:` triggerável; não aparece em `listKit`. Cross-referenciado pelas skills via Markdown link relativo.
|
|
4
|
-
|
|
5
|
-
> **Material-fonte:** *Site Reliability Engineering: How Google Runs Production Systems* — Beyer, Jones, Petoff, Murphy (Google/O'Reilly, 2016). ISBN 978-1-491-92912-4.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## (a) Termos PT-BR ↔ EN
|
|
10
|
-
|
|
11
|
-
### Risk e Reliability
|
|
12
|
-
|
|
13
|
-
> Vocabulário do cap 3 (Embracing Risk). Reliability é tratada como continuum, não absoluto. Custo de "9s" cresce não-linearmente; user perception satura em torno de 99.95%-99.99% para serviços user-facing.
|
|
14
|
-
|
|
15
|
-
| EN | PT-BR / Significado |
|
|
16
|
-
|---|---|
|
|
17
|
-
| **risk continuum** | Continuum de risco — 100% de disponibilidade NÃO é o objetivo; o custo cresce não-linearmente com cada "9". Usuário em smartphone com 99% de disponibilidade não distingue 99.99% de 99.999% no serviço. |
|
|
18
|
-
| **as reliable as needs to be, no more** | "Tão confiável quanto precisa ser, não mais" — princípio Google SRE. Sobrar reliability é tão danoso quanto faltar (custa innovation velocity). |
|
|
19
|
-
| **99.99% wisdom** | Sabedoria do 99.99% — além desse target o usuário final não percebe melhoria, porque o link "fraco" entre ele e o serviço (smartphone, ISP, Wi-Fi) já dilui qualquer ganho marginal. |
|
|
20
|
-
| **availability target** | Alvo de disponibilidade — escolha explícita no balanço risk × innovation × cost. NÃO é meta arbitrária do CTO. |
|
|
21
|
-
| **error budget** | Orçamento de erro — `(1 - SLO_target) × total_events`. Fração tolerável de eventos "bad" antes de violar o SLO. Quando esgota, freeze releases. |
|
|
22
|
-
| **risk × innovation tradeoff** | Tradeoff risco × inovação — quanto mais inovação, mais risco. O budget é o mediador EXPLÍCITO desse tradeoff, alinhando dev e SRE. |
|
|
23
|
-
| **MTTR** | Mean Time To Recovery — tempo médio entre detecção do incident e recovery completo. Métrica chave do OMM Capacidade 1 (Resilience). |
|
|
24
|
-
| **MTBF** | Mean Time Between Failures — tempo médio entre falhas consecutivas. Mede estabilidade do serviço em prod. |
|
|
25
|
-
| **MTTF** | Mean Time To Failure — tempo médio até primeira falha (sem recovery). Comum em hardware, raro em serviços (que sempre recovery). |
|
|
26
|
-
|
|
27
|
-
### SLI/SLO/SLA
|
|
28
|
-
|
|
29
|
-
> Vocabulário do cap 4 (Service Level Objectives). SLI é a métrica; SLO é a meta interna; SLA é o contrato externo. SLA geralmente é menos rígido que SLO (gap = margem de segurança).
|
|
30
|
-
|
|
31
|
-
| EN | PT-BR / Significado |
|
|
32
|
-
|---|---|
|
|
33
|
-
| **SLI** | Service-Level Indicator — métrica que classifica eventos como "good" ou "bad". Sempre **event-based** (não time-based), com numerador/denominador definidos em events. |
|
|
34
|
-
| **SLO** | Service-Level Objective — meta interna de SLI (ex: 99.9% das requests good em janela 30d sliding). Drives engineering priorities. |
|
|
35
|
-
| **SLA** | Service-Level Agreement — acordo externo com cliente. Geralmente menos rígido que SLO (gap = margem). Violá-lo gera consequências contratuais (refund, credit). |
|
|
36
|
-
| **availability** | Disponibilidade — fração de tempo OU eventos em estado utilizável. Definição event-based é canônica (cap 4). |
|
|
37
|
-
| **latency** | Latência — tempo de resposta. **Sempre em percentis** (p50, p95, p99, p99.9), nunca em mean. |
|
|
38
|
-
| **throughput** | Vazão — requests/segundo OU eventos/minuto. Mede demanda atendida. |
|
|
39
|
-
| **correctness** | Correção — resposta certa para input dado. Distinto de availability (sistema "up" pode estar retornando dado errado). |
|
|
40
|
-
| **durability** | Durabilidade — dado armazenado sobrevive ao tempo. Storage SLO. |
|
|
41
|
-
| **time-to-first-byte** (TTFB) | Tempo até o primeiro byte da resposta — métrica de UX importante para serviços HTTP. |
|
|
42
|
-
|
|
43
|
-
### Four Golden Signals
|
|
44
|
-
|
|
45
|
-
> Vocabulário do cap 6 (Monitoring Distributed Systems). Latency + Traffic + Errors + Saturation são os 4 sinais mínimos universais para qualquer serviço user-facing. Originados de SREs operando os serviços do Google.
|
|
46
|
-
|
|
47
|
-
| EN | PT-BR / Significado |
|
|
48
|
-
|---|---|
|
|
49
|
-
| **Latency** | Latência — tempo de resposta. **Latência de success vs failure deve ser medida SEPARADAMENTE** — falhas rápidas mascaram falhas lentas e vice-versa. Sempre em percentis. |
|
|
50
|
-
| **Traffic** | Tráfego — volume de demanda no sistema. HTTP requests/s, mensagens/s, bytes/s. Counter monotônico. |
|
|
51
|
-
| **Errors** | Erros — taxa de requests falhas. **Explícitas** (5xx), **implícitas** (200 com resposta errada), **políticas** (200 mas latência > SLO). Counter por `error.type`. |
|
|
52
|
-
| **Saturation** | Saturação — "quão cheio" o serviço está. Medida do recurso MAIS LIMITADO (CPU, memória, conn pool, IO). Gauge resource-specific. |
|
|
53
|
-
| **golden signals** | Sinais dourados — conjunto Latency+Traffic+Errors+Saturation. Universal para qualquer serviço user-facing. Se você só pode medir 4 coisas, meça essas. |
|
|
54
|
-
| **black-box monitoring** | Monitoramento caixa-preta — testar o serviço como usuário externo. HTTP probes, synthetic transactions. Detecta sintoma do POV do cliente. |
|
|
55
|
-
| **white-box monitoring** | Monitoramento caixa-branca — introspecção interna. Logs, métricas, traces. Detecta causa, não apenas sintoma. |
|
|
56
|
-
| **histogram** | Histograma — distribuição com buckets. **Latência sempre em histogram, nunca gauge** — gauge perde long tail. |
|
|
57
|
-
| **exponential bucketing** | Bucketing exponencial — buckets crescem em razão `1.5×` ou `2×` (ex: `1, 2, 5, 10, 25, 50, 100, 250...`). Captura long tail sem explodir cardinalidade. |
|
|
58
|
-
| **percentile** | Percentil — `p50`, `p95`, `p99`, `p99.9`. Latência SEMPRE em percentis. p99 = "99% das requests respondem em ≤ X ms". |
|
|
59
|
-
| **mean** | Média — **anti-pattern para latência**. Long tail invisível: mean = 50ms mas p99 = 5s mascara experiência ruim de 1% dos usuários. |
|
|
60
|
-
| **long tail** | Cauda longa — eventos lentos que dominam UX percebida mas somem na média. Captados por p99/p99.9 e por histograms com buckets exponenciais. |
|
|
61
|
-
|
|
62
|
-
### Toil
|
|
63
|
-
|
|
64
|
-
> Vocabulário do cap 5 (Eliminating Toil). Toil é o trabalho operacional manual repetitivo automatizável que rouba tempo de engineering durável. Definição canônica Google: 6 critérios.
|
|
65
|
-
|
|
66
|
-
| EN | PT-BR / Significado |
|
|
67
|
-
|---|---|
|
|
68
|
-
| **toil** | Trabalho operacional manual repetitivo, automatizável, tático, sem valor durável, escala linear com tamanho do serviço. **Os 6 critérios canônicos**: manual, repetitivo, automatizável, tático (reativo), sem valor durável, escala linear. |
|
|
69
|
-
| **toil ≤ 50% rule** | Regra ≤ 50% — SRE não pode gastar mais que 50% do tempo em toil. Restante é engineering durável (automação, redesign, reliability work). |
|
|
70
|
-
| **automation** | Automação — eliminação de toil via código que se executa sem humano. Cron, queue, daemon, script idempotente. |
|
|
71
|
-
| **overhead** | Overhead administrativo — reuniões, RH, planning, 1:1s. **NÃO é toil** — é não-eliminável. |
|
|
72
|
-
| **grungy work** | Trabalho ingrato — refactor, security cleanup, deprecation migration. **NÃO é toil** — tem valor durável (asset permanente após conclusão). |
|
|
73
|
-
| **toil tax** | Imposto de toil — custo oculto que cresce linearmente com o produto. Prevenir > remediar — design para minimizar toil é mais barato que automação retroativa. |
|
|
74
|
-
|
|
75
|
-
### Postmortem
|
|
76
|
-
|
|
77
|
-
> Vocabulário do cap 15 (Postmortem Culture). Postmortem é blameless por construção — foca em sistema/processo, não pessoas. Princípio: "no postmortem left unreviewed".
|
|
78
|
-
|
|
79
|
-
| EN | PT-BR / Significado |
|
|
80
|
-
|---|---|
|
|
81
|
-
| **postmortem** | Postmortem — documento escrito após incident registrando timeline, causes, ações. Único deliverable obrigatório de toda Severidade SEV1/SEV2. |
|
|
82
|
-
| **blameless** | Sem culpa — foca em sistemas/processos, NÃO em pessoas. Psychological safety é pré-requisito para honesty. Pessoas escondem fatos quando culpadas. |
|
|
83
|
-
| **root cause** | Causa raiz — condição mais profunda que, removida, previne recorrência. NÃO é "fulano fez deploy errado" — é "ausência de canary release" ou "RPS limit não documentado". |
|
|
84
|
-
| **contributing factors** | Fatores contribuintes — condições que amplificaram impacto mas não foram raiz. Ex: "monitoring lag de 4 min" (impacto), não "deploy ruim" (trigger). |
|
|
85
|
-
| **trigger** | Gatilho — evento concreto que iniciou a falha. Geralmente deploy, config change, traffic spike, third-party outage. |
|
|
86
|
-
| **detection** | Detecção — como o incident foi descoberto. Alerta SLO burn rate? Cliente reportou? Monitoramento interno? Tempo de detecção (gap trigger → detect) é métrica chave. |
|
|
87
|
-
| **resolution** | Resolução — passos tomados para recuperar serviço. Ordem cronológica, com horários UTC. |
|
|
88
|
-
| **impact** | Impacto — usuários/revenue/reputação afetados. **Sempre quantificar** — "10K usuários afetados", "$50K revenue impact", "3% violação do SLO mensal". |
|
|
89
|
-
| **action items** | Ações pós-postmortem — SMART (specific, measurable, assignable, realistic, time-bound) com owner. P0/P1/P2 + due date. |
|
|
90
|
-
| **lessons learned** | Lições aprendidas — insights generalizáveis para outros sistemas/times. O que estamos fazendo BEM (reforçar)? O que faltou (corrigir)? |
|
|
91
|
-
| **Wheel of Misfortune** | Roda da Desgraça — exercício de role-play para training. Uma pessoa narra incident histórico, time pratica response. Cap 15 recomenda quartely. |
|
|
92
|
-
| **no postmortem left unreviewed** | Princípio canônico — todo postmortem revisado por par sênior antes de arquivar. Sem review = postmortem morre na gaveta. |
|
|
93
|
-
|
|
94
|
-
### PRR — Production Readiness Review
|
|
95
|
-
|
|
96
|
-
> Vocabulário do cap 32 (Evolving SRE Engagement Model). PRR é o checklist conduzido por SREs antes de aceitar serviço em produção. 3 modelos: Simple PRR, Early Engagement, Frameworks/Platform.
|
|
97
|
-
|
|
98
|
-
| EN | PT-BR / Significado |
|
|
99
|
-
|---|---|
|
|
100
|
-
| **PRR** | Production Readiness Review — checklist conduzido por SREs antes de aceitar serviço em produção. Output: PRR-REPORT.md scored em 6 axes. |
|
|
101
|
-
| **Simple PRR** | Modelo simples — SRE revisa, time dev implementa. Modelo de entrada para serviços simples. |
|
|
102
|
-
| **Early Engagement** | Engagement antecipado — SRE participa desde design. Decisões arquiteturais ganham reliability input antes de escrita de código. |
|
|
103
|
-
| **Frameworks/SRE Platform** | Frameworks/plataforma SRE — libs/templates que tornam serviços PRR-ready by default. Codifica reliability como dependência, não como checklist. |
|
|
104
|
-
| **production-bound** | Destinado a produção — feature/serviço que será exposto a usuários reais. Disparador de PRR obrigatório. |
|
|
105
|
-
| **6 axes of PRR** | 6 eixos do PRR — System Architecture, Instrumentation/Metrics/Monitoring, Emergency Response, Capacity Planning, Change Management, Performance. |
|
|
106
|
-
| **engagement model** | Modelo de engagement — como SRE se relaciona com time dev (Simple PRR / Early Engagement / Frameworks). Evolui com maturidade do produto. |
|
|
107
|
-
| **handoff readiness** | Prontidão para handoff — ponto em que dev pode entregar serviço ao SRE para operação. PRR scored ≥ threshold em todos os 6 axes. |
|
|
108
|
-
| **SRE platform** | Plataforma SRE — conjunto de libs+templates+gates que codifica PRR-readiness. v1.10 do kit-mcp aproxima desse modelo (skills + agents + commands + gates). |
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## (b) Comandos canônicos
|
|
113
|
-
|
|
114
|
-
### Template canônico de Postmortem (Markdown)
|
|
115
|
-
|
|
116
|
-
> Estrutura canônica do cap 15. Use literal este shape para qualquer postmortem do projeto. 9 headers obrigatórios + frontmatter de metadata.
|
|
117
|
-
|
|
118
|
-
```markdown
|
|
119
|
-
# Postmortem: <incident-id> — <título-curto>
|
|
120
|
-
|
|
121
|
-
**Data do incident:** YYYY-MM-DD
|
|
122
|
-
**Autores:** <nomes>
|
|
123
|
-
**Status:** Draft | Reviewed | Final
|
|
124
|
-
**Severidade:** SEV1 | SEV2 | SEV3
|
|
125
|
-
|
|
126
|
-
## Summary
|
|
127
|
-
|
|
128
|
-
1-2 parágrafos: o que aconteceu, quem foi afetado, como foi resolvido. Linguagem clara — postmortem deve ser legível para alguém que NÃO estava no incident.
|
|
129
|
-
|
|
130
|
-
## Impact
|
|
131
|
-
|
|
132
|
-
- Usuários afetados: <número/percentual>
|
|
133
|
-
- Duração: HH:MM
|
|
134
|
-
- Revenue/SLO impact: <quantificado>
|
|
135
|
-
- Serviços downstream impactados: <lista>
|
|
136
|
-
|
|
137
|
-
## Root Causes
|
|
138
|
-
|
|
139
|
-
Condição mais profunda que, removida, previne recorrência. NÃO é "deploy do fulano" — é "ausência de canary release" ou "RPS limit não documentado". Pode haver múltiplas root causes.
|
|
140
|
-
|
|
141
|
-
## Trigger
|
|
142
|
-
|
|
143
|
-
Evento concreto que iniciou a falha (deploy X, config change Y, traffic spike Z). Distinto de root cause: trigger é o que acendeu a chama, root cause é a casa cheia de gás.
|
|
144
|
-
|
|
145
|
-
## Resolution
|
|
146
|
-
|
|
147
|
-
Passos tomados para recuperar serviço (ordem cronológica, com horários UTC). Inclui ações que NÃO funcionaram — para informar próximos incidents.
|
|
148
|
-
|
|
149
|
-
## Detection
|
|
150
|
-
|
|
151
|
-
Como descobrimos: alerta SLO burn rate? cliente reportou? monitoramento interno?
|
|
152
|
-
Tempo de detecção (gap entre trigger e detecção). Se cliente reportou primeiro = falha de monitoring.
|
|
153
|
-
|
|
154
|
-
## Action Items
|
|
155
|
-
|
|
156
|
-
| # | Action | Owner | Priority | Due |
|
|
157
|
-
|---|--------|-------|----------|-----|
|
|
158
|
-
| 1 | <SMART action> | @user | P0/P1/P2 | YYYY-MM-DD |
|
|
159
|
-
|
|
160
|
-
## Lessons Learned
|
|
161
|
-
|
|
162
|
-
Insights generalizáveis. O que estamos fazendo BEM (reforçar)? O que faltou (corrigir)? Aplicável a OUTROS sistemas/times além do afetado.
|
|
163
|
-
|
|
164
|
-
## Timeline (UTC)
|
|
165
|
-
|
|
166
|
-
- HH:MM — <evento>
|
|
167
|
-
- HH:MM — <evento>
|
|
168
|
-
- HH:MM — <resolution>
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### Checklist canônico de PRR (6 axes)
|
|
172
|
-
|
|
173
|
-
> Checklist conduzido pelo SRE antes de aceitar serviço/feature em produção. Cap 32. Cada axis tem 3-5 itens; score 0-2 por item, total normalizado em 0-100% por axis. Threshold default: ≥ 80% em todos para handoff readiness.
|
|
174
|
-
|
|
175
|
-
1. **System Architecture**
|
|
176
|
-
- Redundância: serviço tem replicas em ≥ 2 zonas? failover testado?
|
|
177
|
-
- Single point of failure: identificado e mitigado? (DB primary, Redis instance, etc.)
|
|
178
|
-
- Failure modes mapeados: cada dependência tem comportamento documentado em caso de falha?
|
|
179
|
-
- Load balancing strategy: round-robin? least-conn? consistent-hash? Adequada ao perfil?
|
|
180
|
-
- Graceful degradation: serviço opera (modo degradado) se dependência crítica falha?
|
|
181
|
-
|
|
182
|
-
2. **Instrumentation, Metrics, Monitoring**
|
|
183
|
-
- 4 golden signals presentes: Latency (histogram), Traffic (counter), Errors (counter), Saturation (gauge)?
|
|
184
|
-
- SLI/SLO definidos: ≥ 1 SLI canônico (event-based) com SLO target acordado com stakeholders?
|
|
185
|
-
- Alertas SLO burn-rate (não threshold): paginam baseados em consumo de error budget, não CPU%?
|
|
186
|
-
- Logs estruturados: JSON com `request.id`, `user.id`, `tenant_id`, `duration_ms`, `error.type`?
|
|
187
|
-
- Traces propagados: `traceparent` header preservado cross-service via OTel SDK?
|
|
188
|
-
|
|
189
|
-
3. **Emergency Response**
|
|
190
|
-
- Runbook existe e foi testado: documento PT-BR/EN para top-N incidents conhecidos?
|
|
191
|
-
- On-call rotation definida: escala via PagerDuty/Opsgenie/equivalente, com follow-the-sun se aplicável?
|
|
192
|
-
- Page routing: alerta certo chega na pessoa certa em ≤ 5 min?
|
|
193
|
-
- Escalation policy: se primary não ack em 10 min, secondary é paged?
|
|
194
|
-
- Wheel of Misfortune realizado nos últimos 90d: time praticou response em incident histórico?
|
|
195
|
-
|
|
196
|
-
4. **Capacity Planning**
|
|
197
|
-
- Load test feito: serviço sustenta N% acima do peak observado em últimos 30d?
|
|
198
|
-
- RPS limit documentado: capacidade conhecida por endpoint, com hard-stop antes do colapso?
|
|
199
|
-
- Auto-scaling testado: regra de scale-up/down disparada em condição realista?
|
|
200
|
-
- Quota/rate-limit por tenant: prevenção de noisy-neighbor entre clients?
|
|
201
|
-
- Headroom ≥ 30%: utilization atual ≤ 70% para absorver spike?
|
|
202
|
-
|
|
203
|
-
5. **Change Management**
|
|
204
|
-
- Canary release: novo deploy expõe a 1-10% antes de 100%?
|
|
205
|
-
- Feature flags: changes desacopladas de deploy, rollback sem rebuild?
|
|
206
|
-
- Rollback automatizado: SLO burn em canary dispara rollback em ≤ 5 min sem humano?
|
|
207
|
-
- CI/CD gates obrigatórios: tests + lint + security scan antes de merge?
|
|
208
|
-
- Deploy frequency mensurado: cadência conhecida + correlação com incidents?
|
|
209
|
-
|
|
210
|
-
6. **Performance**
|
|
211
|
-
- Latência baseline (p50/p95/p99): valor conhecido + alerta em regressão?
|
|
212
|
-
- Error budget definido: budget remanescente visível em dashboard, atualizado em real-time?
|
|
213
|
-
- Saturation tracked: CPU/memória/conn pool/IO trackeados como gauge?
|
|
214
|
-
- Long tail (p99.9) monitored: percentil extremo medido — não basta p95?
|
|
215
|
-
|
|
216
|
-
### Queries SLI standardized (Postgres)
|
|
217
|
-
|
|
218
|
-
> Queries canônicas para materializar SLI events em SLO compliance. Use sobre tabela `observability.events` (precedente v1.9 — `obs.events` ou similar). Ajustar nome do schema/tabela ao projeto.
|
|
219
|
-
|
|
220
|
-
```sql
|
|
221
|
-
-- PT-BR: SLI event-based — boa request = HTTP 2xx + duration < 300ms
|
|
222
|
-
-- Materializa contagem para alimentar burn rate e SLO compliance
|
|
223
|
-
select
|
|
224
|
-
count(*) filter (where status_code < 400 and duration_ms < 300) as good,
|
|
225
|
-
count(*) filter (where status_code >= 400 or duration_ms >= 300) as bad,
|
|
226
|
-
count(*) as total
|
|
227
|
-
from observability.events
|
|
228
|
-
where service = 'orders-api' and timestamp > now() - interval '30 days';
|
|
229
|
-
|
|
230
|
-
-- PT-BR: 4 golden signals em 1 query (Latency p50/p95/p99 + Traffic + Errors + Saturation)
|
|
231
|
-
-- Use para dashboard real-time de saúde do serviço
|
|
232
|
-
select
|
|
233
|
-
date_trunc('minute', timestamp) as minute,
|
|
234
|
-
count(*) as traffic_per_min,
|
|
235
|
-
count(*) filter (where result_success = false) as errors_per_min,
|
|
236
|
-
percentile_cont(0.50) within group (order by duration_ms) as latency_p50,
|
|
237
|
-
percentile_cont(0.95) within group (order by duration_ms) as latency_p95,
|
|
238
|
-
percentile_cont(0.99) within group (order by duration_ms) as latency_p99,
|
|
239
|
-
max(connection_pool_used_pct) as saturation_max
|
|
240
|
-
from observability.events
|
|
241
|
-
where service = 'orders-api' and timestamp > now() - interval '1 hour'
|
|
242
|
-
group by minute
|
|
243
|
-
order by minute desc;
|
|
244
|
-
|
|
245
|
-
-- PT-BR: latência success vs error separadas (cap 6 — não misturar)
|
|
246
|
-
-- Falhas rápidas mascaram falhas lentas; sempre splitar por result.success
|
|
247
|
-
select
|
|
248
|
-
result_success,
|
|
249
|
-
percentile_cont(0.95) within group (order by duration_ms) as p95_ms,
|
|
250
|
-
percentile_cont(0.99) within group (order by duration_ms) as p99_ms,
|
|
251
|
-
count(*) as n
|
|
252
|
-
from observability.events
|
|
253
|
-
where service = 'orders-api' and timestamp > now() - interval '1 hour'
|
|
254
|
-
group by result_success;
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
### MCP tools relevantes
|
|
258
|
-
|
|
259
|
-
> Tools do Supabase MCP usados pelos agentes SRE da Phase 37 (golden-signals-instrumenter, toil-auditor, postmortem-writer, prr-conductor) para conduzir PRR / instrumentação / postmortem com dados reais.
|
|
260
|
-
|
|
261
|
-
```text
|
|
262
|
-
mcp__supabase__list_tables — schema review (PRR axis "System Architecture")
|
|
263
|
-
mcp__supabase__execute_sql — queries SLI / golden signals / análise de incident
|
|
264
|
-
mcp__supabase__get_advisors — security/performance lints (PRR axis "Performance")
|
|
265
|
-
mcp__supabase__list_edge_functions — inventário de serviços para PRR
|
|
266
|
-
mcp__supabase__get_logs — verificação de instrumentação (PRR axis "Instrumentation")
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
---
|
|
270
|
-
|
|
271
|
-
## (c) Patterns canônicos
|
|
272
|
-
|
|
273
|
-
### Pattern: risk continuum em decisão de SLO target
|
|
274
|
-
|
|
275
|
-
> Cap 3. SLO target NÃO é meta arbitrária — é escolha explícita no continuum risk × innovation × cost. Custo cresce não-linearmente; usuário satura em torno de 99.95-99.99% para serviços user-facing (smartphone/ISP/Wi-Fi diluem qualquer melhoria além).
|
|
276
|
-
|
|
277
|
-
| Target | Tolerância 30d | Quando usar | Custo relativo |
|
|
278
|
-
|---|---|---|---|
|
|
279
|
-
| 99% | 7.2 h | Tier free, beta features, internal tools | 1× |
|
|
280
|
-
| 99.5% | 3.6 h | Tier free de produção | 2× |
|
|
281
|
-
| 99.9% | 43.2 min | Tier paid, paths críticos default | 5× |
|
|
282
|
-
| 99.95% | 21.6 min | Tier enterprise / mission-critical | 10× |
|
|
283
|
-
| 99.99% | 4.3 min | Apenas se justificado por user perception (raro) | 50×+ |
|
|
284
|
-
| 99.999% | 26 s | NUNCA para serviço user-facing (smartphone dilui) | 100×+ |
|
|
285
|
-
|
|
286
|
-
**Princípio Google SRE:** "as reliable as needs to be, no more". Sobrar reliability é tão danoso quanto faltar — custa innovation velocity, e o usuário não percebe melhoria além de ~99.95%-99.99%.
|
|
287
|
-
|
|
288
|
-
**Como aplicar:**
|
|
289
|
-
1. Identifique o link mais fraco entre serviço e usuário final (ex: Wi-Fi 99% disponível dilui qualquer SLO 99.999%)
|
|
290
|
-
2. Escolha SLO target ≤ 99.95% por default — só suba para 99.99%+ com justificativa documentada
|
|
291
|
-
3. Documente o tradeoff explícito: "este SLO em troca de N% velocity gasto em reliability work"
|
|
292
|
-
4. Revise a cada milestone — risk appetite evolui com produto
|
|
293
|
-
|
|
294
|
-
### Pattern: 4 golden signals em código (OTel SDK)
|
|
295
|
-
|
|
296
|
-
> Cap 6. Os 4 sinais mínimos universais aplicados em uma Edge Function/handler via OTel SDK. Latência separada por `result` (success vs error); errors counter por `error.type` (categoria, não message); saturation gauge é resource-specific (geralmente conn pool).
|
|
297
|
-
|
|
298
|
-
```ts
|
|
299
|
-
// PT-BR: instrumentação canônica de Edge Function — 4 golden signals
|
|
300
|
-
import { trace, metrics } from '@opentelemetry/api'
|
|
301
|
-
|
|
302
|
-
const tracer = trace.getTracer('orders-service')
|
|
303
|
-
const meter = metrics.getMeter('orders-service')
|
|
304
|
-
|
|
305
|
-
// PT-BR: 1. LATENCY — histogram com bucketing exponencial
|
|
306
|
-
const latencyHistogram = meter.createHistogram('http_request_duration_ms', {
|
|
307
|
-
description: 'Request latency in ms',
|
|
308
|
-
unit: 'ms',
|
|
309
|
-
// PT-BR: buckets exponenciais cobrem long tail (1ms → 30s)
|
|
310
|
-
advice: { explicitBucketBoundaries: [1, 2, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 30000] }
|
|
311
|
-
})
|
|
312
|
-
|
|
313
|
-
// PT-BR: 2. TRAFFIC — counter de requests recebidos
|
|
314
|
-
const trafficCounter = meter.createCounter('http_requests_total', {
|
|
315
|
-
description: 'Total HTTP requests received'
|
|
316
|
-
})
|
|
317
|
-
|
|
318
|
-
// PT-BR: 3. ERRORS — counter por error.type (alta cardinalidade controlada)
|
|
319
|
-
const errorsCounter = meter.createCounter('http_errors_total', {
|
|
320
|
-
description: 'Total HTTP errors by error.type'
|
|
321
|
-
})
|
|
322
|
-
|
|
323
|
-
// PT-BR: 4. SATURATION — gauge do recurso mais escasso (connection pool em DB)
|
|
324
|
-
const saturationGauge = meter.createObservableGauge('db_connection_pool_used_pct', {
|
|
325
|
-
description: 'DB connection pool utilization %',
|
|
326
|
-
unit: '%'
|
|
327
|
-
})
|
|
328
|
-
|
|
329
|
-
export async function placeOrder(req: Request) {
|
|
330
|
-
const startMs = performance.now()
|
|
331
|
-
trafficCounter.add(1, { endpoint: '/api/v1/orders', method: 'POST' })
|
|
332
|
-
|
|
333
|
-
return tracer.startActiveSpan('place_order', async (span) => {
|
|
334
|
-
try {
|
|
335
|
-
const order = await db.insertOrder(req.body)
|
|
336
|
-
// PT-BR: latência APENAS de success — separar de error
|
|
337
|
-
const durationMs = performance.now() - startMs
|
|
338
|
-
latencyHistogram.record(durationMs, { result: 'success', endpoint: '/api/v1/orders' })
|
|
339
|
-
return order
|
|
340
|
-
} catch (e) {
|
|
341
|
-
const durationMs = performance.now() - startMs
|
|
342
|
-
// PT-BR: latência de erro — separada
|
|
343
|
-
latencyHistogram.record(durationMs, { result: 'error', endpoint: '/api/v1/orders' })
|
|
344
|
-
// PT-BR: counter por error.type — categoria, não message
|
|
345
|
-
errorsCounter.add(1, { error_type: classify(e), endpoint: '/api/v1/orders' })
|
|
346
|
-
throw e
|
|
347
|
-
} finally {
|
|
348
|
-
span.end()
|
|
349
|
-
}
|
|
350
|
-
})
|
|
351
|
-
}
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
**Atributos canônicos das métricas:**
|
|
355
|
-
- `endpoint`: path normalizado (`/api/v1/orders`, NÃO `/api/v1/orders/abc-123`)
|
|
356
|
-
- `method`: HTTP method (`GET`, `POST`)
|
|
357
|
-
- `result`: `success` ou `error` — para latência APENAS
|
|
358
|
-
- `error_type`: categoria fechada (`timeout`, `validation`, `auth`, `rate_limit`, `db`, `internal`)
|
|
359
|
-
|
|
360
|
-
### Pattern: classificação de toil (decisão tree)
|
|
361
|
-
|
|
362
|
-
> Cap 5. Antes de classificar trabalho como "toil", aplicar os 6 critérios canônicos Google. Trabalho repetitivo NÃO é automaticamente toil — overhead administrativo e grungy work são repetitivos mas têm naturezas diferentes.
|
|
363
|
-
|
|
364
|
-
```text
|
|
365
|
-
Tarefa repetitiva detectada → aplicar 6 critérios canônicos:
|
|
366
|
-
|
|
367
|
-
1. Manual? (humano executa cada vez) ────┐
|
|
368
|
-
2. Repetitiva? (já fiz isso 3+ vezes) │
|
|
369
|
-
3. Automatizável? (script/cron resolve) ├── Se TODOS sim → TOIL
|
|
370
|
-
4. Tática? (reage a evento, não planeja) │ → automatizar / eliminar
|
|
371
|
-
5. Sem valor durável? (não cria asset permanente) │ → contar em ≤ 50% rule
|
|
372
|
-
6. Escala linear? (mais users = mais trabalho) ─┘
|
|
373
|
-
|
|
374
|
-
Se NÃO for toil mas repetitivo, classificar:
|
|
375
|
-
- OVERHEAD (reuniões, RH) → não-eliminável, não conta em ≤ 50%
|
|
376
|
-
- GRUNGY WORK (refactor, sec cleanup) → necessário, valor durável → projeto
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
**Regra ≤ 50%:** SRE não pode gastar mais que 50% do tempo em toil. Se passa de 50%, é gatilho para:
|
|
380
|
-
1. Pedir mais headcount (toil cresce com produto, não scale linearmente com time)
|
|
381
|
-
2. Engajar projeto de automation com prioridade P0
|
|
382
|
-
3. Renegociar com produto sobre features que adicionam toil
|
|
383
|
-
|
|
384
|
-
### Pattern: postmortem timeline em UTC
|
|
385
|
-
|
|
386
|
-
> Cap 15. Timeline padronizado em UTC com horários `HH:MM` em ordem cronológica. Inclui ações que NÃO funcionaram (informa próximos incidents) e gap entre trigger e detection (métrica chave de monitoring quality).
|
|
387
|
-
|
|
388
|
-
```text
|
|
389
|
-
## Timeline (UTC)
|
|
390
|
-
|
|
391
|
-
- 14:23 — Deploy v2.3.0 do orders-service mergeado em main
|
|
392
|
-
- 14:27 — CI completa, deploy automatizado para prod (canary 10%)
|
|
393
|
-
- 14:31 — Alerta SLO burn rate dispara (page on-call)
|
|
394
|
-
- 14:33 — On-call ack page; abre incident Slack channel #inc-2026-05-06-01
|
|
395
|
-
- 14:38 — Hipótese inicial: deploy v2.3.0 (correlação temporal)
|
|
396
|
-
- 14:42 — Rollback canary para 0%; SLO burn cessa
|
|
397
|
-
- 14:50 — Confirma: deploy v2.3.0 introduziu N+1 query em /api/v1/orders
|
|
398
|
-
- 15:02 — Fix em PR #1234; CI verde em 14 min
|
|
399
|
-
- 15:18 — Deploy do fix; canary 10% → 100% sem regressão
|
|
400
|
-
- 15:25 — Incident resolvido; SLO compliance retorna a 99.92%
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
**Insights derivados desse timeline:**
|
|
404
|
-
- **Detection lag:** trigger 14:23 → detect 14:31 = 8 min. Alvo: ≤ 5 min. Action item: alerta de canary regression em 1 min.
|
|
405
|
-
- **Resolution time:** 14:31 → 15:25 = 54 min (MTTR). Action item: rollback automatizado em < 5 min via SLO burn detection.
|
|
406
|
-
- **Root cause:** "deploy introduziu N+1" é trigger; root cause é "ausência de query plan diff em CI".
|
|
407
|
-
|
|
408
|
-
---
|
|
409
|
-
|
|
410
|
-
## (d) Anti-patterns explícitos
|
|
411
|
-
|
|
412
|
-
> Comportamentos comuns que parecem corretos mas são ativamente prejudiciais. Cada um inclui ANTI-PATTERN (comportamento concreto), POR QUÊ É RUIM (consequência sistêmica) e CERTO (substituto canônico). Cap 3, 4, 5, 6, 12, 15.
|
|
413
|
-
|
|
414
|
-
### Alert fatigue
|
|
415
|
-
|
|
416
|
-
```text
|
|
417
|
-
ANTI-PATTERN: paginar em todos os sintomas (CPU > 80%, mem < 10%, threads > N,
|
|
418
|
-
latência > X em qualquer endpoint, log com "ERROR", etc.).
|
|
419
|
-
Mais alertas = "mais cobertura", supostamente.
|
|
420
|
-
|
|
421
|
-
POR QUÊ É RUIM: noise mascara real signals; pessoas começam a ignorar pages
|
|
422
|
-
("é o cron job de novo"); psychological habituation;
|
|
423
|
-
próximo SEV1 chega no meio do ruído e é perdido.
|
|
424
|
-
|
|
425
|
-
CERTO: SLO-based alerting (event burn rate) — alerta só quando customer
|
|
426
|
-
impact é mensurável. Deletar alertas threshold sem ação clara.
|
|
427
|
-
Regra: cada page deve ter runbook concreto OU ser deletada.
|
|
428
|
-
```
|
|
429
|
-
|
|
430
|
-
### Hero culture
|
|
431
|
-
|
|
432
|
-
```text
|
|
433
|
-
ANTI-PATTERN: celebrar quem fica acordado 36h em incident; bonus para
|
|
434
|
-
"incident champion"; on-call que "resolve tudo sozinho".
|
|
435
|
-
Cultura que premia heroísmo individual.
|
|
436
|
-
|
|
437
|
-
POR QUÊ É RUIM: comportamento perverso (esperar pelo herói em vez de
|
|
438
|
-
investir em automation); evita investimento sistêmico;
|
|
439
|
-
burn-out garantido em 6-12 meses; conhecimento concentrado
|
|
440
|
-
em 1 pessoa = bus factor 1.
|
|
441
|
-
|
|
442
|
-
CERTO: blameless postmortem foca em sistema; action items > "fulano salvou
|
|
443
|
-
o dia"; ≤ 50% toil rule (se 1 pessoa está apagando incêndio, é
|
|
444
|
-
sinal de subinvestimento em automation, não falta de heróis).
|
|
445
|
-
```
|
|
446
|
-
|
|
447
|
-
### SLO 99.99%+ default
|
|
448
|
-
|
|
449
|
-
```text
|
|
450
|
-
ANTI-PATTERN: definir SLO 99.99% sem justificativa; "queremos ser melhores
|
|
451
|
-
que a concorrência"; copiar SLO de cloud provider sem
|
|
452
|
-
adaptar ao serviço.
|
|
453
|
-
|
|
454
|
-
POR QUÊ É RUIM: tolerância 30d = 4.3 min, sem tempo de reagir;
|
|
455
|
-
pressões para "esconder" outages para preservar number;
|
|
456
|
-
budget esgota antes do alert ser útil;
|
|
457
|
-
custo de innovation velocity 50× maior que SLO 99.9%.
|
|
458
|
-
|
|
459
|
-
CERTO: target ≤ 99.95% para SLO real; 99.99%+ apenas com justificativa
|
|
460
|
-
explícita de user perception (raro — geralmente smartphone/Wi-Fi
|
|
461
|
-
já dilui qualquer ganho marginal); use métricas/dashboards
|
|
462
|
-
informativos para tracking de excellence sem comprometer.
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
### Fixed-window error budget
|
|
466
|
-
|
|
467
|
-
```text
|
|
468
|
-
ANTI-PATTERN: error budget reseta dia 1 do mês; "tivemos outage dia 31,
|
|
469
|
-
reseta amanhã"; calendar-aligned budget tracking.
|
|
470
|
-
|
|
471
|
-
POR QUÊ É RUIM: cliente NÃO esquece outage por causa de calendar reset;
|
|
472
|
-
pressão para postpone fixes para depois do reset
|
|
473
|
-
(behavioral hazard); dificulta planejamento de capacity;
|
|
474
|
-
amplifica gaming do sistema.
|
|
475
|
-
|
|
476
|
-
CERTO: sliding window 30d. Outage dia 31 fica no budget até dia 30 do
|
|
477
|
-
mês seguinte (sai gradualmente). Trata-se de função contínua,
|
|
478
|
-
não step function. Mais alinhado com user perception real.
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
### Blame culture (vs blameless)
|
|
482
|
-
|
|
483
|
-
```text
|
|
484
|
-
ANTI-PATTERN: postmortem nomeia "fulano fez deploy errado"; root cause
|
|
485
|
-
identificada como "human error"; punição/PIP após incident;
|
|
486
|
-
postmortem como ferramenta de accountability individual.
|
|
487
|
-
|
|
488
|
-
POR QUÊ É RUIM: engineers escondem incidents próximos ao limite;
|
|
489
|
-
psychological safety colapsa; replicação garantida
|
|
490
|
-
(sistema não muda — só a pessoa); informação importante
|
|
491
|
-
some (quem viveu não fala, quem fala não viveu).
|
|
492
|
-
|
|
493
|
-
CERTO: postmortem foca em sistema/processo (ausência de canary,
|
|
494
|
-
ausência de rollback automatizado, runbook desatualizado);
|
|
495
|
-
pessoas são parte do sistema, NÃO o root cause; revisão por par
|
|
496
|
-
sênior antes de arquivar; "no postmortem left unreviewed".
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
### Mean-only latency
|
|
500
|
-
|
|
501
|
-
```text
|
|
502
|
-
ANTI-PATTERN: alertar/reportar mean latency; dashboard com "average
|
|
503
|
-
response time"; SLA com "média mensal de latência";
|
|
504
|
-
p99 considerado "muito ruidoso" e descartado.
|
|
505
|
-
|
|
506
|
-
POR QUÊ É RUIM: mean = 50ms, mas p99 = 5000ms (long tail invisível);
|
|
507
|
-
UX dominada por p99 (1% dos usuários têm experiência
|
|
508
|
-
terrível, mas média esconde); mean é métrica enganosa
|
|
509
|
-
em qualquer distribuição com cauda longa.
|
|
510
|
-
|
|
511
|
-
CERTO: SEMPRE percentis (p50, p95, p99, p99.9); histogram com bucketing
|
|
512
|
-
exponencial (não gauge); latência success vs error separadas
|
|
513
|
-
(cap 6 — falhas rápidas mascaram falhas lentas); alertas
|
|
514
|
-
baseados em p99 ou p99.9, nunca mean.
|
|
515
|
-
```
|
|
516
|
-
|
|
517
|
-
### Monitoring causes não symptoms
|
|
518
|
-
|
|
519
|
-
```text
|
|
520
|
-
ANTI-PATTERN: alertar em "CPU > 80%", "memória < 10%", "threads > N",
|
|
521
|
-
"disk I/O > X"; mistura "what" (sintoma observável pelo
|
|
522
|
-
cliente) com "why" (causa raiz interna).
|
|
523
|
-
|
|
524
|
-
POR QUÊ É RUIM: false positives (cron job legítimo dispara CPU alta;
|
|
525
|
-
page no domingo de manhã sem causa real);
|
|
526
|
-
false negatives (sistema lento sem CPU alta — ex: lock
|
|
527
|
-
contention, GC pause, network latency);
|
|
528
|
-
normalização do desvio (cap 12 do livro Observability
|
|
529
|
-
Engineering — Challenger disaster framing);
|
|
530
|
-
acoplamento alert × infra (cada novo serviço = N alertas).
|
|
531
|
-
|
|
532
|
-
CERTO: alertar APENAS em SLO burn rate (event-based, customer-impacting).
|
|
533
|
-
Decouple "what" de "why" — alert diz que tem dor (SLO burn 4×),
|
|
534
|
-
debug descobre porquê (CPU? memória? lock? deploy?). Métricas de
|
|
535
|
-
saturação são gauge informativo no dashboard, não trigger de page.
|
|
536
|
-
```
|
|
537
|
-
|
|
538
|
-
---
|
|
539
|
-
|
|
540
|
-
## (f) Vocabulário v1.11 — Cascading Failures (cap 22)
|
|
541
|
-
|
|
542
|
-
> Vocabulário do cap 22 (Addressing Cascading Failures). Cascading failure é falha que se amplifica via loops de feedback — primeiro nó cai, traffic flui para outros, eles também caem, etc. Prevenção custa muito menos que recuperação.
|
|
543
|
-
|
|
544
|
-
| EN | PT-BR / Significado |
|
|
545
|
-
|---|---|
|
|
546
|
-
| **cascading failure** | Falha em cascata — failure que se amplifica via loops de feedback. Triggers comuns: server overload, resource exhaustion (CPU/mem/FDs/threads), service unavailability gera retry storm. |
|
|
547
|
-
| **retry storm** | Tempestade de retries — clientes retentam após failure simultaneamente, multiplicando carga e prolongando outage. Prevenção: jitter + retry budget + deadline propagation. |
|
|
548
|
-
| **thundering herd** | Manada trovejante — N clientes acordam ao mesmo tempo após recovery e batem no servidor recém-recuperado, derrubando-o de novo. Prevenção: jitter em wake-up, slow-start. |
|
|
549
|
-
| **load shedding** | Descarte de carga — server intencionalmente rejeita requests quando overloaded (HTTP 503 + Retry-After) em vez de aceitar e cair. Preserva capacidade para subset de tráfego. |
|
|
550
|
-
| **graceful degradation** | Degradação graciosa — modo reduzido sob carga (e.g., desligar features não-críticas, retornar cached/stale data, reduzir precision). Preferível a falha total. |
|
|
551
|
-
| **circuit breaker** | Disjuntor — pattern: após N failures consecutivas, "abre o circuito" e falha rápido (sem chamar dep) por window T. Protege caller e dep. Estados: closed/open/half-open. |
|
|
552
|
-
| **deadline propagation** | Propagação de deadline — request chega com TTL X; cada hop downstream subtrai tempo gasto até aqui e aborta se restante ≤ 0. Evita work zumbi após client desistir. |
|
|
553
|
-
| **kill switch** | Chave-mata — flag que desabilita feature inteira via 1 comando (config update / feature flag). Útil em incident pra parar bleed de feature problemática. |
|
|
554
|
-
| **throttle** | Estrangular — limitar rate de operações (per-user, per-tenant, global). Diferente de load shedding: throttle é per-policy contínuo; shed é reactive a saturation. |
|
|
555
|
-
| **queue management** | Gestão de fila — política sobre o que fazer quando queue lota: drop oldest (LIFO), drop newest (FIFO), drop random, drop by priority. Default `drop oldest` evita starvation. |
|
|
556
|
-
| **resource exhaustion** | Esgotamento de recurso — CPU 100%, memory OOM, file descriptors esgotados, threads bloqueadas, conn pool empty. Cada um é trigger comum de cascade. |
|
|
557
|
-
| **server overload** | Sobrecarga de servidor — load > capacity. Lab leve sintoma: latency p99 sobe 10×, then errors, then crashes. Detect via Saturation (cap 6). |
|
|
558
|
-
| **slow start** | Início lento — após recovery, aceita tráfego gradual (10% → 25% → 50% → 100%) em vez de full blast. Permite caches aquecerem, conn pools abrirem. |
|
|
559
|
-
| **degraded mode** | Modo degradado — fallback path quando dep crítica está down (cache stale, default values, simplified algorithm). Distinct de graceful degradation: degraded mode é design-time, not load-driven. |
|
|
560
|
-
|
|
561
|
-
## (g) Vocabulário v1.11 — Release Engineering (cap 8)
|
|
562
|
-
|
|
563
|
-
> Vocabulário do cap 8 (Release Engineering). Release engineering é disciplina específica que existe em paralelo a SRE e dev — cuida da pipeline de "código no merge → bits em prod". Foco: reproducibilidade, hermeticidade, policy enforcement.
|
|
564
|
-
|
|
565
|
-
| EN | PT-BR / Significado |
|
|
566
|
-
|---|---|
|
|
567
|
-
| **hermetic build** | Build hermético — build que produz output bit-idêntico em qualquer máquina, qualquer momento, dado mesmo input. Sem network, sem timestamps, sem env vars não-pinadas. |
|
|
568
|
-
| **reproducible build** | Build reprodutível — sinônimo de hermetic OU subset (apenas determinismo de output, sem requirement de network isolation). |
|
|
569
|
-
| **release pipeline** | Pipeline de release — sequência canônica: source → build → test → package → deploy. Cada estágio com inputs/outputs versionados. |
|
|
570
|
-
| **deployment policy** | Política de deploy — regras sobre QUEM pode deployar, QUANDO (freeze windows), ONDE (canary → 100%), COMO (signed commits, required reviewers, CI gates verde). |
|
|
571
|
-
| **self-service deployment** | Deploy self-service — engenheiros deployam sozinhos via UI/CLI sem precisar pedir SRE. Pré-requisito: policies enforced em ferramenta, não via aprovação manual. |
|
|
572
|
-
| **build provenance** | Proveniência de build — metadata sobre COMO o artefato foi construído (commit SHA, builder ID, build env, deps versions, signature). SLSA framework moderniza. |
|
|
573
|
-
| **configuration management** | Gestão de config — config separada de código (12-factor); config versionada, auditável, rollback-able. ConfigMaps, env vars, feature flags. |
|
|
574
|
-
| **branching strategy** | Estratégia de branching — Trunk-based (preferred) vs Gitflow. Trunk: main sempre deployable; feature flags para work in progress. Gitflow: branches longos, harder to rollback. |
|
|
575
|
-
| **release engineering invariant** | Invariante de release engineering — propriedade que NUNCA é violada, mesmo sob pressão. Examples: "build sem network", "deploy só com CI verde", "rollback < 5min em qualquer release". |
|
|
576
|
-
| **continuous build** | Build contínuo — toda commit dispara build automático. Quebra detectada em minutos vs dias. |
|
|
577
|
-
| **continuous test** | Teste contínuo — toda commit dispara suite. Failure visível antes de merge (na PR). |
|
|
578
|
-
| **continuous deployment** | Deploy contínuo — todo commit que passa CI vai pra prod automaticamente. Distinct de continuous delivery (deploy disponível mas não auto). |
|
|
579
|
-
| **canary release** | Release canário — rollout gradual: 1% → 10% → 50% → 100% com SLO check em cada estágio. Limita blast radius de bug. |
|
|
580
|
-
| **rollback** | Rollback — reverter para release anterior. Tempo target: < 5 min em qualquer release. Pré-requisito: artefato anterior preservado, schema migrations forward-only OR reversible. |
|
|
581
|
-
| **forward-fix** | Forward fix — em vez de rollback, fazer hotfix forward. Preferível quando rollback custaria perda de dado (e.g., schema migration que adicionou coluna NOT NULL). |
|
|
582
|
-
| **lockfile** | Arquivo de trava — `package-lock.json`/`pnpm-lock.yaml`/`deno.lock`/`Cargo.lock`/`go.sum`. Pin de TODAS deps transitivas a versões específicas. **Sem lockfile = não-reprodutível.** |
|
|
583
|
-
| **frozen-lockfile** | Lockfile congelado — modo CI (`npm ci`, `pnpm install --frozen-lockfile`, `cargo install --locked`) que falha se lockfile não-sincronizado. Garante deterministic install. |
|
|
584
|
-
| **config drift** | Drift de config — config em prod divergiu de config em git. Causa: changes ad-hoc via UI/CLI sem PR. Solução: GitOps (config = git, prod = mirror). |
|
|
585
|
-
| **no-rollback culture** | Cultura sem rollback — equipe que sempre forward-fixes, nunca rollbacks. Sintoma: rollback "nunca foi testado", quando precisa não funciona. Anti-pattern. |
|
|
586
|
-
| **build cache** | Cache de build — output de etapas determinísticas reusado entre runs. Acelera 10-100×. Requirement: hermeticidade (input idêntico → output idêntico → cacheável). |
|
|
587
|
-
|
|
588
|
-
## (h) Anti-patterns v1.11 (cap 22 + 8)
|
|
589
|
-
|
|
590
|
-
> Comportamentos comuns que ativamente causam cascade ou release fragility. Format: ANTI-PATTERN / POR QUÊ É RUIM / CERTO.
|
|
591
|
-
|
|
592
|
-
### Retry sem jitter (retry storm trigger)
|
|
593
|
-
|
|
594
|
-
```text
|
|
595
|
-
ANTI-PATTERN: client falha → retry após 1s; 1000 clients fazem isso
|
|
596
|
-
simultaneamente; servidor recebe 1000 retries no mesmo segundo
|
|
597
|
-
após cada delay window.
|
|
598
|
-
|
|
599
|
-
POR QUÊ É RUIM: thundering herd. Server cai, recupera, cai de novo no
|
|
600
|
-
wake-up coordenado. Outage prolonga indefinidamente.
|
|
601
|
-
|
|
602
|
-
CERTO: full jitter — `delayMs = random(0, base * 2^attempt)`. Spread aleatório
|
|
603
|
-
distribui carga ao longo da janela. Retry budget global limita N total
|
|
604
|
-
de retries por segundo (se exceder = circuit breaker abre).
|
|
605
|
-
```
|
|
606
|
-
|
|
607
|
-
### Retry sem deadline (cascade amplification)
|
|
608
|
-
|
|
609
|
-
```text
|
|
610
|
-
ANTI-PATTERN: request chega no nó A com timeout 30s; A chama B com retry 3×
|
|
611
|
-
(timeout 30s cada). B chama C com retry 3× (timeout 30s).
|
|
612
|
-
Worst-case path: 30s × 3 × 3 = 270s, mas client já desistiu em 30s.
|
|
613
|
-
|
|
614
|
-
POR QUÊ É RUIM: 240s de work zumbi após client gone. Recursos consumidos
|
|
615
|
-
inutilmente. Cascade amplifica — 1 retry de A vira 9 calls
|
|
616
|
-
pra C.
|
|
617
|
-
|
|
618
|
-
CERTO: deadline propagation. A recebe TTL=30s. Antes de chamar B, calcula
|
|
619
|
-
remaining = 30s - elapsed. Passa remaining como deadline a B (header
|
|
620
|
-
grpc-timeout, AbortSignal.timeout). B faz mesmo com C. Quando deadline
|
|
621
|
-
chega a 0, falha rápido sem retry. Retry budget também limita amplificação.
|
|
622
|
-
```
|
|
623
|
-
|
|
624
|
-
### Deploy não-hermético (config drift entre environments)
|
|
625
|
-
|
|
626
|
-
```text
|
|
627
|
-
ANTI-PATTERN: build em CI usa `npm install` (não `npm ci`). Local dev usa
|
|
628
|
-
versão diferente de deps porque resolveu o range diferente.
|
|
629
|
-
Deploy passa em CI, falha em prod com NPE em dep transitiva.
|
|
630
|
-
|
|
631
|
-
POR QUÊ É RUIM: bug não-reproduzível. Reviewer aprova "no meu ambiente
|
|
632
|
-
roda". Prod cai com bug que CI não detectou. Forensics
|
|
633
|
-
impossível porque "que versão de X estava em prod naquele
|
|
634
|
-
momento?" não tem resposta.
|
|
635
|
-
|
|
636
|
-
CERTO: lockfile commitado + `npm ci` (ou `pnpm install --frozen-lockfile`,
|
|
637
|
-
`pip install --require-hashes`). Build hermético — input idêntico
|
|
638
|
-
(commit SHA + lockfile) → output bit-idêntico. Toda deploy tem
|
|
639
|
-
artefato reproducible.
|
|
640
|
-
```
|
|
641
|
-
|
|
642
|
-
### No-rollback culture (acumulação de risk)
|
|
643
|
-
|
|
644
|
-
```text
|
|
645
|
-
ANTI-PATTERN: equipe sempre forward-fixes. "Rollback é complicado".
|
|
646
|
-
Última vez que rolledback foi há 18 meses. Não está
|
|
647
|
-
testado.
|
|
648
|
-
|
|
649
|
-
POR QUÊ É RUIM: quando incident grave ocorre, rollback é a opção certa
|
|
650
|
-
— mas não funciona porque nunca foi exercitado. Forward-fix
|
|
651
|
-
em meio a outage adiciona complexidade. MTTR cresce.
|
|
652
|
-
|
|
653
|
-
CERTO: rollback testado em DR exercise mensal. Cada release verifica
|
|
654
|
-
que rollback funciona em < 5 min. Schema migrations sempre
|
|
655
|
-
reversible (ADD col nullable, never DROP). Artefato N-1 sempre
|
|
656
|
-
preservado e re-deployable.
|
|
657
|
-
```
|
|
658
|
-
|
|
659
|
-
### Release pipeline manual (toil + risk)
|
|
660
|
-
|
|
661
|
-
```text
|
|
662
|
-
ANTI-PATTERN: deploy = "engineer X faz SSH em prod, copia artefato,
|
|
663
|
-
kill+restart". Documentado em runbook de 30 passos.
|
|
664
|
-
|
|
665
|
-
POR QUÊ É RUIM: toil (cap 5 — manual + repetitivo + automatizável).
|
|
666
|
-
Drift entre runbook e realidade. Erros humanos.
|
|
667
|
-
Sem audit trail (quem deployou o quê quando).
|
|
668
|
-
|
|
669
|
-
CERTO: deploy = git push tag (ou merge em main). CI/CD pipeline cuida
|
|
670
|
-
de build hermético + tests + canary + rollback config. Self-service
|
|
671
|
-
deployment com policies enforced. Audit trail automático via CI logs.
|
|
672
|
-
```
|
|
673
|
-
|
|
674
|
-
## (e) Cross-references
|
|
675
|
-
|
|
676
|
-
Skills que consultam este glossário:
|
|
677
|
-
|
|
678
|
-
- `kit/skills/sre-risk-management/SKILL.md`
|
|
679
|
-
- `kit/skills/four-golden-signals/SKILL.md`
|
|
680
|
-
- `kit/skills/eliminating-toil/SKILL.md`
|
|
681
|
-
- `kit/skills/blameless-postmortems/SKILL.md`
|
|
682
|
-
- `kit/skills/production-readiness-review/SKILL.md`
|
|
683
|
-
- `kit/skills/cascading-failures/SKILL.md` (v1.11)
|
|
684
|
-
- `kit/skills/load-shedding-graceful-degradation/SKILL.md` (v1.11)
|
|
685
|
-
- `kit/skills/retry-strategies/SKILL.md` (v1.11)
|
|
686
|
-
- `kit/skills/hermetic-builds/SKILL.md` (v1.11)
|
|
687
|
-
- `kit/skills/release-engineering/SKILL.md` (v1.11)
|
|
688
|
-
|
|
689
|
-
Agentes que consultam este glossário (Phase 37):
|
|
690
|
-
|
|
691
|
-
- `kit/agents/golden-signals-instrumenter.md`
|
|
692
|
-
- `kit/agents/toil-auditor.md`
|
|
693
|
-
- `kit/agents/postmortem-writer.md`
|
|
694
|
-
- `kit/agents/prr-conductor.md`
|
|
695
|
-
|
|
696
|
-
Comandos que consultam este glossário (Phase 38):
|
|
697
|
-
|
|
698
|
-
- `kit/commands/golden-signals.md`
|
|
699
|
-
- `kit/commands/auditar-toil.md`
|
|
700
|
-
- `kit/commands/postmortem.md`
|
|
701
|
-
- `kit/commands/prr.md`
|
|
702
|
-
- `kit/commands/risk-budget.md`
|
|
703
|
-
- `kit/commands/sre.md` (orquestrador)
|
|
704
|
-
|
|
705
|
-
Skills v1.9 que cross-referenciam este glossário (Phase 39 patches):
|
|
706
|
-
|
|
707
|
-
- `kit/skills/event-based-slos/SKILL.md` (ganha bloco "Risk continuum")
|
|
708
|
-
|
|
709
|
-
---
|
|
710
|
-
|
|
711
|
-
*Glossário criado em 2026-05-07 (Phase 36 do milestone v1.10 SRE Engagement).*
|
|
712
|
-
*Material-fonte: Site Reliability Engineering — Beyer, Jones, Petoff, Murphy (Google/O'Reilly, 2016, ISBN 978-1-491-92912-4). Caps prioritários: 3 (Embracing Risk), 4 (SLOs), 5 (Eliminating Toil), 6 (Monitoring Distributed Systems / Four Golden Signals), 15 (Postmortem Culture), 32 (Evolving SRE Engagement Model / PRR).*
|
|
1
|
+
# Glossário SRE — Termos, Comandos e Patterns Canônicos
|
|
2
|
+
|
|
3
|
+
> Arquivo de referência compartilhado pelas skills `sre-*`, `four-golden-signals`, `eliminating-toil`, `blameless-postmortems`, `production-readiness-review`. **NÃO é skill** — não tem `description:` triggerável; não aparece em `listKit`. Cross-referenciado pelas skills via Markdown link relativo.
|
|
4
|
+
|
|
5
|
+
> **Material-fonte:** *Site Reliability Engineering: How Google Runs Production Systems* — Beyer, Jones, Petoff, Murphy (Google/O'Reilly, 2016). ISBN 978-1-491-92912-4.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## (a) Termos PT-BR ↔ EN
|
|
10
|
+
|
|
11
|
+
### Risk e Reliability
|
|
12
|
+
|
|
13
|
+
> Vocabulário do cap 3 (Embracing Risk). Reliability é tratada como continuum, não absoluto. Custo de "9s" cresce não-linearmente; user perception satura em torno de 99.95%-99.99% para serviços user-facing.
|
|
14
|
+
|
|
15
|
+
| EN | PT-BR / Significado |
|
|
16
|
+
|---|---|
|
|
17
|
+
| **risk continuum** | Continuum de risco — 100% de disponibilidade NÃO é o objetivo; o custo cresce não-linearmente com cada "9". Usuário em smartphone com 99% de disponibilidade não distingue 99.99% de 99.999% no serviço. |
|
|
18
|
+
| **as reliable as needs to be, no more** | "Tão confiável quanto precisa ser, não mais" — princípio Google SRE. Sobrar reliability é tão danoso quanto faltar (custa innovation velocity). |
|
|
19
|
+
| **99.99% wisdom** | Sabedoria do 99.99% — além desse target o usuário final não percebe melhoria, porque o link "fraco" entre ele e o serviço (smartphone, ISP, Wi-Fi) já dilui qualquer ganho marginal. |
|
|
20
|
+
| **availability target** | Alvo de disponibilidade — escolha explícita no balanço risk × innovation × cost. NÃO é meta arbitrária do CTO. |
|
|
21
|
+
| **error budget** | Orçamento de erro — `(1 - SLO_target) × total_events`. Fração tolerável de eventos "bad" antes de violar o SLO. Quando esgota, freeze releases. |
|
|
22
|
+
| **risk × innovation tradeoff** | Tradeoff risco × inovação — quanto mais inovação, mais risco. O budget é o mediador EXPLÍCITO desse tradeoff, alinhando dev e SRE. |
|
|
23
|
+
| **MTTR** | Mean Time To Recovery — tempo médio entre detecção do incident e recovery completo. Métrica chave do OMM Capacidade 1 (Resilience). |
|
|
24
|
+
| **MTBF** | Mean Time Between Failures — tempo médio entre falhas consecutivas. Mede estabilidade do serviço em prod. |
|
|
25
|
+
| **MTTF** | Mean Time To Failure — tempo médio até primeira falha (sem recovery). Comum em hardware, raro em serviços (que sempre recovery). |
|
|
26
|
+
|
|
27
|
+
### SLI/SLO/SLA
|
|
28
|
+
|
|
29
|
+
> Vocabulário do cap 4 (Service Level Objectives). SLI é a métrica; SLO é a meta interna; SLA é o contrato externo. SLA geralmente é menos rígido que SLO (gap = margem de segurança).
|
|
30
|
+
|
|
31
|
+
| EN | PT-BR / Significado |
|
|
32
|
+
|---|---|
|
|
33
|
+
| **SLI** | Service-Level Indicator — métrica que classifica eventos como "good" ou "bad". Sempre **event-based** (não time-based), com numerador/denominador definidos em events. |
|
|
34
|
+
| **SLO** | Service-Level Objective — meta interna de SLI (ex: 99.9% das requests good em janela 30d sliding). Drives engineering priorities. |
|
|
35
|
+
| **SLA** | Service-Level Agreement — acordo externo com cliente. Geralmente menos rígido que SLO (gap = margem). Violá-lo gera consequências contratuais (refund, credit). |
|
|
36
|
+
| **availability** | Disponibilidade — fração de tempo OU eventos em estado utilizável. Definição event-based é canônica (cap 4). |
|
|
37
|
+
| **latency** | Latência — tempo de resposta. **Sempre em percentis** (p50, p95, p99, p99.9), nunca em mean. |
|
|
38
|
+
| **throughput** | Vazão — requests/segundo OU eventos/minuto. Mede demanda atendida. |
|
|
39
|
+
| **correctness** | Correção — resposta certa para input dado. Distinto de availability (sistema "up" pode estar retornando dado errado). |
|
|
40
|
+
| **durability** | Durabilidade — dado armazenado sobrevive ao tempo. Storage SLO. |
|
|
41
|
+
| **time-to-first-byte** (TTFB) | Tempo até o primeiro byte da resposta — métrica de UX importante para serviços HTTP. |
|
|
42
|
+
|
|
43
|
+
### Four Golden Signals
|
|
44
|
+
|
|
45
|
+
> Vocabulário do cap 6 (Monitoring Distributed Systems). Latency + Traffic + Errors + Saturation são os 4 sinais mínimos universais para qualquer serviço user-facing. Originados de SREs operando os serviços do Google.
|
|
46
|
+
|
|
47
|
+
| EN | PT-BR / Significado |
|
|
48
|
+
|---|---|
|
|
49
|
+
| **Latency** | Latência — tempo de resposta. **Latência de success vs failure deve ser medida SEPARADAMENTE** — falhas rápidas mascaram falhas lentas e vice-versa. Sempre em percentis. |
|
|
50
|
+
| **Traffic** | Tráfego — volume de demanda no sistema. HTTP requests/s, mensagens/s, bytes/s. Counter monotônico. |
|
|
51
|
+
| **Errors** | Erros — taxa de requests falhas. **Explícitas** (5xx), **implícitas** (200 com resposta errada), **políticas** (200 mas latência > SLO). Counter por `error.type`. |
|
|
52
|
+
| **Saturation** | Saturação — "quão cheio" o serviço está. Medida do recurso MAIS LIMITADO (CPU, memória, conn pool, IO). Gauge resource-specific. |
|
|
53
|
+
| **golden signals** | Sinais dourados — conjunto Latency+Traffic+Errors+Saturation. Universal para qualquer serviço user-facing. Se você só pode medir 4 coisas, meça essas. |
|
|
54
|
+
| **black-box monitoring** | Monitoramento caixa-preta — testar o serviço como usuário externo. HTTP probes, synthetic transactions. Detecta sintoma do POV do cliente. |
|
|
55
|
+
| **white-box monitoring** | Monitoramento caixa-branca — introspecção interna. Logs, métricas, traces. Detecta causa, não apenas sintoma. |
|
|
56
|
+
| **histogram** | Histograma — distribuição com buckets. **Latência sempre em histogram, nunca gauge** — gauge perde long tail. |
|
|
57
|
+
| **exponential bucketing** | Bucketing exponencial — buckets crescem em razão `1.5×` ou `2×` (ex: `1, 2, 5, 10, 25, 50, 100, 250...`). Captura long tail sem explodir cardinalidade. |
|
|
58
|
+
| **percentile** | Percentil — `p50`, `p95`, `p99`, `p99.9`. Latência SEMPRE em percentis. p99 = "99% das requests respondem em ≤ X ms". |
|
|
59
|
+
| **mean** | Média — **anti-pattern para latência**. Long tail invisível: mean = 50ms mas p99 = 5s mascara experiência ruim de 1% dos usuários. |
|
|
60
|
+
| **long tail** | Cauda longa — eventos lentos que dominam UX percebida mas somem na média. Captados por p99/p99.9 e por histograms com buckets exponenciais. |
|
|
61
|
+
|
|
62
|
+
### Toil
|
|
63
|
+
|
|
64
|
+
> Vocabulário do cap 5 (Eliminating Toil). Toil é o trabalho operacional manual repetitivo automatizável que rouba tempo de engineering durável. Definição canônica Google: 6 critérios.
|
|
65
|
+
|
|
66
|
+
| EN | PT-BR / Significado |
|
|
67
|
+
|---|---|
|
|
68
|
+
| **toil** | Trabalho operacional manual repetitivo, automatizável, tático, sem valor durável, escala linear com tamanho do serviço. **Os 6 critérios canônicos**: manual, repetitivo, automatizável, tático (reativo), sem valor durável, escala linear. |
|
|
69
|
+
| **toil ≤ 50% rule** | Regra ≤ 50% — SRE não pode gastar mais que 50% do tempo em toil. Restante é engineering durável (automação, redesign, reliability work). |
|
|
70
|
+
| **automation** | Automação — eliminação de toil via código que se executa sem humano. Cron, queue, daemon, script idempotente. |
|
|
71
|
+
| **overhead** | Overhead administrativo — reuniões, RH, planning, 1:1s. **NÃO é toil** — é não-eliminável. |
|
|
72
|
+
| **grungy work** | Trabalho ingrato — refactor, security cleanup, deprecation migration. **NÃO é toil** — tem valor durável (asset permanente após conclusão). |
|
|
73
|
+
| **toil tax** | Imposto de toil — custo oculto que cresce linearmente com o produto. Prevenir > remediar — design para minimizar toil é mais barato que automação retroativa. |
|
|
74
|
+
|
|
75
|
+
### Postmortem
|
|
76
|
+
|
|
77
|
+
> Vocabulário do cap 15 (Postmortem Culture). Postmortem é blameless por construção — foca em sistema/processo, não pessoas. Princípio: "no postmortem left unreviewed".
|
|
78
|
+
|
|
79
|
+
| EN | PT-BR / Significado |
|
|
80
|
+
|---|---|
|
|
81
|
+
| **postmortem** | Postmortem — documento escrito após incident registrando timeline, causes, ações. Único deliverable obrigatório de toda Severidade SEV1/SEV2. |
|
|
82
|
+
| **blameless** | Sem culpa — foca em sistemas/processos, NÃO em pessoas. Psychological safety é pré-requisito para honesty. Pessoas escondem fatos quando culpadas. |
|
|
83
|
+
| **root cause** | Causa raiz — condição mais profunda que, removida, previne recorrência. NÃO é "fulano fez deploy errado" — é "ausência de canary release" ou "RPS limit não documentado". |
|
|
84
|
+
| **contributing factors** | Fatores contribuintes — condições que amplificaram impacto mas não foram raiz. Ex: "monitoring lag de 4 min" (impacto), não "deploy ruim" (trigger). |
|
|
85
|
+
| **trigger** | Gatilho — evento concreto que iniciou a falha. Geralmente deploy, config change, traffic spike, third-party outage. |
|
|
86
|
+
| **detection** | Detecção — como o incident foi descoberto. Alerta SLO burn rate? Cliente reportou? Monitoramento interno? Tempo de detecção (gap trigger → detect) é métrica chave. |
|
|
87
|
+
| **resolution** | Resolução — passos tomados para recuperar serviço. Ordem cronológica, com horários UTC. |
|
|
88
|
+
| **impact** | Impacto — usuários/revenue/reputação afetados. **Sempre quantificar** — "10K usuários afetados", "$50K revenue impact", "3% violação do SLO mensal". |
|
|
89
|
+
| **action items** | Ações pós-postmortem — SMART (specific, measurable, assignable, realistic, time-bound) com owner. P0/P1/P2 + due date. |
|
|
90
|
+
| **lessons learned** | Lições aprendidas — insights generalizáveis para outros sistemas/times. O que estamos fazendo BEM (reforçar)? O que faltou (corrigir)? |
|
|
91
|
+
| **Wheel of Misfortune** | Roda da Desgraça — exercício de role-play para training. Uma pessoa narra incident histórico, time pratica response. Cap 15 recomenda quartely. |
|
|
92
|
+
| **no postmortem left unreviewed** | Princípio canônico — todo postmortem revisado por par sênior antes de arquivar. Sem review = postmortem morre na gaveta. |
|
|
93
|
+
|
|
94
|
+
### PRR — Production Readiness Review
|
|
95
|
+
|
|
96
|
+
> Vocabulário do cap 32 (Evolving SRE Engagement Model). PRR é o checklist conduzido por SREs antes de aceitar serviço em produção. 3 modelos: Simple PRR, Early Engagement, Frameworks/Platform.
|
|
97
|
+
|
|
98
|
+
| EN | PT-BR / Significado |
|
|
99
|
+
|---|---|
|
|
100
|
+
| **PRR** | Production Readiness Review — checklist conduzido por SREs antes de aceitar serviço em produção. Output: PRR-REPORT.md scored em 6 axes. |
|
|
101
|
+
| **Simple PRR** | Modelo simples — SRE revisa, time dev implementa. Modelo de entrada para serviços simples. |
|
|
102
|
+
| **Early Engagement** | Engagement antecipado — SRE participa desde design. Decisões arquiteturais ganham reliability input antes de escrita de código. |
|
|
103
|
+
| **Frameworks/SRE Platform** | Frameworks/plataforma SRE — libs/templates que tornam serviços PRR-ready by default. Codifica reliability como dependência, não como checklist. |
|
|
104
|
+
| **production-bound** | Destinado a produção — feature/serviço que será exposto a usuários reais. Disparador de PRR obrigatório. |
|
|
105
|
+
| **6 axes of PRR** | 6 eixos do PRR — System Architecture, Instrumentation/Metrics/Monitoring, Emergency Response, Capacity Planning, Change Management, Performance. |
|
|
106
|
+
| **engagement model** | Modelo de engagement — como SRE se relaciona com time dev (Simple PRR / Early Engagement / Frameworks). Evolui com maturidade do produto. |
|
|
107
|
+
| **handoff readiness** | Prontidão para handoff — ponto em que dev pode entregar serviço ao SRE para operação. PRR scored ≥ threshold em todos os 6 axes. |
|
|
108
|
+
| **SRE platform** | Plataforma SRE — conjunto de libs+templates+gates que codifica PRR-readiness. v1.10 do kit-mcp aproxima desse modelo (skills + agents + commands + gates). |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## (b) Comandos canônicos
|
|
113
|
+
|
|
114
|
+
### Template canônico de Postmortem (Markdown)
|
|
115
|
+
|
|
116
|
+
> Estrutura canônica do cap 15. Use literal este shape para qualquer postmortem do projeto. 9 headers obrigatórios + frontmatter de metadata.
|
|
117
|
+
|
|
118
|
+
```markdown
|
|
119
|
+
# Postmortem: <incident-id> — <título-curto>
|
|
120
|
+
|
|
121
|
+
**Data do incident:** YYYY-MM-DD
|
|
122
|
+
**Autores:** <nomes>
|
|
123
|
+
**Status:** Draft | Reviewed | Final
|
|
124
|
+
**Severidade:** SEV1 | SEV2 | SEV3
|
|
125
|
+
|
|
126
|
+
## Summary
|
|
127
|
+
|
|
128
|
+
1-2 parágrafos: o que aconteceu, quem foi afetado, como foi resolvido. Linguagem clara — postmortem deve ser legível para alguém que NÃO estava no incident.
|
|
129
|
+
|
|
130
|
+
## Impact
|
|
131
|
+
|
|
132
|
+
- Usuários afetados: <número/percentual>
|
|
133
|
+
- Duração: HH:MM
|
|
134
|
+
- Revenue/SLO impact: <quantificado>
|
|
135
|
+
- Serviços downstream impactados: <lista>
|
|
136
|
+
|
|
137
|
+
## Root Causes
|
|
138
|
+
|
|
139
|
+
Condição mais profunda que, removida, previne recorrência. NÃO é "deploy do fulano" — é "ausência de canary release" ou "RPS limit não documentado". Pode haver múltiplas root causes.
|
|
140
|
+
|
|
141
|
+
## Trigger
|
|
142
|
+
|
|
143
|
+
Evento concreto que iniciou a falha (deploy X, config change Y, traffic spike Z). Distinto de root cause: trigger é o que acendeu a chama, root cause é a casa cheia de gás.
|
|
144
|
+
|
|
145
|
+
## Resolution
|
|
146
|
+
|
|
147
|
+
Passos tomados para recuperar serviço (ordem cronológica, com horários UTC). Inclui ações que NÃO funcionaram — para informar próximos incidents.
|
|
148
|
+
|
|
149
|
+
## Detection
|
|
150
|
+
|
|
151
|
+
Como descobrimos: alerta SLO burn rate? cliente reportou? monitoramento interno?
|
|
152
|
+
Tempo de detecção (gap entre trigger e detecção). Se cliente reportou primeiro = falha de monitoring.
|
|
153
|
+
|
|
154
|
+
## Action Items
|
|
155
|
+
|
|
156
|
+
| # | Action | Owner | Priority | Due |
|
|
157
|
+
|---|--------|-------|----------|-----|
|
|
158
|
+
| 1 | <SMART action> | @user | P0/P1/P2 | YYYY-MM-DD |
|
|
159
|
+
|
|
160
|
+
## Lessons Learned
|
|
161
|
+
|
|
162
|
+
Insights generalizáveis. O que estamos fazendo BEM (reforçar)? O que faltou (corrigir)? Aplicável a OUTROS sistemas/times além do afetado.
|
|
163
|
+
|
|
164
|
+
## Timeline (UTC)
|
|
165
|
+
|
|
166
|
+
- HH:MM — <evento>
|
|
167
|
+
- HH:MM — <evento>
|
|
168
|
+
- HH:MM — <resolution>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Checklist canônico de PRR (6 axes)
|
|
172
|
+
|
|
173
|
+
> Checklist conduzido pelo SRE antes de aceitar serviço/feature em produção. Cap 32. Cada axis tem 3-5 itens; score 0-2 por item, total normalizado em 0-100% por axis. Threshold default: ≥ 80% em todos para handoff readiness.
|
|
174
|
+
|
|
175
|
+
1. **System Architecture**
|
|
176
|
+
- Redundância: serviço tem replicas em ≥ 2 zonas? failover testado?
|
|
177
|
+
- Single point of failure: identificado e mitigado? (DB primary, Redis instance, etc.)
|
|
178
|
+
- Failure modes mapeados: cada dependência tem comportamento documentado em caso de falha?
|
|
179
|
+
- Load balancing strategy: round-robin? least-conn? consistent-hash? Adequada ao perfil?
|
|
180
|
+
- Graceful degradation: serviço opera (modo degradado) se dependência crítica falha?
|
|
181
|
+
|
|
182
|
+
2. **Instrumentation, Metrics, Monitoring**
|
|
183
|
+
- 4 golden signals presentes: Latency (histogram), Traffic (counter), Errors (counter), Saturation (gauge)?
|
|
184
|
+
- SLI/SLO definidos: ≥ 1 SLI canônico (event-based) com SLO target acordado com stakeholders?
|
|
185
|
+
- Alertas SLO burn-rate (não threshold): paginam baseados em consumo de error budget, não CPU%?
|
|
186
|
+
- Logs estruturados: JSON com `request.id`, `user.id`, `tenant_id`, `duration_ms`, `error.type`?
|
|
187
|
+
- Traces propagados: `traceparent` header preservado cross-service via OTel SDK?
|
|
188
|
+
|
|
189
|
+
3. **Emergency Response**
|
|
190
|
+
- Runbook existe e foi testado: documento PT-BR/EN para top-N incidents conhecidos?
|
|
191
|
+
- On-call rotation definida: escala via PagerDuty/Opsgenie/equivalente, com follow-the-sun se aplicável?
|
|
192
|
+
- Page routing: alerta certo chega na pessoa certa em ≤ 5 min?
|
|
193
|
+
- Escalation policy: se primary não ack em 10 min, secondary é paged?
|
|
194
|
+
- Wheel of Misfortune realizado nos últimos 90d: time praticou response em incident histórico?
|
|
195
|
+
|
|
196
|
+
4. **Capacity Planning**
|
|
197
|
+
- Load test feito: serviço sustenta N% acima do peak observado em últimos 30d?
|
|
198
|
+
- RPS limit documentado: capacidade conhecida por endpoint, com hard-stop antes do colapso?
|
|
199
|
+
- Auto-scaling testado: regra de scale-up/down disparada em condição realista?
|
|
200
|
+
- Quota/rate-limit por tenant: prevenção de noisy-neighbor entre clients?
|
|
201
|
+
- Headroom ≥ 30%: utilization atual ≤ 70% para absorver spike?
|
|
202
|
+
|
|
203
|
+
5. **Change Management**
|
|
204
|
+
- Canary release: novo deploy expõe a 1-10% antes de 100%?
|
|
205
|
+
- Feature flags: changes desacopladas de deploy, rollback sem rebuild?
|
|
206
|
+
- Rollback automatizado: SLO burn em canary dispara rollback em ≤ 5 min sem humano?
|
|
207
|
+
- CI/CD gates obrigatórios: tests + lint + security scan antes de merge?
|
|
208
|
+
- Deploy frequency mensurado: cadência conhecida + correlação com incidents?
|
|
209
|
+
|
|
210
|
+
6. **Performance**
|
|
211
|
+
- Latência baseline (p50/p95/p99): valor conhecido + alerta em regressão?
|
|
212
|
+
- Error budget definido: budget remanescente visível em dashboard, atualizado em real-time?
|
|
213
|
+
- Saturation tracked: CPU/memória/conn pool/IO trackeados como gauge?
|
|
214
|
+
- Long tail (p99.9) monitored: percentil extremo medido — não basta p95?
|
|
215
|
+
|
|
216
|
+
### Queries SLI standardized (Postgres)
|
|
217
|
+
|
|
218
|
+
> Queries canônicas para materializar SLI events em SLO compliance. Use sobre tabela `observability.events` (precedente v1.9 — `obs.events` ou similar). Ajustar nome do schema/tabela ao projeto.
|
|
219
|
+
|
|
220
|
+
```sql
|
|
221
|
+
-- PT-BR: SLI event-based — boa request = HTTP 2xx + duration < 300ms
|
|
222
|
+
-- Materializa contagem para alimentar burn rate e SLO compliance
|
|
223
|
+
select
|
|
224
|
+
count(*) filter (where status_code < 400 and duration_ms < 300) as good,
|
|
225
|
+
count(*) filter (where status_code >= 400 or duration_ms >= 300) as bad,
|
|
226
|
+
count(*) as total
|
|
227
|
+
from observability.events
|
|
228
|
+
where service = 'orders-api' and timestamp > now() - interval '30 days';
|
|
229
|
+
|
|
230
|
+
-- PT-BR: 4 golden signals em 1 query (Latency p50/p95/p99 + Traffic + Errors + Saturation)
|
|
231
|
+
-- Use para dashboard real-time de saúde do serviço
|
|
232
|
+
select
|
|
233
|
+
date_trunc('minute', timestamp) as minute,
|
|
234
|
+
count(*) as traffic_per_min,
|
|
235
|
+
count(*) filter (where result_success = false) as errors_per_min,
|
|
236
|
+
percentile_cont(0.50) within group (order by duration_ms) as latency_p50,
|
|
237
|
+
percentile_cont(0.95) within group (order by duration_ms) as latency_p95,
|
|
238
|
+
percentile_cont(0.99) within group (order by duration_ms) as latency_p99,
|
|
239
|
+
max(connection_pool_used_pct) as saturation_max
|
|
240
|
+
from observability.events
|
|
241
|
+
where service = 'orders-api' and timestamp > now() - interval '1 hour'
|
|
242
|
+
group by minute
|
|
243
|
+
order by minute desc;
|
|
244
|
+
|
|
245
|
+
-- PT-BR: latência success vs error separadas (cap 6 — não misturar)
|
|
246
|
+
-- Falhas rápidas mascaram falhas lentas; sempre splitar por result.success
|
|
247
|
+
select
|
|
248
|
+
result_success,
|
|
249
|
+
percentile_cont(0.95) within group (order by duration_ms) as p95_ms,
|
|
250
|
+
percentile_cont(0.99) within group (order by duration_ms) as p99_ms,
|
|
251
|
+
count(*) as n
|
|
252
|
+
from observability.events
|
|
253
|
+
where service = 'orders-api' and timestamp > now() - interval '1 hour'
|
|
254
|
+
group by result_success;
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### MCP tools relevantes
|
|
258
|
+
|
|
259
|
+
> Tools do Supabase MCP usados pelos agentes SRE da Phase 37 (golden-signals-instrumenter, toil-auditor, postmortem-writer, prr-conductor) para conduzir PRR / instrumentação / postmortem com dados reais.
|
|
260
|
+
|
|
261
|
+
```text
|
|
262
|
+
mcp__supabase__list_tables — schema review (PRR axis "System Architecture")
|
|
263
|
+
mcp__supabase__execute_sql — queries SLI / golden signals / análise de incident
|
|
264
|
+
mcp__supabase__get_advisors — security/performance lints (PRR axis "Performance")
|
|
265
|
+
mcp__supabase__list_edge_functions — inventário de serviços para PRR
|
|
266
|
+
mcp__supabase__get_logs — verificação de instrumentação (PRR axis "Instrumentation")
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## (c) Patterns canônicos
|
|
272
|
+
|
|
273
|
+
### Pattern: risk continuum em decisão de SLO target
|
|
274
|
+
|
|
275
|
+
> Cap 3. SLO target NÃO é meta arbitrária — é escolha explícita no continuum risk × innovation × cost. Custo cresce não-linearmente; usuário satura em torno de 99.95-99.99% para serviços user-facing (smartphone/ISP/Wi-Fi diluem qualquer melhoria além).
|
|
276
|
+
|
|
277
|
+
| Target | Tolerância 30d | Quando usar | Custo relativo |
|
|
278
|
+
|---|---|---|---|
|
|
279
|
+
| 99% | 7.2 h | Tier free, beta features, internal tools | 1× |
|
|
280
|
+
| 99.5% | 3.6 h | Tier free de produção | 2× |
|
|
281
|
+
| 99.9% | 43.2 min | Tier paid, paths críticos default | 5× |
|
|
282
|
+
| 99.95% | 21.6 min | Tier enterprise / mission-critical | 10× |
|
|
283
|
+
| 99.99% | 4.3 min | Apenas se justificado por user perception (raro) | 50×+ |
|
|
284
|
+
| 99.999% | 26 s | NUNCA para serviço user-facing (smartphone dilui) | 100×+ |
|
|
285
|
+
|
|
286
|
+
**Princípio Google SRE:** "as reliable as needs to be, no more". Sobrar reliability é tão danoso quanto faltar — custa innovation velocity, e o usuário não percebe melhoria além de ~99.95%-99.99%.
|
|
287
|
+
|
|
288
|
+
**Como aplicar:**
|
|
289
|
+
1. Identifique o link mais fraco entre serviço e usuário final (ex: Wi-Fi 99% disponível dilui qualquer SLO 99.999%)
|
|
290
|
+
2. Escolha SLO target ≤ 99.95% por default — só suba para 99.99%+ com justificativa documentada
|
|
291
|
+
3. Documente o tradeoff explícito: "este SLO em troca de N% velocity gasto em reliability work"
|
|
292
|
+
4. Revise a cada milestone — risk appetite evolui com produto
|
|
293
|
+
|
|
294
|
+
### Pattern: 4 golden signals em código (OTel SDK)
|
|
295
|
+
|
|
296
|
+
> Cap 6. Os 4 sinais mínimos universais aplicados em uma Edge Function/handler via OTel SDK. Latência separada por `result` (success vs error); errors counter por `error.type` (categoria, não message); saturation gauge é resource-specific (geralmente conn pool).
|
|
297
|
+
|
|
298
|
+
```ts
|
|
299
|
+
// PT-BR: instrumentação canônica de Edge Function — 4 golden signals
|
|
300
|
+
import { trace, metrics } from '@opentelemetry/api'
|
|
301
|
+
|
|
302
|
+
const tracer = trace.getTracer('orders-service')
|
|
303
|
+
const meter = metrics.getMeter('orders-service')
|
|
304
|
+
|
|
305
|
+
// PT-BR: 1. LATENCY — histogram com bucketing exponencial
|
|
306
|
+
const latencyHistogram = meter.createHistogram('http_request_duration_ms', {
|
|
307
|
+
description: 'Request latency in ms',
|
|
308
|
+
unit: 'ms',
|
|
309
|
+
// PT-BR: buckets exponenciais cobrem long tail (1ms → 30s)
|
|
310
|
+
advice: { explicitBucketBoundaries: [1, 2, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 30000] }
|
|
311
|
+
})
|
|
312
|
+
|
|
313
|
+
// PT-BR: 2. TRAFFIC — counter de requests recebidos
|
|
314
|
+
const trafficCounter = meter.createCounter('http_requests_total', {
|
|
315
|
+
description: 'Total HTTP requests received'
|
|
316
|
+
})
|
|
317
|
+
|
|
318
|
+
// PT-BR: 3. ERRORS — counter por error.type (alta cardinalidade controlada)
|
|
319
|
+
const errorsCounter = meter.createCounter('http_errors_total', {
|
|
320
|
+
description: 'Total HTTP errors by error.type'
|
|
321
|
+
})
|
|
322
|
+
|
|
323
|
+
// PT-BR: 4. SATURATION — gauge do recurso mais escasso (connection pool em DB)
|
|
324
|
+
const saturationGauge = meter.createObservableGauge('db_connection_pool_used_pct', {
|
|
325
|
+
description: 'DB connection pool utilization %',
|
|
326
|
+
unit: '%'
|
|
327
|
+
})
|
|
328
|
+
|
|
329
|
+
export async function placeOrder(req: Request) {
|
|
330
|
+
const startMs = performance.now()
|
|
331
|
+
trafficCounter.add(1, { endpoint: '/api/v1/orders', method: 'POST' })
|
|
332
|
+
|
|
333
|
+
return tracer.startActiveSpan('place_order', async (span) => {
|
|
334
|
+
try {
|
|
335
|
+
const order = await db.insertOrder(req.body)
|
|
336
|
+
// PT-BR: latência APENAS de success — separar de error
|
|
337
|
+
const durationMs = performance.now() - startMs
|
|
338
|
+
latencyHistogram.record(durationMs, { result: 'success', endpoint: '/api/v1/orders' })
|
|
339
|
+
return order
|
|
340
|
+
} catch (e) {
|
|
341
|
+
const durationMs = performance.now() - startMs
|
|
342
|
+
// PT-BR: latência de erro — separada
|
|
343
|
+
latencyHistogram.record(durationMs, { result: 'error', endpoint: '/api/v1/orders' })
|
|
344
|
+
// PT-BR: counter por error.type — categoria, não message
|
|
345
|
+
errorsCounter.add(1, { error_type: classify(e), endpoint: '/api/v1/orders' })
|
|
346
|
+
throw e
|
|
347
|
+
} finally {
|
|
348
|
+
span.end()
|
|
349
|
+
}
|
|
350
|
+
})
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
**Atributos canônicos das métricas:**
|
|
355
|
+
- `endpoint`: path normalizado (`/api/v1/orders`, NÃO `/api/v1/orders/abc-123`)
|
|
356
|
+
- `method`: HTTP method (`GET`, `POST`)
|
|
357
|
+
- `result`: `success` ou `error` — para latência APENAS
|
|
358
|
+
- `error_type`: categoria fechada (`timeout`, `validation`, `auth`, `rate_limit`, `db`, `internal`)
|
|
359
|
+
|
|
360
|
+
### Pattern: classificação de toil (decisão tree)
|
|
361
|
+
|
|
362
|
+
> Cap 5. Antes de classificar trabalho como "toil", aplicar os 6 critérios canônicos Google. Trabalho repetitivo NÃO é automaticamente toil — overhead administrativo e grungy work são repetitivos mas têm naturezas diferentes.
|
|
363
|
+
|
|
364
|
+
```text
|
|
365
|
+
Tarefa repetitiva detectada → aplicar 6 critérios canônicos:
|
|
366
|
+
|
|
367
|
+
1. Manual? (humano executa cada vez) ────┐
|
|
368
|
+
2. Repetitiva? (já fiz isso 3+ vezes) │
|
|
369
|
+
3. Automatizável? (script/cron resolve) ├── Se TODOS sim → TOIL
|
|
370
|
+
4. Tática? (reage a evento, não planeja) │ → automatizar / eliminar
|
|
371
|
+
5. Sem valor durável? (não cria asset permanente) │ → contar em ≤ 50% rule
|
|
372
|
+
6. Escala linear? (mais users = mais trabalho) ─┘
|
|
373
|
+
|
|
374
|
+
Se NÃO for toil mas repetitivo, classificar:
|
|
375
|
+
- OVERHEAD (reuniões, RH) → não-eliminável, não conta em ≤ 50%
|
|
376
|
+
- GRUNGY WORK (refactor, sec cleanup) → necessário, valor durável → projeto
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
**Regra ≤ 50%:** SRE não pode gastar mais que 50% do tempo em toil. Se passa de 50%, é gatilho para:
|
|
380
|
+
1. Pedir mais headcount (toil cresce com produto, não scale linearmente com time)
|
|
381
|
+
2. Engajar projeto de automation com prioridade P0
|
|
382
|
+
3. Renegociar com produto sobre features que adicionam toil
|
|
383
|
+
|
|
384
|
+
### Pattern: postmortem timeline em UTC
|
|
385
|
+
|
|
386
|
+
> Cap 15. Timeline padronizado em UTC com horários `HH:MM` em ordem cronológica. Inclui ações que NÃO funcionaram (informa próximos incidents) e gap entre trigger e detection (métrica chave de monitoring quality).
|
|
387
|
+
|
|
388
|
+
```text
|
|
389
|
+
## Timeline (UTC)
|
|
390
|
+
|
|
391
|
+
- 14:23 — Deploy v2.3.0 do orders-service mergeado em main
|
|
392
|
+
- 14:27 — CI completa, deploy automatizado para prod (canary 10%)
|
|
393
|
+
- 14:31 — Alerta SLO burn rate dispara (page on-call)
|
|
394
|
+
- 14:33 — On-call ack page; abre incident Slack channel #inc-2026-05-06-01
|
|
395
|
+
- 14:38 — Hipótese inicial: deploy v2.3.0 (correlação temporal)
|
|
396
|
+
- 14:42 — Rollback canary para 0%; SLO burn cessa
|
|
397
|
+
- 14:50 — Confirma: deploy v2.3.0 introduziu N+1 query em /api/v1/orders
|
|
398
|
+
- 15:02 — Fix em PR #1234; CI verde em 14 min
|
|
399
|
+
- 15:18 — Deploy do fix; canary 10% → 100% sem regressão
|
|
400
|
+
- 15:25 — Incident resolvido; SLO compliance retorna a 99.92%
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Insights derivados desse timeline:**
|
|
404
|
+
- **Detection lag:** trigger 14:23 → detect 14:31 = 8 min. Alvo: ≤ 5 min. Action item: alerta de canary regression em 1 min.
|
|
405
|
+
- **Resolution time:** 14:31 → 15:25 = 54 min (MTTR). Action item: rollback automatizado em < 5 min via SLO burn detection.
|
|
406
|
+
- **Root cause:** "deploy introduziu N+1" é trigger; root cause é "ausência de query plan diff em CI".
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## (d) Anti-patterns explícitos
|
|
411
|
+
|
|
412
|
+
> Comportamentos comuns que parecem corretos mas são ativamente prejudiciais. Cada um inclui ANTI-PATTERN (comportamento concreto), POR QUÊ É RUIM (consequência sistêmica) e CERTO (substituto canônico). Cap 3, 4, 5, 6, 12, 15.
|
|
413
|
+
|
|
414
|
+
### Alert fatigue
|
|
415
|
+
|
|
416
|
+
```text
|
|
417
|
+
ANTI-PATTERN: paginar em todos os sintomas (CPU > 80%, mem < 10%, threads > N,
|
|
418
|
+
latência > X em qualquer endpoint, log com "ERROR", etc.).
|
|
419
|
+
Mais alertas = "mais cobertura", supostamente.
|
|
420
|
+
|
|
421
|
+
POR QUÊ É RUIM: noise mascara real signals; pessoas começam a ignorar pages
|
|
422
|
+
("é o cron job de novo"); psychological habituation;
|
|
423
|
+
próximo SEV1 chega no meio do ruído e é perdido.
|
|
424
|
+
|
|
425
|
+
CERTO: SLO-based alerting (event burn rate) — alerta só quando customer
|
|
426
|
+
impact é mensurável. Deletar alertas threshold sem ação clara.
|
|
427
|
+
Regra: cada page deve ter runbook concreto OU ser deletada.
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### Hero culture
|
|
431
|
+
|
|
432
|
+
```text
|
|
433
|
+
ANTI-PATTERN: celebrar quem fica acordado 36h em incident; bonus para
|
|
434
|
+
"incident champion"; on-call que "resolve tudo sozinho".
|
|
435
|
+
Cultura que premia heroísmo individual.
|
|
436
|
+
|
|
437
|
+
POR QUÊ É RUIM: comportamento perverso (esperar pelo herói em vez de
|
|
438
|
+
investir em automation); evita investimento sistêmico;
|
|
439
|
+
burn-out garantido em 6-12 meses; conhecimento concentrado
|
|
440
|
+
em 1 pessoa = bus factor 1.
|
|
441
|
+
|
|
442
|
+
CERTO: blameless postmortem foca em sistema; action items > "fulano salvou
|
|
443
|
+
o dia"; ≤ 50% toil rule (se 1 pessoa está apagando incêndio, é
|
|
444
|
+
sinal de subinvestimento em automation, não falta de heróis).
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### SLO 99.99%+ default
|
|
448
|
+
|
|
449
|
+
```text
|
|
450
|
+
ANTI-PATTERN: definir SLO 99.99% sem justificativa; "queremos ser melhores
|
|
451
|
+
que a concorrência"; copiar SLO de cloud provider sem
|
|
452
|
+
adaptar ao serviço.
|
|
453
|
+
|
|
454
|
+
POR QUÊ É RUIM: tolerância 30d = 4.3 min, sem tempo de reagir;
|
|
455
|
+
pressões para "esconder" outages para preservar number;
|
|
456
|
+
budget esgota antes do alert ser útil;
|
|
457
|
+
custo de innovation velocity 50× maior que SLO 99.9%.
|
|
458
|
+
|
|
459
|
+
CERTO: target ≤ 99.95% para SLO real; 99.99%+ apenas com justificativa
|
|
460
|
+
explícita de user perception (raro — geralmente smartphone/Wi-Fi
|
|
461
|
+
já dilui qualquer ganho marginal); use métricas/dashboards
|
|
462
|
+
informativos para tracking de excellence sem comprometer.
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### Fixed-window error budget
|
|
466
|
+
|
|
467
|
+
```text
|
|
468
|
+
ANTI-PATTERN: error budget reseta dia 1 do mês; "tivemos outage dia 31,
|
|
469
|
+
reseta amanhã"; calendar-aligned budget tracking.
|
|
470
|
+
|
|
471
|
+
POR QUÊ É RUIM: cliente NÃO esquece outage por causa de calendar reset;
|
|
472
|
+
pressão para postpone fixes para depois do reset
|
|
473
|
+
(behavioral hazard); dificulta planejamento de capacity;
|
|
474
|
+
amplifica gaming do sistema.
|
|
475
|
+
|
|
476
|
+
CERTO: sliding window 30d. Outage dia 31 fica no budget até dia 30 do
|
|
477
|
+
mês seguinte (sai gradualmente). Trata-se de função contínua,
|
|
478
|
+
não step function. Mais alinhado com user perception real.
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
### Blame culture (vs blameless)
|
|
482
|
+
|
|
483
|
+
```text
|
|
484
|
+
ANTI-PATTERN: postmortem nomeia "fulano fez deploy errado"; root cause
|
|
485
|
+
identificada como "human error"; punição/PIP após incident;
|
|
486
|
+
postmortem como ferramenta de accountability individual.
|
|
487
|
+
|
|
488
|
+
POR QUÊ É RUIM: engineers escondem incidents próximos ao limite;
|
|
489
|
+
psychological safety colapsa; replicação garantida
|
|
490
|
+
(sistema não muda — só a pessoa); informação importante
|
|
491
|
+
some (quem viveu não fala, quem fala não viveu).
|
|
492
|
+
|
|
493
|
+
CERTO: postmortem foca em sistema/processo (ausência de canary,
|
|
494
|
+
ausência de rollback automatizado, runbook desatualizado);
|
|
495
|
+
pessoas são parte do sistema, NÃO o root cause; revisão por par
|
|
496
|
+
sênior antes de arquivar; "no postmortem left unreviewed".
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### Mean-only latency
|
|
500
|
+
|
|
501
|
+
```text
|
|
502
|
+
ANTI-PATTERN: alertar/reportar mean latency; dashboard com "average
|
|
503
|
+
response time"; SLA com "média mensal de latência";
|
|
504
|
+
p99 considerado "muito ruidoso" e descartado.
|
|
505
|
+
|
|
506
|
+
POR QUÊ É RUIM: mean = 50ms, mas p99 = 5000ms (long tail invisível);
|
|
507
|
+
UX dominada por p99 (1% dos usuários têm experiência
|
|
508
|
+
terrível, mas média esconde); mean é métrica enganosa
|
|
509
|
+
em qualquer distribuição com cauda longa.
|
|
510
|
+
|
|
511
|
+
CERTO: SEMPRE percentis (p50, p95, p99, p99.9); histogram com bucketing
|
|
512
|
+
exponencial (não gauge); latência success vs error separadas
|
|
513
|
+
(cap 6 — falhas rápidas mascaram falhas lentas); alertas
|
|
514
|
+
baseados em p99 ou p99.9, nunca mean.
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
### Monitoring causes não symptoms
|
|
518
|
+
|
|
519
|
+
```text
|
|
520
|
+
ANTI-PATTERN: alertar em "CPU > 80%", "memória < 10%", "threads > N",
|
|
521
|
+
"disk I/O > X"; mistura "what" (sintoma observável pelo
|
|
522
|
+
cliente) com "why" (causa raiz interna).
|
|
523
|
+
|
|
524
|
+
POR QUÊ É RUIM: false positives (cron job legítimo dispara CPU alta;
|
|
525
|
+
page no domingo de manhã sem causa real);
|
|
526
|
+
false negatives (sistema lento sem CPU alta — ex: lock
|
|
527
|
+
contention, GC pause, network latency);
|
|
528
|
+
normalização do desvio (cap 12 do livro Observability
|
|
529
|
+
Engineering — Challenger disaster framing);
|
|
530
|
+
acoplamento alert × infra (cada novo serviço = N alertas).
|
|
531
|
+
|
|
532
|
+
CERTO: alertar APENAS em SLO burn rate (event-based, customer-impacting).
|
|
533
|
+
Decouple "what" de "why" — alert diz que tem dor (SLO burn 4×),
|
|
534
|
+
debug descobre porquê (CPU? memória? lock? deploy?). Métricas de
|
|
535
|
+
saturação são gauge informativo no dashboard, não trigger de page.
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
---
|
|
539
|
+
|
|
540
|
+
## (f) Vocabulário v1.11 — Cascading Failures (cap 22)
|
|
541
|
+
|
|
542
|
+
> Vocabulário do cap 22 (Addressing Cascading Failures). Cascading failure é falha que se amplifica via loops de feedback — primeiro nó cai, traffic flui para outros, eles também caem, etc. Prevenção custa muito menos que recuperação.
|
|
543
|
+
|
|
544
|
+
| EN | PT-BR / Significado |
|
|
545
|
+
|---|---|
|
|
546
|
+
| **cascading failure** | Falha em cascata — failure que se amplifica via loops de feedback. Triggers comuns: server overload, resource exhaustion (CPU/mem/FDs/threads), service unavailability gera retry storm. |
|
|
547
|
+
| **retry storm** | Tempestade de retries — clientes retentam após failure simultaneamente, multiplicando carga e prolongando outage. Prevenção: jitter + retry budget + deadline propagation. |
|
|
548
|
+
| **thundering herd** | Manada trovejante — N clientes acordam ao mesmo tempo após recovery e batem no servidor recém-recuperado, derrubando-o de novo. Prevenção: jitter em wake-up, slow-start. |
|
|
549
|
+
| **load shedding** | Descarte de carga — server intencionalmente rejeita requests quando overloaded (HTTP 503 + Retry-After) em vez de aceitar e cair. Preserva capacidade para subset de tráfego. |
|
|
550
|
+
| **graceful degradation** | Degradação graciosa — modo reduzido sob carga (e.g., desligar features não-críticas, retornar cached/stale data, reduzir precision). Preferível a falha total. |
|
|
551
|
+
| **circuit breaker** | Disjuntor — pattern: após N failures consecutivas, "abre o circuito" e falha rápido (sem chamar dep) por window T. Protege caller e dep. Estados: closed/open/half-open. |
|
|
552
|
+
| **deadline propagation** | Propagação de deadline — request chega com TTL X; cada hop downstream subtrai tempo gasto até aqui e aborta se restante ≤ 0. Evita work zumbi após client desistir. |
|
|
553
|
+
| **kill switch** | Chave-mata — flag que desabilita feature inteira via 1 comando (config update / feature flag). Útil em incident pra parar bleed de feature problemática. |
|
|
554
|
+
| **throttle** | Estrangular — limitar rate de operações (per-user, per-tenant, global). Diferente de load shedding: throttle é per-policy contínuo; shed é reactive a saturation. |
|
|
555
|
+
| **queue management** | Gestão de fila — política sobre o que fazer quando queue lota: drop oldest (LIFO), drop newest (FIFO), drop random, drop by priority. Default `drop oldest` evita starvation. |
|
|
556
|
+
| **resource exhaustion** | Esgotamento de recurso — CPU 100%, memory OOM, file descriptors esgotados, threads bloqueadas, conn pool empty. Cada um é trigger comum de cascade. |
|
|
557
|
+
| **server overload** | Sobrecarga de servidor — load > capacity. Lab leve sintoma: latency p99 sobe 10×, then errors, then crashes. Detect via Saturation (cap 6). |
|
|
558
|
+
| **slow start** | Início lento — após recovery, aceita tráfego gradual (10% → 25% → 50% → 100%) em vez de full blast. Permite caches aquecerem, conn pools abrirem. |
|
|
559
|
+
| **degraded mode** | Modo degradado — fallback path quando dep crítica está down (cache stale, default values, simplified algorithm). Distinct de graceful degradation: degraded mode é design-time, not load-driven. |
|
|
560
|
+
|
|
561
|
+
## (g) Vocabulário v1.11 — Release Engineering (cap 8)
|
|
562
|
+
|
|
563
|
+
> Vocabulário do cap 8 (Release Engineering). Release engineering é disciplina específica que existe em paralelo a SRE e dev — cuida da pipeline de "código no merge → bits em prod". Foco: reproducibilidade, hermeticidade, policy enforcement.
|
|
564
|
+
|
|
565
|
+
| EN | PT-BR / Significado |
|
|
566
|
+
|---|---|
|
|
567
|
+
| **hermetic build** | Build hermético — build que produz output bit-idêntico em qualquer máquina, qualquer momento, dado mesmo input. Sem network, sem timestamps, sem env vars não-pinadas. |
|
|
568
|
+
| **reproducible build** | Build reprodutível — sinônimo de hermetic OU subset (apenas determinismo de output, sem requirement de network isolation). |
|
|
569
|
+
| **release pipeline** | Pipeline de release — sequência canônica: source → build → test → package → deploy. Cada estágio com inputs/outputs versionados. |
|
|
570
|
+
| **deployment policy** | Política de deploy — regras sobre QUEM pode deployar, QUANDO (freeze windows), ONDE (canary → 100%), COMO (signed commits, required reviewers, CI gates verde). |
|
|
571
|
+
| **self-service deployment** | Deploy self-service — engenheiros deployam sozinhos via UI/CLI sem precisar pedir SRE. Pré-requisito: policies enforced em ferramenta, não via aprovação manual. |
|
|
572
|
+
| **build provenance** | Proveniência de build — metadata sobre COMO o artefato foi construído (commit SHA, builder ID, build env, deps versions, signature). SLSA framework moderniza. |
|
|
573
|
+
| **configuration management** | Gestão de config — config separada de código (12-factor); config versionada, auditável, rollback-able. ConfigMaps, env vars, feature flags. |
|
|
574
|
+
| **branching strategy** | Estratégia de branching — Trunk-based (preferred) vs Gitflow. Trunk: main sempre deployable; feature flags para work in progress. Gitflow: branches longos, harder to rollback. |
|
|
575
|
+
| **release engineering invariant** | Invariante de release engineering — propriedade que NUNCA é violada, mesmo sob pressão. Examples: "build sem network", "deploy só com CI verde", "rollback < 5min em qualquer release". |
|
|
576
|
+
| **continuous build** | Build contínuo — toda commit dispara build automático. Quebra detectada em minutos vs dias. |
|
|
577
|
+
| **continuous test** | Teste contínuo — toda commit dispara suite. Failure visível antes de merge (na PR). |
|
|
578
|
+
| **continuous deployment** | Deploy contínuo — todo commit que passa CI vai pra prod automaticamente. Distinct de continuous delivery (deploy disponível mas não auto). |
|
|
579
|
+
| **canary release** | Release canário — rollout gradual: 1% → 10% → 50% → 100% com SLO check em cada estágio. Limita blast radius de bug. |
|
|
580
|
+
| **rollback** | Rollback — reverter para release anterior. Tempo target: < 5 min em qualquer release. Pré-requisito: artefato anterior preservado, schema migrations forward-only OR reversible. |
|
|
581
|
+
| **forward-fix** | Forward fix — em vez de rollback, fazer hotfix forward. Preferível quando rollback custaria perda de dado (e.g., schema migration que adicionou coluna NOT NULL). |
|
|
582
|
+
| **lockfile** | Arquivo de trava — `package-lock.json`/`pnpm-lock.yaml`/`deno.lock`/`Cargo.lock`/`go.sum`. Pin de TODAS deps transitivas a versões específicas. **Sem lockfile = não-reprodutível.** |
|
|
583
|
+
| **frozen-lockfile** | Lockfile congelado — modo CI (`npm ci`, `pnpm install --frozen-lockfile`, `cargo install --locked`) que falha se lockfile não-sincronizado. Garante deterministic install. |
|
|
584
|
+
| **config drift** | Drift de config — config em prod divergiu de config em git. Causa: changes ad-hoc via UI/CLI sem PR. Solução: GitOps (config = git, prod = mirror). |
|
|
585
|
+
| **no-rollback culture** | Cultura sem rollback — equipe que sempre forward-fixes, nunca rollbacks. Sintoma: rollback "nunca foi testado", quando precisa não funciona. Anti-pattern. |
|
|
586
|
+
| **build cache** | Cache de build — output de etapas determinísticas reusado entre runs. Acelera 10-100×. Requirement: hermeticidade (input idêntico → output idêntico → cacheável). |
|
|
587
|
+
|
|
588
|
+
## (h) Anti-patterns v1.11 (cap 22 + 8)
|
|
589
|
+
|
|
590
|
+
> Comportamentos comuns que ativamente causam cascade ou release fragility. Format: ANTI-PATTERN / POR QUÊ É RUIM / CERTO.
|
|
591
|
+
|
|
592
|
+
### Retry sem jitter (retry storm trigger)
|
|
593
|
+
|
|
594
|
+
```text
|
|
595
|
+
ANTI-PATTERN: client falha → retry após 1s; 1000 clients fazem isso
|
|
596
|
+
simultaneamente; servidor recebe 1000 retries no mesmo segundo
|
|
597
|
+
após cada delay window.
|
|
598
|
+
|
|
599
|
+
POR QUÊ É RUIM: thundering herd. Server cai, recupera, cai de novo no
|
|
600
|
+
wake-up coordenado. Outage prolonga indefinidamente.
|
|
601
|
+
|
|
602
|
+
CERTO: full jitter — `delayMs = random(0, base * 2^attempt)`. Spread aleatório
|
|
603
|
+
distribui carga ao longo da janela. Retry budget global limita N total
|
|
604
|
+
de retries por segundo (se exceder = circuit breaker abre).
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
### Retry sem deadline (cascade amplification)
|
|
608
|
+
|
|
609
|
+
```text
|
|
610
|
+
ANTI-PATTERN: request chega no nó A com timeout 30s; A chama B com retry 3×
|
|
611
|
+
(timeout 30s cada). B chama C com retry 3× (timeout 30s).
|
|
612
|
+
Worst-case path: 30s × 3 × 3 = 270s, mas client já desistiu em 30s.
|
|
613
|
+
|
|
614
|
+
POR QUÊ É RUIM: 240s de work zumbi após client gone. Recursos consumidos
|
|
615
|
+
inutilmente. Cascade amplifica — 1 retry de A vira 9 calls
|
|
616
|
+
pra C.
|
|
617
|
+
|
|
618
|
+
CERTO: deadline propagation. A recebe TTL=30s. Antes de chamar B, calcula
|
|
619
|
+
remaining = 30s - elapsed. Passa remaining como deadline a B (header
|
|
620
|
+
grpc-timeout, AbortSignal.timeout). B faz mesmo com C. Quando deadline
|
|
621
|
+
chega a 0, falha rápido sem retry. Retry budget também limita amplificação.
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
### Deploy não-hermético (config drift entre environments)
|
|
625
|
+
|
|
626
|
+
```text
|
|
627
|
+
ANTI-PATTERN: build em CI usa `npm install` (não `npm ci`). Local dev usa
|
|
628
|
+
versão diferente de deps porque resolveu o range diferente.
|
|
629
|
+
Deploy passa em CI, falha em prod com NPE em dep transitiva.
|
|
630
|
+
|
|
631
|
+
POR QUÊ É RUIM: bug não-reproduzível. Reviewer aprova "no meu ambiente
|
|
632
|
+
roda". Prod cai com bug que CI não detectou. Forensics
|
|
633
|
+
impossível porque "que versão de X estava em prod naquele
|
|
634
|
+
momento?" não tem resposta.
|
|
635
|
+
|
|
636
|
+
CERTO: lockfile commitado + `npm ci` (ou `pnpm install --frozen-lockfile`,
|
|
637
|
+
`pip install --require-hashes`). Build hermético — input idêntico
|
|
638
|
+
(commit SHA + lockfile) → output bit-idêntico. Toda deploy tem
|
|
639
|
+
artefato reproducible.
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
### No-rollback culture (acumulação de risk)
|
|
643
|
+
|
|
644
|
+
```text
|
|
645
|
+
ANTI-PATTERN: equipe sempre forward-fixes. "Rollback é complicado".
|
|
646
|
+
Última vez que rolledback foi há 18 meses. Não está
|
|
647
|
+
testado.
|
|
648
|
+
|
|
649
|
+
POR QUÊ É RUIM: quando incident grave ocorre, rollback é a opção certa
|
|
650
|
+
— mas não funciona porque nunca foi exercitado. Forward-fix
|
|
651
|
+
em meio a outage adiciona complexidade. MTTR cresce.
|
|
652
|
+
|
|
653
|
+
CERTO: rollback testado em DR exercise mensal. Cada release verifica
|
|
654
|
+
que rollback funciona em < 5 min. Schema migrations sempre
|
|
655
|
+
reversible (ADD col nullable, never DROP). Artefato N-1 sempre
|
|
656
|
+
preservado e re-deployable.
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
### Release pipeline manual (toil + risk)
|
|
660
|
+
|
|
661
|
+
```text
|
|
662
|
+
ANTI-PATTERN: deploy = "engineer X faz SSH em prod, copia artefato,
|
|
663
|
+
kill+restart". Documentado em runbook de 30 passos.
|
|
664
|
+
|
|
665
|
+
POR QUÊ É RUIM: toil (cap 5 — manual + repetitivo + automatizável).
|
|
666
|
+
Drift entre runbook e realidade. Erros humanos.
|
|
667
|
+
Sem audit trail (quem deployou o quê quando).
|
|
668
|
+
|
|
669
|
+
CERTO: deploy = git push tag (ou merge em main). CI/CD pipeline cuida
|
|
670
|
+
de build hermético + tests + canary + rollback config. Self-service
|
|
671
|
+
deployment com policies enforced. Audit trail automático via CI logs.
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
## (e) Cross-references
|
|
675
|
+
|
|
676
|
+
Skills que consultam este glossário:
|
|
677
|
+
|
|
678
|
+
- `kit/skills/sre-risk-management/SKILL.md`
|
|
679
|
+
- `kit/skills/four-golden-signals/SKILL.md`
|
|
680
|
+
- `kit/skills/eliminating-toil/SKILL.md`
|
|
681
|
+
- `kit/skills/blameless-postmortems/SKILL.md`
|
|
682
|
+
- `kit/skills/production-readiness-review/SKILL.md`
|
|
683
|
+
- `kit/skills/cascading-failures/SKILL.md` (v1.11)
|
|
684
|
+
- `kit/skills/load-shedding-graceful-degradation/SKILL.md` (v1.11)
|
|
685
|
+
- `kit/skills/retry-strategies/SKILL.md` (v1.11)
|
|
686
|
+
- `kit/skills/hermetic-builds/SKILL.md` (v1.11)
|
|
687
|
+
- `kit/skills/release-engineering/SKILL.md` (v1.11)
|
|
688
|
+
|
|
689
|
+
Agentes que consultam este glossário (Phase 37):
|
|
690
|
+
|
|
691
|
+
- `kit/agents/golden-signals-instrumenter.md`
|
|
692
|
+
- `kit/agents/toil-auditor.md`
|
|
693
|
+
- `kit/agents/postmortem-writer.md`
|
|
694
|
+
- `kit/agents/prr-conductor.md`
|
|
695
|
+
|
|
696
|
+
Comandos que consultam este glossário (Phase 38):
|
|
697
|
+
|
|
698
|
+
- `kit/commands/golden-signals.md`
|
|
699
|
+
- `kit/commands/auditar-toil.md`
|
|
700
|
+
- `kit/commands/postmortem.md`
|
|
701
|
+
- `kit/commands/prr.md`
|
|
702
|
+
- `kit/commands/risk-budget.md`
|
|
703
|
+
- `kit/commands/sre.md` (orquestrador)
|
|
704
|
+
|
|
705
|
+
Skills v1.9 que cross-referenciam este glossário (Phase 39 patches):
|
|
706
|
+
|
|
707
|
+
- `kit/skills/event-based-slos/SKILL.md` (ganha bloco "Risk continuum")
|
|
708
|
+
|
|
709
|
+
---
|
|
710
|
+
|
|
711
|
+
*Glossário criado em 2026-05-07 (Phase 36 do milestone v1.10 SRE Engagement).*
|
|
712
|
+
*Material-fonte: Site Reliability Engineering — Beyer, Jones, Petoff, Murphy (Google/O'Reilly, 2016, ISBN 978-1-491-92912-4). Caps prioritários: 3 (Embracing Risk), 4 (SLOs), 5 (Eliminating Toil), 6 (Monitoring Distributed Systems / Four Golden Signals), 15 (Postmortem Culture), 32 (Evolving SRE Engagement Model / PRR).*
|