I05 · 觀測平台 詳細 ROADMAP

計畫文件,不會被 Quartz 渲染。 回主 roadmap → infra/ROADMAP.md


章節目標

觀測是跨整條 request 流程的橫切面——從 I01 Edge 到 I04 Data 每一層都要被觀測到。本章處理觀測平台本身的部署與運維:Prometheus / Loki / Tempo / Grafana / AlertManager / OpenTelemetry Collector。

跟 backend 的分工:backend B17 講「怎麼在 app 埋 metric / 寫結構化 log」;infra 這章講「怎麼把 Prometheus / Loki 架起來、scaling、HA、成本控制、多 tenant」。


🌱 基本介紹

#主題SlugStage大綱
01觀測平台全景01-observability-landscape🌱三大支柱 Logs / Metrics / Traces + 新加 Events / Profiles;各家 stack 對比(Prom+Grafana / Datadog / New Relic)

❓ 為什麼需要

#主題SlugStage大綱
02為什麼用 Prometheus 不用 Nagios02-why-prometheus-over-nagios🌱pull-based 對 cloud-native 友善;時序資料格式;跟 K8s 整合度
03為什麼需要 Log 聚合而不是 ssh grep03-why-log-aggregation🌱分散式系統跨 node 找 log 的痛點
04為什麼 Trace 在微服務時代變必要04-why-distributed-trace🌱Request 跨 N 服務,看不到完整路徑就 debug 不了;跟 B17 #19 呼應
05為什麼觀測成本會爆05-why-observability-cost🌱cardinality 爆、log retention 沒設、指標沒篩過、每個 team 自己埋重複東西;要集中控管

🕰️ 演進

#主題SlugStage大綱
06Metrics 演進⛔️ infra/observability/15-metrics-monitoring🌿跨系列
07Log 管理演進⛔️ infra/observability/16-log-management🌿跨系列
08觀測演進驅動力08-observability-evolution-drivers🌱Nagios / Zabbix 拉式撞 cloud-native 動態撞牆 → Prometheus 推拉混合;ELK 成本撞牆 → Loki + LogQL;Jaeger / Zipkin 格式不相容撞牆 → OpenTelemetry;sampling 看不到全貌撞牆 → eBPF / Continuous Profiling

🧠 知識型

F05-A Metrics 平台

#主題SlugStage大綱
09Prometheus 部署⛔️ infra/observability/15-metrics-monitoring🌿跨系列
10Prometheus HA(Thanos / Mimir / Cortex)10-prometheus-ha🌱Remote storage;長期保存;跨 region 查詢
11Grafana 部署與治理11-grafana-ops🌱Dashboard as code、team / folder 權限、plugin 管理、Grafana Cloud 選項
12K8s Monitoring(吸收 k8s/06)⛔️ infra/k8s/06-k8s-monitoring🌿跨系列
13多節點監控⛔️ infra/observability/19-multi-node-monitoring🌿跨系列

F05-B Log 平台

#主題SlugStage大綱
14Log 管理(Loki / ELK)⛔️ infra/observability/16-log-management🌿跨系列
15Loki vs ELK 選型15-loki-vs-elk🌱索引策略差異、成本模型、查詢能力;團隊現況怎麼選
16Log 成本控制16-log-cost-control🌱Retention 分層、sampling、log level 過濾、CloudWatch 到 S3 分層
17微服務 Logging 實戰(吸收 micro-service)⛔️ backend/micro-service/44-observability-logging🌿跨系列

F05-C Trace 平台

#主題SlugStage大綱
18OpenTelemetry Collector 部署18-otel-collector-ops🌱Agent / gateway 部署模式、receiver / processor / exporter 配置
19Tempo / Jaeger 選型19-tempo-vs-jaeger🌱長期保存、sampling 策略、跟 Grafana 整合
20Trace sampling 策略20-trace-sampling🌱Head vs Tail sampling、成本跟完整度權衡
21微服務 Tracing 實戰⛔️ backend/micro-service/43-observability-tracing🌿跨系列

F05-D Alert / On-call / Ticket

監控 → 告警 → Ticket 是三階段的接力:觀測看到異常、告警引起注意、Ticket 追蹤處理。這節把三段的整合面講清楚,不是單點工具教學。

