先決定你現在是要學,還是要在專案裡做
網站負責解釋與分發工作包;真正的 Repository 掃描、缺口判斷與文件產出交給 Coding Agent。
SDLC 實作課 · 交付物練習
先理解這份文件替你消除什麼不確定
上線前先決定『出事時要看什麼』
出事時最痛苦的是沒資料。Observability Spec 在設計階段就決定要產生哪些 metric、log、trace、event,及它們如何回答「使用者受到什麼影響」。
誰負責、交給誰
主責: Architect + DevOps
協作: Dev 實作埋點、SRE 設儀表板
下游收件: SLO、Runbook、Incident Report
何時值得做
必要時機: 新服務、新關鍵路徑、SLO 無法量測時
不需要時: 短命腳本、無使用者依賴
常見誤用: 只埋 server-side metric;log 沒結構化;trace 缺 user id
- 01讀大綱
- 02比範本
- 03填素材
- 04貼提示詞
- 05對照驗收
Anatomy · 文件解剖
輕量版先回答 6 個核心章節
章節名稱可以因團隊調整,但每一段要求的判斷不能被省略。先讀問題,再看格式。
- 01
Executive Summary
範本必要章節
3-5 行,主管 30 秒讀完。內容:要觀測哪個服務、有幾條 SLI、cardinality 估算、最敏感 PII 處理
- 02
Signals Required(metric / log / trace 三層)
範本必要章節
每個 metric 必填 type + labels + cardinality + sli_ref;每個 SLI 必須有對應 metric
- 03
Cardinality Budget & Retention
範本必要章節
per_metric_max ≤ 10k 預設;retention tier 須對應 hot/warm/cold 三檔
- 05
Alert Rules(top 3-5)
範本必要章節
每條 alert 對應 ≥ 1 條 SLI;含 expression + threshold + duration + runbook
- 06
Sampling & PII Redaction
範本必要章節
sampling 必須說明 head-based + tail-based 策略;PII 欄位無分類寫 _TODO_
- 09
Decision Log(key 2-3 條)
範本必要章節
每條必含 chosen + 至少 1 個 rejected + 拒絕原因
Study · 對照學習
同一份交付物,先練核心,再看完整深度
輕量範本適合第一次練習與 MVP;完整範本保留跨職能交棒需要的細節。兩者都要求未知事項保持可見。
這張卡目前提供已審定的輕量與完整範本;不以 AI 臨時生成的內容冒充實際案例。
30 分鐘內先完成核心章節。
---
doc_type: "observability-spec"
variant: "light"
status: "draft"
owner: "<your-name>"
last_updated: "YYYY-MM-DD"
upstream:
required: ["slo", "service-map"]
optional: ["user-journey", "pii-classification"]
---
# Observability Spec: <service-name>
**Status:** Draft v0.X · **Owner:** <Architect / DevOps> · **Last updated:** YYYY-MM-DD
> [!IMPORTANT]
> **AI 填寫規則:** 本範本 6 段(編號 1, 2, 3, 5, 6, 9),全部必填——刻意沿用完整版章節編號讓兩版可對照。每結論行內加 `(依據:SLO §XXX / journey §YYY)`;每量化欄位帶 `[H]/[M]/[L]` confidence badge;缺資料寫 `_TODO: 需要 XXX_` 不編造;每個 metric 必須標 label + cardinality 估算(≤ 10k unique series 預設);每個 SLI 必須有對應 metric;PII 欄位無分類資料寫 `_TODO_` 不假設可採集。
---
## 1. Executive Summary
<!-- ai-fill: 3-5 行,主管 30 秒讀完。內容:要觀測哪個服務、有幾條 SLI、cardinality 估算、最敏感 PII 處理 -->
<3-5 行說明>
> **TL;DR:** <一句話:本卡定義 X 服務的 N 條 metric / M 條 log / K 條 trace,覆蓋 Y 條 SLI>
---
## 2. Signals Required(metric / log / trace 三層)
<!-- ai-rule: 每個 metric 必填 type + labels + cardinality + sli_ref;每個 SLI 必須有對應 metric -->
### Metrics
| Name | Type | Labels | Cardinality | Unit | SLI ref | Confidence |
|---|---|---|---|---|---|---|
| http_request_duration_seconds | histogram | route, method, status_class | 500 | seconds | SLI-001 | **[H]** |
| db_query_duration_seconds | histogram | query_kind | 50 | seconds | SLI-002 | **[H]** |
### Logs
| Event | Fields | PII handling | Retention tier |
|---|---|---|---|
| checkout_failed | user_id_hash, order_id, error_code, latency_ms | hash user_id | hot |
| auth_login | user_id_hash, ip_truncated, ua_fingerprint | truncate ip | warm |
### Traces
| Span | Attributes | Parent span |
|---|---|---|
| db.query.checkout | db.statement_truncated, db.rows_examined | http.handler.checkout |
---
## 3. Cardinality Budget & Retention
<!-- ai-rule: per_metric_max ≤ 10k 預設;retention tier 須對應 hot/warm/cold 三檔 -->
### Cardinality budget
| Field | Value |
|---|---|
| **Per metric max** | 10,000 unique series |
| **Per service max** | 100,000 unique series |
| **Enforcement** | reject_on_ingest |
### Retention per tier
| Tier | Retention | Use case |
|---|---|---|
| **Hot** | 14d | 即時 debug |
| **Warm** | 90d | trend / weekly review |
| **Cold** | 13 months | SOC 2 audit |
---
## 5. Alert Rules(top 3-5)
<!-- ai-rule: 每條 alert 對應 ≥ 1 條 SLI;含 expression + threshold + duration + runbook -->
| Name | Expression (PromQL or eq) | Threshold | Window | SLO ref | Severity | Runbook |
|---|---|---|---|---|---|---|
| slo_burn_fast | error_rate / target_error_rate | 14.4× | 1h | SLO-001 | SEV2 | <link> |
| slo_burn_slow | error_rate / target_error_rate | 6× | 6h | SLO-001 | SEV3 | <link> |
---
## 6. Sampling & PII Redaction
<!-- ai-rule: sampling 必須說明 head-based + tail-based 策略;PII 欄位無分類寫 _TODO_ -->
### Sampling strategy
| Signal | Strategy | Rationale |
|---|---|---|
| Traces | head-based 1% + tail-based 100% for error | 控成本 + 保留錯誤 debug 力 |
| Logs | full ERROR, sample 10% INFO | 同上 |
### PII redaction
| Field | Rule | Compliance basis |
|---|---|---|
| email | hash with HMAC-SHA256 | GDPR Art.32 |
| credit_card | drop entirely | PCI DSS |
| ip_address | truncate last octet | GDPR Art.5 |
---
## 9. Decision Log(key 2-3 條)
<!-- ai-rule: 每條必含 chosen + 至少 1 個 rejected + 拒絕原因 -->
| Date | Decision | Options | Chosen | Rejected why | Confidence |
|---|---|---|---|---|---|
| YYYY-MM-DD | Trace sampling rate | 1% / 10% / 100% | 1% head + 100% tail-on-error | 10% (太貴)、100% (違反 cardinality budget) | **[H]** |
---
> [!CAUTION]
> **輸出前 AI 自檢:**
> - [ ] 6 段 H2 章節齊全(編號 1, 2, 3, 5, 6, 9)
> - [ ] 每個 metric 含 type + labels + cardinality + SLI ref
> - [ ] 每條 SLI 在 metric 表有對應條目
> - [ ] Per-metric cardinality ≤ 10k
> - [ ] Retention 三檔(hot / warm / cold)
> - [ ] Alert rules 每條對應 ≥ 1 條 SLI + 有 runbook link
> - [ ] PII 表逐項對應 compliance basis(GDPR / PCI / HIPAA)
> - [ ] Sampling 含 head + tail 策略
> - [ ] Decision Log ≥ 1 條,每條有 rejected reason
> - [ ] 無 YAML / JSON schema 輸出Practice · 換你試做
先用自己的話交代素材,不需要先學會工程術語
確定的就寫,不確定的留白。下一步要做的是請 Agent 找缺口,不是讓它替你猜一套合理答案。
可以先留白;複製提示詞後再到 Coding Agent 裡補充。
AI Practice · 手動三步
先問、再寫、最後審,不把整條流程鎖死
每一步都是獨立工作包。你可以停下補資料、修改限制或重做某一步,不需要服從固定的 Agent 接力流程。
只找阻擋文件成立的未知
先補會改變範圍、判斷或驗收結果的資訊,不急著寫文件。
我要製作「Observability Spec · 可觀測規格」。先不要產出文件。
請根據我的素材,找出會影響這份文件正確性或可執行性的未知事項,一次最多問 5 題。
每題請包含:
1. 問題
2. 為什麼現在必須知道
3. 它會影響哪個章節或決定
已經回答的事不要重問;可以延後的事標成「待決策」;不要替我猜答案。
本文件的核心章節:Executive Summary、Signals Required(metric / log / trace 三層)、Cardinality Budget & Retention、Alert Rules(top 3-5)、Sampling & PII Redaction、Decision Log(key 2-3 條)複製後,請在標示位置貼上自己的素材。
Review · 自己驗收
文件存在,不代表下一個角色真的能使用
逐條檢查 Agent 的輸出。人類負責需求、限制與驗收,也必須能說明重要結論從哪裡來。
帶著這份文件,繼續到「On-Call Rotation · 值班輪值」
下一張卡會接住新的決策問題;不用一次把整條 SDLC 全做完。
