監控與告警設定文件範本(Monitoring & Alert Configuration Template)

適用標準:Google SRE Workbook、ISO/IEC 20000-1:2018(Service Monitoring)
適用階段:維運階段(Operations Phase)
負責角色:SRE、DevOps Engineer、Tech Lead


📑 章節目錄

  1. 文件資訊
  2. 監控策略概要
  3. SLI / SLO 定義
  4. 監控指標設計
  5. 告警規則定義
  6. Dashboard 設計
  7. 告警通知與升級
  8. 日誌監控策略
  9. 維護與檢討機制
  10. 附錄

📝 範本


1. 文件資訊

項目內容
文件名稱[系統名稱] 監控與告警設定文件
文件編號[專案代碼]-MON-[版本號]-[日期]
版本v[X.Y]
建立日期[YYYY-MM-DD]
負責人[SRE / DevOps]
審核者[Tech Lead / SA]

2. 監控策略概要

2.1 監控架構

層級工具用途
Infrastructure[Prometheus / CloudWatch / Azure Monitor]主機/容器/網路
Application[APM: Datadog / New Relic / OpenTelemetry]應用效能
Business[Custom metrics / Analytics]業務指標
Logging[ELK / Loki / Azure Log Analytics]日誌分析
Tracing[Jaeger / Zipkin / OpenTelemetry]分散式追蹤

2.2 監控原則

原則說明
Four Golden SignalsLatency, Traffic, Errors, Saturation
USE MethodUtilization, Saturation, Errors(基礎設施)
RED MethodRate, Errors, Duration(服務)
Alerting PhilosophyAlert on symptoms, not causes

3. SLI / SLO 定義

3.1 服務層級指標(SLI)

SLI定義量測方式資料來源
Availability成功回應比例success_requests / total_requests[Load Balancer / App]
Latency回應時間分佈P50, P95, P99[APM / Prometheus histogram]
Throughput處理量Requests per second[Metrics]
Error Rate錯誤回應比例5xx_count / total_count[Ingress / App]

3.2 服務層級目標(SLO)

服務SLO 指標目標值Error Budget (月)量測視窗
[API Service]Availability≥ 99.9%43.8 min30 days rolling
[API Service]P95 Latency< [N]ms30 days rolling
[Web Frontend]Availability≥ 99.5%3.6 hr30 days rolling
[Batch Job]Success Rate≥ 99.0%Per execution

4. 監控指標設計

4.1 基礎設施指標

指標名稱類型描述標籤閾值
node_cpu_usage_percentGaugeCPU 使用率host, instancewarn: 80%, crit: 95%
node_memory_usage_percentGauge記憶體使用率host, instancewarn: 85%, crit: 95%
node_disk_usage_percentGauge磁碟使用率host, mountpointwarn: 80%, crit: 90%
node_network_errors_totalCounter網路錯誤數host, interfacecrit: > [N]/min

4.2 應用程式指標

指標名稱類型描述標籤閾值
http_requests_totalCounterHTTP 請求總數method, path, status
http_request_duration_secondsHistogram請求處理時間method, pathP95 < [N]s
http_requests_errors_totalCounterHTTP 錯誤數method, path, statusrate > [N]/min
active_connectionsGauge活躍連線數servicewarn: [N], crit: [N]
db_connection_pool_activeGaugeDB 連線池使用數pool_namewarn: 80%, crit: 95%
queue_depthGauge訊息佇列深度queue_namewarn: [N], crit: [N]

4.3 業務指標

指標名稱類型描述標籤告警條件
[business_metric_1]Counter[描述][labels][condition]
[business_metric_2]Gauge[描述][labels][condition]

5. 告警規則定義

5.1 告警嚴重度定義

嚴重度定義回應時間通知方式
P1 - Critical服務完全中斷 / 資料遺失5 分鐘PagerDuty + 電話 + SMS
P2 - High核心功能受損 / 效能嚴重惡化15 分鐘PagerDuty + Teams
P3 - Medium非核心功能異常 / 效能下降1 小時Teams Channel
P4 - Low預警 / 需關注但無立即影響下個工作日Email / Ticket

5.2 告警規則清單

Alert ID名稱嚴重度條件For說明
ALT-001ServiceDownP1up == 01m服務實例離線
ALT-002HighErrorRateP1error_rate > 5%5m錯誤率過高
ALT-003HighLatencyP2p95_latency > [N]ms5m回應時間過慢
ALT-004HighCPUP3cpu_usage > 80%10mCPU 使用率高
ALT-005DiskAlmostFullP2disk_usage > 85%5m磁碟空間不足
ALT-006DBConnectionPoolHighP2pool_usage > 80%5mDB 連線池接近上限
ALT-007CertExpiringSoonP3cert_expiry < 30d憑證即將到期
ALT-008ErrorBudgetBurnRateP2burn_rate > 1.01hError Budget 消耗過快

5.3 告警規則範例(Prometheus AlertManager)

groups:
  - name: [service_name].rules
    rules:
      - alert: [AlertName]
        expr: [PromQL expression]
        for: [duration]
        labels:
          severity: [critical/warning/info]
          team: [team_name]
          service: [service_name]
        annotations:
          summary: "[簡短摘要]"
          description: "[詳細描述,可含 {{ $labels }} 和 {{ $value }}]"
          runbook_url: "[Runbook 連結]"
          dashboard_url: "[Dashboard 連結]"

