跳至主要內容
GCP 核心服務 — 第 1/10 篇

GCP 監控與日誌入門:用 Monitoring 和 Logging 找出問題

內文字級

GCP 監控與日誌入門:用 Monitoring 和 Logging 找出問題
更新:2026-10-15

服務上線後,光知道它「正在執行」還不夠。CPU 是否持續偏高?最近的錯誤從哪個版本開始?凌晨的存取失敗是使用者操作錯誤,還是權限設定有問題?

這些問題都屬於可觀測性(Observability)的範圍。在 Google Cloud 裡,Cloud Monitoring 主要處理指標、圖表與告警,Cloud Logging 則保存並查詢事件紀錄。遇到故障時,通常會在兩邊來回比對,而不是只看其中一個畫面。

兩者都屬於 GCP 的可觀測性工具套件(Google Cloud Observability),這套件下還有幾個核心服務:

服務解決什麼問題
Cloud Monitoring指標數據、Dashboard、告警、Uptime 檢查
Cloud Logging日誌收集、搜尋、路由、匯出
Cloud Trace分散式追蹤、請求延遲分析
Cloud Profiler程式碼層級的 CPU/記憶體分析
Error Reporting應用程式錯誤彙整與通知

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

舊教材裡的「Stackdriver」是這套工具以前的名稱。現在的文件使用 Cloud Monitoring、Cloud Logging 或 Google Cloud Observability。

這篇會先用 Monitoring 查看指標、建立 Dashboard、告警與 Uptime Check,再到 Logging 查詢和路由日誌。最後把 Ops Agent、Log-based Metric 和其他可觀測性工具放回同一套排錯流程裡。

GCP 可觀測性流程:VM 與 Ops Agent 產生 Metrics 和 Logs;Metrics 進入 Monitoring、Dashboard 與 Alert policy 後建立 Incident 並通知,Uptime check 也可觸發告警;Logs 進入 Logging 後可由 Log Explorer 調查、建立 Log-based metric 或透過 Log Sink 匯出,調查結果回到修復流程

Metrics 回答「數值何時偏離正常」,Logs 回答「當時發生了什麼」。Monitoring 將指標與 Uptime check 接到 Dashboard、告警與事件;Logging 則讓你搜尋原始紀錄、把特定事件轉成指標,或用 Log Sink 分流到長期保存與分析目的地。兩條訊號最後都應回到可執行的調查與修復流程。


一、先用 Cloud Monitoring 看系統狀態

1.1 什麼是 Cloud Monitoring?

Cloud Monitoring 會接收 Google Cloud 服務與應用程式送出的時間序列資料,常見用途包括:

  • 在 Dashboard 上即時視覺化系統狀態
  • 設定告警規則,在指標超出閾值時通知你
  • 執行 Uptime Check 確認服務持續可用

許多 Google Cloud 服務會自動寫入原生指標。例如建立 VM 後,不必先安裝 Agent 就能看到 Hypervisor 觀測到的 CPU、網路與磁碟資料。不過 Guest OS 內部的記憶體和程序狀態需要另外收集。

1.2 指標的三種類型

在 Cloud Monitoring 中,所有指標都屬於以下三種類型之一:

類型說明範例
Gauge(量規)測量某個瞬間的當前值CPU 使用率(現在是幾 %?)
Delta(差量)測量某個時間區間內的變化量每分鐘收到的請求數
Cumulative(累積)從某個起點不斷累加的值從服務啟動至今的總請求數

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

設定圖表或告警前先確認 Metric Kind。Gauge 可以直接看當下數值;Delta 和 Cumulative 通常還需要搭配對齊區間與速率轉換,才不會把累積值誤當成瞬間流量。

1.3 Compute Engine 的可用指標

以下是 Compute Engine VM 預設提供的指標:

指標資料來源是否需要 Ops Agent
CPU 使用率Compute Engine 原生指標不需要
磁碟 I/OCompute Engine 原生指標不需要
網路流量Compute Engine 原生指標不需要
記憶體使用率Guest OS 內部狀態需要
Process-level 指標Guest OS 內的個別程序需要

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