#主題SlugStage大綱
22Alert 設計(吸收 infra 原)⛔️ infra/observability/17-alerts-chatops🌿跨系列
23Alert Webhook 整合⛔️ infra/observability/18-alert-webhook-integration🌿跨系列
24AlertManager 深入24-alertmanager-deep🌱Routing tree / inhibition / silences / grouping;跟 PagerDuty / Opsgenie 整合
25SLO / Error Budget 實作25-slo-error-budget🌱Google SRE book;SLI 選擇;跨 team 共識
26監控 → 告警 → Ticket 整合鏈26-monitor-alert-ticket-chain🌱三階段的 handoff 設計:Prometheus → AlertManager → PagerDuty → Jira / Linear / GitHub Issues;自動開票規則;Issue tracker 選型見 management/project-mgmt/ 的 Issue Tracker 選型篇

F05-E Dashboard 與 APM

#主題SlugStage大綱
27Dashboard 設計原則27-dashboard-design🌱Service overview / investigation / executive;跟 RED / USE method 整合
28Grafana Unified Observability28-grafana-unified🌱Grafana 作為 one pane of glass:把 Prom(metrics)+ Loki(logs)+ Tempo(traces)+ Pyroscope(profiles)+ Alert 全部整合在同一 UI;Explore view、correlation、統一查詢語言策略
29微服務 Dashboard 實戰⛔️ backend/micro-service/45-observability-dashboard🌿跨系列
30APM 選型(吸收 backend B17 #25)30-apm-selection🌱Datadog / New Relic / Elastic APM / Pinpoint(Naver 開源,台日企業常見)/ Pyroscope / SkyWalking、自架 vs SaaS;跟 infra/cloud/aws/07 CloudWatch 對照
31Continuous Profiling(吸收 backend B17 #26)31-continuous-profiling-ops🌱Pyroscope / Parca 部署;profile 資料儲存;成本
32eBPF 觀測(吸收 backend B17 S01 + B04 #26)32-ebpf-observability🌱Pixie / Cilium Hubble / Beyla;自動 instrument;production 使用門檻

🔧 小實作注意事項

#主題SlugStage大綱
33本機起完整觀測 stack33-local-observability-stack🌱Prom + Grafana + Loki + Tempo + OTel Collector + Pyroscope 一套 compose;sample app instrumented
34Grafana-as-code 實作34-grafana-as-code🌱Dashboard JSON 版本控;Grafonnet / Terraform provider
35告警 → Ticket 自動化 demo35-alert-to-ticket-demo🌱AlertManager → PagerDuty → Linear API / GitHub Issue 的串接實作

💣 Anti-pattern

#主題SlugStage大綱
36觀測平台 Anti-patterns36-observability-antipatterns🌱只看 CPU/memory 沒看 app metric、metric cardinality 爆(每 user 一條)、log retention 無限、alert 過多(全淹沒)、沒 runbook、dashboard 一堆沒人看、OTel Collector 單點、告警響了沒 ticket 追蹤、Ticket 開了但沒 runbook 連結

🧰 對應檢查工具

#主題SlugStage大綱
37觀測平台工具37-observability-platform-tooling🌱Metrics: Prometheus / Grafana / VictoriaMetrics;Logs: Loki / Elasticsearch;Traces: Tempo / Jaeger;APM: Datadog / New Relic / Pinpoint / SkyWalking / Elastic APM;Profiling: Pyroscope / Parca;Alert: AlertManager / PagerDuty / Opsgenie;SaaS: Datadog / Grafana Cloud / Honeycomb

📎 補充

#主題SlugStage大綱
S01多 tenant 觀測平台s01-multi-tenant-observability🌱跨團隊共用 Prom / Loki;namespace 隔離;成本分攤
S02好的監控系統⛔️ common/quality/standards/07-good-monitoring-system🌿跨系列

章節進度統計

  • 知識主題:37 + 2 補充 = 39 項(2026-04 新增 3 題:監控→告警→Ticket 鏈、Grafana Unified Observability、告警→Ticket 自動化 demo)
  • 🌿 growing:10(既有 infra/ + k8s + pointer)
  • 🌱 seed:29

跨系列連結

  • infra/observability/15-19(原始 metrics / log / alert)
  • infra/k8s/06-k8s-monitoring
  • backend/observability/ B17 25-26 / S01(已 pointer 到本章 30-32
  • backend/architecture/ B08 #41 Monitoring Per Service(已 pointer)
  • backend/os/ B04 #26 eBPF(已 pointer 到本章 #32)
  • infra/disaster-recovery/ I09 #26 DR event 閉環 workflow(alert → ticket → runbook → case → postmortem)
  • management/project-mgmt/ Issue Tracker 選型(Alert → Ticket 流程)
  • backend/micro-service/43-45(tracing / logging / dashboard 實戰)
  • common/quality/standards/07-good-monitoring-system
  • → I01-I04 每章都被觀測 → I05 是橫切面
  • → I09 DR(觀測平台本身的 DR)