6. Dashboard 設計

6.1 Dashboard 清單

Dashboard用途目標受眾更新頻率
Service Overview服務健康狀態總覽SRE / 管理層10s
API PerformanceAPI 效能細節SRE / Dev10s
Infrastructure基礎設施資源Infra / SRE30s
Business Metrics業務指標PM / PO1m
SLO TrackingSLO 達成率與 Error BudgetSRE / 管理層1m

6.2 Service Overview Dashboard 設計

Panel視覺化類型指標說明
Service StatusStat (up/down)up{service="…"}紅綠燈
Request RateTime Seriesrate(http_requests_total[5m])QPS
Error RateTime Serieserror_rate錯誤率趨勢
P95 LatencyTime Serieshistogram_quantile(0.95, …)延遲趨勢
Active UsersStatactive_sessions當前活躍用戶
SLO StatusGaugeslo_complianceSLO 達標率

7. 告警通知與升級

7.1 通知路由

嚴重度工作時間 (09-18)非工作時間假日
P1On-call + Team Lead (即時)On-call + Backup (即時)On-call + Manager (即時)
P2On-call (15 min)On-call (30 min)On-call (30 min)
P3Teams Channel下個工作日下個工作日
P4Email / Ticket

7.2 升級機制

時間未回應動作
T + 5 min重新通知 On-call
T + 15 min通知 Backup On-call
T + 30 min通知 Team Lead / Manager
T + 60 min通知 Director / VP

7.3 On-Call 輪值

週次PrimaryBackup電話
Week 1[姓名][姓名][電話]
Week 2[姓名][姓名][電話]

8. 日誌監控策略

8.1 日誌等級與保留

Log Level用途保留期間告警
ERROR需處理的錯誤90 daysrate > [N]/min → P2
WARN潛在問題30 daysrate > [N]/min → P3
INFO正常營運記錄14 days
DEBUG開發除錯用3 days (STG only)

8.2 關鍵日誌監控

#監控模式觸發條件告警
1Exception stack tracerate > [N]/minP2
2“OutOfMemoryError”出現 1 次P1
3“Connection refused”rate > [N]/minP2
4Authentication failurerate > [N]/minP2 (可能攻擊)
5[自訂業務異常模式][條件][等級]

9. 維護與檢討機制

項目頻率負責人說明
Alert Noise 檢討每月SRE刪除/調整誤報告警
SLO 檢討每季SRE + PO調整目標值
Dashboard 更新需求變動時SRE新增/移除指標
Runbook 更新每次事件後SRE補充處理步驟
On-Call 回顧每月SRE Team改善值班體驗

10. 附錄

10.1 AlertManager 設定檔位置

檔案位置說明
alertmanager.yml[path]通知路由設定
prometheus-rules/[path]告警規則目錄
grafana-dashboards/[path]Dashboard JSON

10.2 相關文件

文件連結
Runbook[link]
SOP[link]
Incident Response Plan[link]

📖 使用說明

建立監控的優先順序

  1. Phase 1:健康檢查 + 基本告警(Service Up/Down, Error Rate)
  2. Phase 2:Golden Signals 完整覆蓋(Latency, Traffic, Errors, Saturation)
  3. Phase 3:SLI/SLO 追蹤 + Error Budget
  4. Phase 4:業務指標 + 進階分析

告警設計原則

原則說明
Alert on symptoms告警使用者可感知的症狀,非原因
Actionable每個告警都必須有對應的處理動作
Low noise避免無意義的告警(Alert fatigue)
Have a runbook每個告警必須連結到 Runbook

💡 範例(以 HRMS 人力資源管理系統為例)


範例:SLI/SLO

服務SLISLOError Budget/月
HRMS APIAvailability≥ 99.9%43.8 min
HRMS APIP95 Latency< 200ms
薪資批次作業Success Rate≥ 99.99%0.44 min (每月一次不容失敗)
出缺勤打卡Availability≥ 99.95% (上班時段)21.9 min

範例:告警規則

groups:
  - name: hrms.rules
    rules:
      - alert: HRMSHighErrorRate
        expr: |
          sum(rate(http_requests_total{service="hrms-api", status=~"5.."}[5m]))
          /
          sum(rate(http_requests_total{service="hrms-api"}[5m])) > 0.01
        for: 5m
        labels:
          severity: critical
          team: hrms
          service: hrms-api
        annotations:
          summary: "HRMS API 錯誤率超過 1%"
          description: "目前錯誤率為 {{ $value | humanizePercentage }},超過 SLO 閾值"
          runbook_url: "https://wiki/runbook/hrms-high-error-rate"

      - alert: HRMSPayrollJobFailed
        expr: hrms_payroll_job_status == 0
        for: 1m
        labels:
          severity: critical
          team: hrms
          service: hrms-payroll
        annotations:
          summary: "HRMS 薪資計算作業失敗"
          description: "月薪計算批次作業執行失敗,需立即處理"
          runbook_url: "https://wiki/runbook/hrms-payroll-failure"

📌 審閱重點

  • 每個告警是否都有明確的 actionable response?
  • SLO 是否與業務需求對齊(非隨意設定)?
  • 告警是否會產生過多噪音(特別是 P3/P4)?
  • 升級機制是否涵蓋非工作時間?
  • Dashboard 是否能在 30 秒內讓值班人員判斷系統狀態?