容易混淆的是記憶體:Compute Engine 看得到 VM 配置了多少記憶體,但不知道作業系統目前用了多少。後者要由 VM 裡的 Ops Agent 回報。

1.4 安裝 Ops Agent

# 方法 1:登入 VM 後安裝
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install

# 方法 2:透過 Agent Policy 管理一批 VM
# Console 做法:建立 VM 時勾選「Install Ops Agent for Monitoring and Logging」
#   → VM Manager 會建立 Ops Agent OS policy(設定 enable-osconfig metadata label)自動安裝並維護 Ops Agent

# gcloud 做法:用 Agent Policy 批次治理某個 Zone 內符合標籤的 VM
# (GA 版以 YAML 描述政策且以 Zone 為單位;官方建議能用 GA 就不要再用舊的 beta 版 --agent-rules 寫法)
cat > ops-agent-policy.yaml <<'EOF'
agentsRule:
  packageState: installed
  version: latest
instanceFilter:
  inclusionLabels:
  - labels:
      env: prod
EOF
gcloud compute instances ops-agents policies create ops-agents-policy-prod \
    --zone=asia-east1-a \
    --file=ops-agent-policy.yaml

舊教材常見的 google-monitoring-enable 與 google-logging-enable metadata 對應 Legacy Agent,不是 Ops Agent。新環境應以 Ops Agent 的安裝流程或 Agent Policy 管理。

安裝完成後,先確認 Agent 服務正常,再到 Metrics Explorer 檢查 agent.googleapis.com 開頭的資料是否持續進來。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  NEED["先定義想回答的<br/>營運問題"] --> SIGNAL{"需要觀測哪一類訊號?"}
  SIGNAL -->|"GCP 資源的 CPU、網路、磁碟等"| NATIVE["使用服務原生指標<br/>通常自動送入 Monitoring"]
  SIGNAL -->|"VM 內的記憶體、程序與應用日誌"| AGENT["安裝並設定 Ops Agent"]
  SIGNAL -->|"訂單量、佇列深度等應用業務數值"| CUSTOM["由應用程式送出<br/>自訂指標"]
  SIGNAL -->|"只有日誌裡才看得到的事件"| LOG["建立 Log-based Metric<br/>把符合條件的日誌轉成指標"]
  NATIVE --> MONITOR["在 Cloud Monitoring<br/>建立 Dashboard 或 Alert"]
  AGENT --> MONITOR
  CUSTOM --> MONITOR
  LOG --> MONITOR
  MONITOR --> VERIFY["確認資料持續到達、標籤可分組<br/>且頻率與成本符合需求"]

先從問題反推訊號來源:GCP 資源原生指標通常不需 Agent;Guest OS 內部狀態需要 Ops Agent;業務數值由應用程式送出;只存在於日誌的事件則轉成 Log-based Metric。最後都能在 Monitoring 裡視覺化或告警。

Metrics Explorer 顯示 VM Instance - Memory utilization 折線圖,指標來源為 agent.googleapis.com/memory/percent_used,記憶體使用率從 94% 峰值降到 80%

Ops Agent 開始回報後,Metrics Explorer 會出現 agent.googleapis.com/memory/percent_used。如果查不到,可以依序檢查 Agent 狀態、VM 的服務帳號權限與網路連線,而不是只反覆重建圖表。

1.5 建立自訂 Dashboard

GCP Console 為每個服務都附了預設 Dashboard,不過你也可以自己做一個:

在 Console 裡可以這樣建立:

  1. 前往 Cloud Monitoring → Dashboards → Create Dashboard
  2. 為 Dashboard 命名(例如:「生產環境總覽」)
  3. 點選 Add Widget 新增圖表:
    • Line Chart:適合顯示趨勢(CPU 隨時間變化)
    • Gauge:適合顯示當前狀態(目前 CPU 是幾 %)
    • Scorecard:大數字顯示單一關鍵指標
    • Heatmap:適合顯示延遲分布
  4. 選擇指標來源(例如:compute.googleapis.com/instance/cpu/utilization)
  5. 設定圖表維度(按 VM 名稱、Zone 分組等)

如果要直接查 Monitoring API:

# 列出所有可用指標 descriptor(透過 Monitoring API,搜尋 cpu 相關)
# gcloud 沒有對應的子指令,需直接呼叫 Monitoring API
PROJECT_ID=$(gcloud config get-value project)
curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/metricDescriptors?filter=metric.type%3D%22compute.googleapis.com/instance/cpu/utilization%22" \
  | jq -r '.metricDescriptors[].type'

1.6 設定 Alerting Policy(告警規則)

告警規則由三個部分組成:

Alerting Policy
    ├── Condition(什麼條件觸發告警?)
    ├── Notification Channel(通知誰?用什麼方式?)
    └── Documentation(告警說明,可附上 Runbook 連結)

以下用「CPU 使用率持續高於 80%」示範設定方式。

在 Console 裡:

  1. Cloud Monitoring → Alerting → Create Policy
  2. Select a metric:compute.googleapis.com/instance/cpu/utilization
  3. Configure trigger:
    • Condition type: Threshold
    • Alert trigger: Any time series violates
    • Threshold value: 0.8(即 80%)
    • Retest window(在 Advanced options 裡,API 欄位為 duration): 1 min(持續 1 分鐘才觸發)
  4. Configure notifications:新增 Email 通知頻道
  5. 設定告警名稱並儲存

也可以用 gcloud 管理通知頻道與 Policy:

# 列出現有的告警政策
gcloud monitoring policies list

# 建立通知頻道(Email)
gcloud beta monitoring channels create \
    --display-name="Team Email" \
    --type=email \
    --channel-labels=email_address=team@yourcompany.com

# 建立告警政策(使用 JSON 設定)
gcloud monitoring policies create \
    --policy-from-file=alerting-policy.json

常見通知頻道:

頻道類型適用場景
Email一般告警通知
Slack團隊即時通訊
PagerDuty緊急事件待命輪班
Webhook自訂整合(LINE Bot、自動化腳本)
SMS緊急簡訊通知

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  subgraph DETECT["偵測異常"]
    direction LR
    SIGNAL["持續收到<br/>指標時間序列"] --> EVAL["依聚合、閾值與<br/>比較運算評估"]
    EVAL --> WINDOW{"Condition 是否持續違反<br/>達到設定的 Duration?"}
  end
  WINDOW -->|"否"| OBSERVE["正常或短暫尖峰<br/>維持監控"]
  WINDOW -->|"是"| INCIDENT["開啟 Incident<br/>附上 Runbook 文件"]
  subgraph RESPOND["通知、處理與恢復確認"]
    direction LR
    INCIDENT --> NOTIFY["通知 Email、Slack、PagerDuty<br/>或 Webhook"]
    NOTIFY --> ACK["依 Runbook<br/>調查與修復"]
    ACK --> RECOVER{"指標是否恢復<br/>且不再違反條件?"}
  end
  RECOVER -->|"否"| CONTINUE["事件維持開啟<br/>繼續處理"]
  RECOVER -->|"是"| CLOSE["關閉 Incident<br/>記錄原因與後續行動"]

Duration 會過濾短暫尖峰,只有持續違規才開啟 Incident。通知頻道負責把事件送到對的人,Documentation 則把 Runbook 放到調查入口;修復後還要等條件恢復,事件生命週期才真正結束。

1.7 Uptime Check:自動監控服務可用性

Uptime Check 會從指定區域定期送出 HTTP、HTTPS 或 TCP 請求,確認服務是否能從外部抵達。它適合回答「入口還通不通」,但不能取代應用程式內部的健康指標。

建立 Uptime Check:

# 透過 Console:Cloud Monitoring → Uptime checks → Create Uptime Check
# 設定:
# - Protocol: HTTPS
# - Resource type: URL
# - Hostname: yourdomain.com
# - Path: /health
# - Check frequency: 1 minute
# - Locations: 依使用者所在地與成本需求選擇

Uptime Check 會按「目標數量 × 執行頻率 × 執行區域」累計次數。一個 Check 若從三個區域執行,每輪就會算三次。官方目前提供每個 Project 每月 100 萬次免費額度,超出部分則計入該 Project 所屬的 Billing Account;價格可能調整,建立大量高頻 Check 前要再看一次定價頁。

建立 Check 後還要搭配 Alerting Policy 和通知頻道,否則失敗只會留在監控介面,不會主動找到值班人員。


二、再用 Cloud Logging 還原發生過的事

2.1 什麼是 Cloud Logging?

Cloud Logging 接收 Google Cloud 服務、應用程式和基礎設施產生的日誌。你可以依時間、資源與 Severity 查詢,也能把指定日誌路由到其他目的地或轉成指標。

Cloud Audit Logs 常見的四種類型如下:

類型說明範例
Admin Activity修改資源設定或中繼資料的 API 呼叫建立 VM、修改防火牆規則
Data Access讀取設定,或存取使用者資料的 API 呼叫讀取 Cloud Storage 物件
System EventGCP 系統本身的修改事件VM 自動重新排程、維護事件
Policy Denied因安全政策拒絕的存取嘗試VPC Service Controls 擋下的 API 呼叫

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

2.2 哪些稽核日誌會自動產生?

稽核日誌類型預設行為儲存位置
Admin Activity一律產生,不能停用或排除_Required
System Event一律產生,不能停用或排除_Required
Policy Denied預設產生;不能停用產生,但可用 Exclusion 排除儲存_Default
Data Access除 BigQuery 外預設不啟用,可按服務設定_Default

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

IAM 稽核記錄設定頁,預設設定顯示管理員讀取、資料讀取、資料寫入三種資料存取記錄皆為已停用,下方是各服務的稽核勾選矩陣

Data Access 可以按服務與操作類型設定,例如 Admin Read、Data Read 和 Data Write。啟用前先估算日誌量,並確認查閱者是否具有 Private Logs Viewer 等相應權限。Admin Activity 不在這組開關裡,因為它會固定產生。

# 查詢 Admin Activity 稽核日誌(誰做了什麼操作)
gcloud logging read 'logName="projects/my-project/logs/cloudaudit.googleapis.com%2Factivity"' \
  --limit=20 --format=json

# 查詢 Data Access 日誌(誰讀取了什麼資料)
gcloud logging read 'logName="projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access"' \
  --limit=10

多數服務的 Data Access 日誌需要另外啟用:

# 在 IAM 政策中啟用 Data Access 日誌
# Console → IAM & Admin → Audit Logs → 選擇服務 → 勾選 Data Read / Data Write

如果要追查「誰刪除了 VM」,應查 Admin Activity;若要查「誰讀取了某個物件」,才是 Data Access。後者通常要事先啟用,無法在事件發生後補回過去未產生的紀錄。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  QUESTION["先問:想追查的事件<br/>到底發生了什麼?"] --> TYPE{"事件性質是?"}
  TYPE -->|"有人建立、刪除或修改資源設定"| ADMIN["Admin Activity<br/>固定產生並存入 _Required"]
  TYPE -->|"有人讀取或寫入資源資料"| DATA["Data Access<br/>多數服務需另外啟用"]
  TYPE -->|"Google Cloud 系統自行執行變更"| SYSTEM["System Event<br/>固定產生並存入 _Required"]
  TYPE -->|"請求被安全政策拒絕"| DENIED["Policy Denied<br/>預設產生並存入 _Default"]
  ADMIN --> QUERY["在 Log Explorer 或 gcloud<br/>依 logName、資源與時間查詢"]
  DATA --> ENABLE{"目標服務的 Data Access<br/>是否已事先啟用?"}
  ENABLE -->|"是"| QUERY
  ENABLE -->|"否"| GAP["無法回補過去紀錄<br/>先評估資料量與成本後啟用"]
  SYSTEM --> QUERY
  DENIED --> QUERY

「誰刪了 VM」屬於資源組態變更,查 Admin Activity;「誰讀了物件」才是 Data Access。後者若事發前沒有啟用,就不能事後回補,所以敏感服務應先評估日誌量、成本與稽核需求。

2.3 日誌保留期限

日誌保留期限是按照日誌 Bucket而不是日誌類型來計算的:

Bucket預設保留期說明
_Required400 天(不可更改)稽核日誌(Admin Activity、System Event,及 Access Transparency)
_Default30 天(可設定 1-3,650 天)一般應用程式日誌、Data Access 與 Policy Denied 稽核日誌
自訂 Bucket30 天(可設定)你自行建立的 Bucket

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

2.4 Logs Explorer:搜尋與分析日誌

Logs Explorer 是 Cloud Logging 的查詢介面。剛開始可以先用資源類型、Severity 和時間範圍縮小資料,再加入 Payload 欄位找特定錯誤。

幾個常用查詢:

# 查看特定資源類型的日誌
resource.type="gce_instance"

# 查看特定嚴重等級以上的日誌
severity >= "ERROR"

# 同時過濾資源類型和嚴重等級
resource.type="gce_instance" AND severity >= "WARNING"

# 查看特定 VM 的日誌
resource.type="gce_instance" AND
resource.labels.instance_id="1234567890"

# 查看 Cloud Run 服務的日誌
resource.type="cloud_run_revision"

# 搜尋包含特定文字的日誌
textPayload:"error connecting to database"

# 查看特定時間範圍(前一小時)
timestamp >= "2026-03-11T10:00:00Z" AND
timestamp <= "2026-03-11T11:00:00Z"

嚴重等級(Severity)由低到高:

DEBUG → INFO → NOTICE → WARNING → ERROR → CRITICAL → ALERT → EMERGENCY
Log Explorer 以 log_id(order-service-demo)查詢,五筆日誌各帶不同嚴重等級圖示(重大、錯誤、警告、資訊、通知各一),左側嚴重性面板列出五種等級,時間軸依顏色分層

Logs Explorer 會依 Severity 顯示不同圖示與顏色,也能從左側面板快速篩選。顏色適合先找異常範圍,實際判斷時仍要打開 Log Entry,查看時間、資源、Payload 與關聯欄位。

2.5 gcloud 查詢日誌

# 查詢 Compute Engine 最新 10 筆日誌
gcloud logging read "resource.type=gce_instance" --limit=10

# 查詢 ERROR 以上等級的日誌
gcloud logging read "severity>=ERROR" \
    --limit=20 \
    --format=json

# 列出專案中所有的 Log 名稱
gcloud logging logs list

# 查詢特定 Log 的內容
gcloud logging read 'logName="projects/my-project/logs/cloudaudit.googleapis.com%2Factivity"' \
    --limit=5

2.6 Log Sink:日誌路由與匯出

Log Router 會依 Sink 的 Filter 把日誌送往指定目的地。常見用途包括長期保存、SQL 分析、串接 SIEM,或集中多個 Project 的日誌。

目的地適用場景
BigQuery長期保存、SQL 查詢分析
Cloud Storage低成本封存(GCS bucket)
Pub/Sub串流到 Splunk、Datadog 等第三方系統
其他 Cloud Logging Bucket集中管理多個專案的日誌

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

建立 Log Sink(匯出到 BigQuery):

# 1. 建立 BigQuery Dataset
bq mk --location=asia-east1 my_logs_dataset

# 2. 建立 Log Sink
gcloud logging sinks create my-bigquery-sink \
    bigquery.googleapis.com/projects/my-project/datasets/my_logs_dataset \
    --log-filter='resource.type="gce_instance" AND severity>=WARNING'

# 3. 查看 Sink 的 Service Account(需要授予 BigQuery 寫入權限)
gcloud logging sinks describe my-bigquery-sink

# 4. 授予 Sink 的 SA 寫入 BigQuery 的權限
gcloud projects add-iam-policy-binding my-project \
    --member="serviceAccount:SINK_WRITER_IDENTITY" \
    --role="roles/bigquery.dataEditor"

建立 Log Sink(封存到 Cloud Storage):

# 建立 GCS Bucket(舊寫法 gsutil mb -l asia-east1 gs://... 官方已不建議)
gcloud storage buckets create gs://my-logs-archive-bucket --location=asia-east1

# 建立 Log Sink
gcloud logging sinks create my-gcs-sink \
    storage.googleapis.com/my-logs-archive-bucket \
    --log-filter='resource.type="gce_instance"'

如果要集中分析稽核日誌,Filter 可以鎖定 cloudaudit.googleapis.com:

# 把所有稽核日誌匯出到 BigQuery 做分析
gcloud logging sinks create audit-to-bq \
  bigquery.googleapis.com/projects/my-project/datasets/audit_logs \
  --log-filter='logName:"cloudaudit.googleapis.com"'
查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  START["先用 Log Filter 定義<br/>哪些日誌需要路由"] --> GOAL{"匯出後最主要的用途是?"}
  GOAL -->|"長期保存並用 SQL 分析"| BQ["BigQuery Dataset"]
  GOAL -->|"低成本封存與生命週期管理"| GCS["Cloud Storage Bucket"]
  GOAL -->|"即時送往 SIEM、Splunk 或自動化流程"| PUBSUB["Pub/Sub Topic"]
  GOAL -->|"跨專案集中查詢與治理"| BUCKET["其他專案或集中式<br/>Cloud Logging Bucket"]
  BQ --> WRITER["取得 Sink Writer Identity<br/>授予目的地所需的最小寫入權限"]
  GCS --> WRITER
  PUBSUB --> WRITER
  BUCKET --> WRITER
  WRITER --> TEST["產生測試日誌並確認<br/>目的地收到符合 Filter 的資料"]
  TEST --> REVIEW["監控用量、失敗與成本<br/>定期調整 Filter 和保留策略"]

選目的地時先看後續用途,而不是只看「哪裡能存」。BigQuery 適合分析、Cloud Storage 適合封存、Pub/Sub 適合即時串流、Logging Bucket 適合集中治理;建立 Sink 後別忘了授權 Writer Identity 並實際驗證資料有抵達。

2.7 Log-based Metrics:從日誌建立指標

如果想追蹤某類日誌出現的頻率,或從 Payload 提取延遲等數值,可以建立 Log-based Metric,再交給 Monitoring 畫圖或告警。

使用者自訂的 Log-based Metric 主要有兩類:

  • Counter:計算符合條件的日誌條目數量(每分鐘幾筆錯誤?)
  • Distribution:從日誌中提取數值分布(API 回應時間分布)

建立 Log-based Counter(計算 HTTP 500 錯誤次數):

gcloud logging metrics create http-500-errors \
    --description="Count of HTTP 500 errors" \
    --log-filter='resource.type="gce_instance" AND
    jsonPayload.statusCode=500'

建立後,Cloud Logging 只會從之後收到且符合 Filter 的日誌產生資料點,不會回頭處理舊日誌。接著就能在 Monitoring 裡把它放進圖表或 Alerting Policy。

2.8 Log-based Alerting

如果需求只是「某種日誌一出現就通知」,也可以建立 Log-based Alert,不必先做 Metric:

Cloud Logging → Logs Explorer → 查詢結果工具列的 Actions → Create log alert

設定觸發條件:「當 severity=CRITICAL AND resource.type=gce_instance 的日誌出現時,每 5 分鐘最多通知一次」


三、其他可觀測性工具各自看什麼?

Monitoring 和 Logging 通常是起點。問題進到請求路徑、程式效能或例外彙整時,再搭配以下工具。

3.1 Cloud Trace:分散式追蹤

一個請求若經過多個服務,只有總延遲很難判斷慢在哪裡。Cloud Trace 會以 Trace 和 Span 呈現請求路徑與各階段耗時。

適用場景:

  • 找出哪個服務造成整體延遲高
  • 追蹤一個用戶請求在各服務間的流轉路徑

應用程式可以透過 OpenTelemetry SDK 或相容的收集流程送出 Trace。導入時也要把 Trace ID 放進結構化日誌,之後才能在 Trace 和 Logging 之間交叉查找。

3.2 Cloud Profiler:程式碼效能分析

Cloud Profiler 會持續取樣應用程式的 CPU 與記憶體使用狀況,並把熱點對應到程式碼。是否適用仍要看語言、執行環境與 Agent 支援狀況。

支援語言:Go、Java、Node.js、Python

它適合處理「服務長期偏慢,但指標和單次 Trace 還看不出是哪段程式碼消耗資源」的問題。

3.3 Error Reporting:應用程式錯誤彙整

Error Reporting 會把內容相近的應用程式例外分組,方便查看發生次數、時間與受影響版本,不必逐筆翻找相同 Stack Trace。

支援平台:App Engine、Cloud Run functions(原 Cloud Functions)、Cloud Run、Compute Engine、GKE

注意:行動應用程式的 Crash 監控建議使用 Firebase Crashlytics。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  START["服務出現異常<br/>先描述想回答的問題"] --> QUESTION{"目前最需要知道什麼?"}
  QUESTION -->|"何時開始、影響多大、是否仍在發生"| MONITOR["Cloud Monitoring<br/>看 Metrics、Dashboard 與 Incident"]
  QUESTION -->|"異常當下發生了哪些事件"| LOGGING["Cloud Logging<br/>查時間、資源、severity 與錯誤內容"]
  QUESTION -->|"單一請求跨多個服務慢在哪一站"| TRACE["Cloud Trace<br/>沿 Trace 找延遲 Span"]
  QUESTION -->|"哪段程式碼長期消耗 CPU 或記憶體"| PROFILER["Cloud Profiler<br/>找程式碼層級熱點"]
  QUESTION -->|"哪些 Exception 重複最多、影響誰"| ERROR["Error Reporting<br/>彙整與分組應用程式錯誤"]
  MONITOR --> CORRELATE["用共同的時間、資源與請求 ID<br/>交叉比對其他訊號"]
  LOGGING --> CORRELATE
  TRACE --> CORRELATE
  PROFILER --> CORRELATE
  ERROR --> CORRELATE
  CORRELATE --> FIX["形成根因假設、修復<br/>並用 Metrics 驗證是否恢復"]

可觀測性工具不是互斥選項,而是從不同角度回答問題。通常先用 Monitoring 確認範圍,再用 Logging 找事件脈絡;跨服務延遲深入 Trace,程式碼資源熱點看 Profiler,重複例外則由 Error Reporting 彙整,最後以共同欄位把證據串回同一個故障。


四、費用主要從哪裡來?

以下是目前常見的計費項目,實際價格仍以官方頁面和帳務報表為準。

Cloud Logging

項目目前計費方式
一般日誌寫入與 30 天內儲存每個 Project 每月前 50 GiB 免費,超出後按 GiB 計費
Vended network logs另有網路遙測日誌費率,不適用上述免費額度
超過預設期限的保留_Default 與自訂 Bucket 超過 30 天後按容量與月份計費
_Required Bucket固定保留 400 天,不收 Logging 儲存與延長保留費
Log Routing路由本身不另收費,但目的地服務可能產生儲存或處理費用

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

Cloud Monitoring

項目目前計費方式
非計費的 Google Cloud 指標不按指標資料量收費
依寫入量計費的指標每個 Billing Account 每月有 150 MiB 免費額度,超出後分級計費
Uptime Check每個 Project 每月前 100 萬次免費,之後按區域執行次數計費
Monitoring APIWrite 不收費;Read 依回傳時間序列數量與免費額度計算

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

最容易低估的是標籤基數、日誌量與 Uptime Check 的執行區域。正式上線前可以先用小流量觀察一週,再依實際用量調整 Filter、保留期與採樣方式。最新數字請查看 Google Cloud Observability 定價頁。


五、用幾個情境檢查觀念

準備 ACE 時,可以用下面幾個情境確認自己是否分得清資料來源、告警與日誌類型。

類型 1:指標選擇

題目:你想監控 VM 的記憶體使用率,但在 Cloud Monitoring 中找不到記憶體相關指標。最可能的原因是?

  • Cloud Monitoring 支援記憶體指標,但 Compute Engine 不會從 Hypervisor 取得 Guest OS 記憶體使用率
  • 應先確認 VM 是否已安裝並正常執行 Ops Agent

類型 2:日誌匯出

題目:你需要將 GCP 日誌長期保存並用 SQL 分析。可以怎麼做?

  • 建立 Log Sink,把符合條件的日誌路由到 BigQuery
  • 若只需要在 Logging 裡分析,也要評估 Log Bucket、Log Analytics 與保留期是否更合適

類型 3:告警設定

題目:你的 Web 服務需要在回應時間超過 2 秒時通知工程師。應使用哪個工具?

  • 使用 Cloud Monitoring Alerting Policy,對相應延遲指標設定閾值與持續時間

類型 4:日誌類型

題目:你想查看過去 7 天內誰修改了你的防火牆規則。應查看哪種日誌?

  • System Event 記錄平台或服務代理執行的變更
  • Data Access 記錄資料或設定的讀取與資料操作
  • 人員修改防火牆規則應查 Admin Activity

類型 5:保留期限

題目:Admin Activity 日誌的預設保留期是多少天?

  • 來源資源 _Required 中的 Admin Activity 原件固定保留 400 天,不能調整該 bucket 的保留期。
  • 若需要 7 年等較長保留,可另外路由副本到自訂 Logging bucket 或其他支援目的地,設定保留、讀取權限與費用;不是把 _Required 本身改成 7 年。細節見 Logging bucket 文件。

六、把監控與日誌串成一個練習

以下用一台 Compute Engine VM 示範基本流程。正式環境還要補上權限、變更審查、Runbook 與告警測試。

# 步驟 1:安裝 Ops Agent,收集 Guest OS 指標
# 在 VM 內執行:
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install

# 確認 Ops Agent 正在執行
sudo systemctl status google-cloud-ops-agent

# 步驟 2:設定 Uptime Check(Console 操作)
# Cloud Monitoring → Uptime checks → Create
# 填入: HTTPS, yourdomain.com, /health, Check every 1 minute

# 步驟 3:建立告警政策(CPU > 80%)
# Cloud Monitoring → Alerting → Create Policy
# Metric: compute.googleapis.com/instance/cpu/utilization
# Threshold: 0.8, Retest window: 1 min
# Notification: Email to your team

# 步驟 4:建立 Log Sink(匯出 ERROR 日誌到 BigQuery)
gcloud logging sinks create production-errors-sink \
    bigquery.googleapis.com/projects/my-project/datasets/production_logs \
    --log-filter='resource.type="gce_instance" AND severity>=ERROR'

# 步驟 5:查詢日誌,確認 Filter 能找到預期資料
gcloud logging read \
    'resource.type="gce_instance" AND severity>=ERROR' \
    --limit=5 \
    --format=table

七、排錯時怎麼使用這些工具?

Cloud Monitoring 適合先確認異常從何時開始、影響哪些資源,以及是否仍在發生:

功能關鍵點
記憶體指標需安裝 Ops Agent
指標類型Gauge(瞬間值)/ Delta(區間變化)/ Cumulative(累積)
Dashboard服務 Dashboard 用來快速查看;自訂 Dashboard 整理團隊關注的訊號
告警條件 + 通知頻道 + 文件說明
Uptime Check依目標、頻率與執行區域檢查 HTTP、HTTPS 或 TCP

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

接著用 Cloud Logging 對齊同一段時間與資源,查看部署、權限變更和應用錯誤:

功能關鍵點
保留期_Required 原件固定 400 天;_Default 預設 30 天可調整
Admin Activity 日誌管理設定變更;_Required 原件 400 天,副本依目的地設定
Log Sink路由到 Logging bucket / BigQuery / GCS / Pub/Sub
Log-based Metrics從日誌建立 Cloud Monitoring 指標
查詢語法resource.type, severity, timestamp, textPayload

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

系列文章連結


延伸閱讀

監控的價值不在於圖表數量,而在於能不能縮短「發現異常、找到證據、完成修復、確認恢復」這段時間。先替一個真正需要維護的服務建立少量指標與告警,再根據實際事件補強,通常比一開始做滿整個 Dashboard 更容易維持。

GCP 核心服務 — 第 1 篇/共 10 篇 查看系列全覽 →

讀完後,留一個學習紀錄

試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。

文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。

留言討論

文章目錄與系列

徽章解鎖!