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

GCP 監控與日誌入門:Cloud Monitoring & Cloud Logging 完全指南

GCP-106

「你無法管理你看不到的東西。」— 可觀測性(Observability)是所有可靠系統的根基。

你建好了第一台 VM(GCP-103)、設定好 IAM 權限(GCP-105),系統跑起來了。但它跑得好不好,你心裡有底嗎?CPU 有沒有飆高?有沒有錯誤訊息?有沒有人在凌晨三點嘗試入侵?

這就是 Cloud MonitoringCloud Logging 要解決的問題。

GCP 的可觀測性工具套件(Google Cloud Observability)包含幾個核心服務:

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

⚠️ 舊名稱提醒:「Stackdriver」是 2020 年 10 月前的舊名稱,現在已經改名為 Cloud Monitoring 和 Cloud Logging。考試和文件中請以新名稱為準。

你將學到:

  • ✅ Cloud Monitoring 的指標類型與 Dashboard 設定
  • ✅ 建立 Alerting Policy 告警規則(附通知到 Email/Slack)
  • ✅ Uptime Check:自動監控服務可用性
  • ✅ Cloud Logging 日誌查詢語法與常用過濾器
  • ✅ Log Sink:將日誌匯出到 BigQuery、Cloud Storage
  • ✅ Log-based Metrics:從日誌建立監控指標
  • ✅ 安裝 Ops Agent:解鎖記憶體等進階指標
  • ✅ ACE 考試重點整理

一、Cloud Monitoring:讓數據說話

1.1 什麼是 Cloud Monitoring?

Cloud Monitoring 是 GCP 的代管監控服務,會自動收集 GCP 服務的指標數據,讓你可以:

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

GCP 服務的指標是自動收集的,你不用額外設定。一建立 VM 或 Cloud SQL,相關指標就會自動送進 Cloud Monitoring。

1.2 指標的三種類型

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

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

實務意義:設告警之前先搞清楚自己用的是哪種指標類型,因為類型不同,數值該怎麼解讀也不一樣。

1.3 Compute Engine 的可用指標

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

指標說明是否預設提供
CPU 使用率VM 的 CPU 佔用百分比✅ 是
磁碟 IOPS每秒磁碟讀寫次數✅ 是
磁碟吞吐量磁碟讀寫速率(bytes/sec)✅ 是
網路流量進出 VM 的位元組數✅ 是
記憶體使用率記憶體佔用百分比需安裝 Ops Agent
Process-level 指標單一程序的資源使用需安裝 Ops Agent

💡 重要陷阱:記憶體使用率不是預設指標!需要在 VM 上安裝 Ops Agent 才能收集。這是 ACE 考試常見的混淆點。

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:建立 VM 時自動安裝(Agent Policy / OS Config)
# Console 做法:建立 VM 時勾選「Install Ops Agent for Monitoring and Logging」
#   → VM Manager 會建立 Ops Agent OS policy(設定 enable-osconfig metadata label)自動安裝並維護 Ops Agent

# gcloud 做法:用 Agent Policy 批次治理整個專案/符合標籤的 VM
gcloud compute instances ops-agents policies create ops-agents-policy-safe-rollout \
    --agent-rules="type=ops-agent,version=current-major,package-state=installed,enable-autoupgrade=true" \
    --instance-filter-inclusion-labels="env=prod"

⚠️ 舊教材常見的 --metadata=google-monitoring-enable=1,google-logging-enable=1 對應的是「已棄用的 legacy Monitoring/Logging Agent」,並非 Ops Agent,且該 metadata 只是啟用/停用 image 內預裝的 legacy agent,不會安裝 Ops Agent,請勿使用。

裝好之後,Ops Agent 就會自動開始收集記憶體、程序等進階指標,送到 Cloud Monitoring。

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 分組等)

gcloud 方式(進階)

# 列出所有可用指標 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% 時發 Email 通知

方法 1:Console 設定(最直覺)

  1. Cloud Monitoring → Alerting → Create Policy
  2. Select a metriccompute.googleapis.com/instance/cpu/utilization
  3. Configure trigger
    • Condition type: Threshold
    • Trigger: Any time series violates
    • Threshold value: 0.8(即 80%)
    • Duration: 1 min(持續 1 分鐘才觸發)
  4. Configure notifications:新增 Email 通知頻道
  5. 設定告警名稱並儲存

方法 2:gcloud CLI

# 列出現有的告警政策
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緊急電話通知

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: Asia Pacific, Americas, Europe(建議全選)

免費額度:每個 metrics scope 每月前 100 萬次 Uptime Check 執行免費(計費主體是 metrics scope/billing account,而非單一 project)。

配合告警:通常會在 Uptime Check 失敗時設個告警通知,這樣服務一掛掉你馬上就知道。


二、Cloud Logging:日誌是問題的第一線索

2.1 什麼是 Cloud Logging?

Cloud Logging 會自動收集 GCP 服務、應用程式和基礎設施的日誌,讓你能搜尋、分析、匯出,也能拿來設告警。

日誌的四大類型

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

稽核日誌啟用與配置(ACE 必考)

稽核日誌類型預設啟用可停用費用
Admin Activity✅ 永遠啟用❌ 不可停用免費
System Event✅ 永遠啟用❌ 不可停用免費
Policy Denied✅ 永遠啟用❌ 不可停用免費
Data Access❌ 預設停用✅ 可手動啟用計費(量可能很大)
# 查詢 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

ACE 考試重點:Admin Activity 日誌永遠啟用、不可停用、免費。Data Access 日誌預設停用、需手動啟用、會計費。遇到「如何追蹤誰刪除了 VM」的題目,答案是 Admin Activity audit log

Log Sink:日誌路由與匯出

Log Sink 可以把日誌導到其他服務,做長期儲存或分析:

# 將所有稽核日誌匯出到 BigQuery 做分析
gcloud logging sinks create audit-to-bq \
  bigquery.googleapis.com/projects/my-project/datasets/audit_logs \
  --log-filter='logName:"cloudaudit.googleapis.com"'

# 將錯誤日誌匯出到 Cloud Storage 做歸檔
gcloud logging sinks create errors-to-gcs \
  storage.googleapis.com/my-log-archive-bucket \
  --log-filter='severity>=ERROR'
匯出目標適合場景
Cloud Storage長期歸檔、合規保存
BigQuery日誌分析、趨勢查詢
Pub/Sub即時串流到第三方 SIEM
其他 Cloud Logging bucket跨專案日誌集中管理

2.2 日誌保留期限

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

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

2.3 Log Explorer:搜尋與分析日誌

Log Explorer 是 Cloud Logging 的主要 UI,支援強大的查詢語法。

基本查詢語法

# 查看特定資源類型的日誌
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

2.4 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.5 Log Sink:將日誌匯出到其他服務

日誌預設都存在 Cloud Logging 的 Bucket 裡。如果你要長期保存、分析,或是接到其他系統,就可以用 Log Sink 把日誌路由到:

目的地適用場景
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://my-logs-archive-bucket

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

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

有時候你會想根據日誌內容來觸發告警,例如:「日誌裡一出現 ‘connection refused’ 就通知我」。這時就輪到 Log-based Metrics 上場。

類型

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

建立 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 Monitoring 裡,拿來設告警或做 Dashboard 都行。

2.7 Log-based Alerting

你也可以直接在 Cloud Logging 裡設告警,特定日誌一出現就發通知:

Cloud Logging → Log-based alerts → Create alert

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


三、GCP 可觀測性工具家族

除了 Cloud Monitoring 和 Cloud Logging,GCP 還有幾個相關工具:

3.1 Cloud Trace:分散式追蹤

當你的應用由多個微服務組成,一個請求可能會經過 A → B → C → D 好幾個服務。Cloud Trace 幫你追每個請求的完整路徑,還有每一站花了多少延遲:

適用場景

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

整合方式:在應用程式中引入 OpenTelemetry SDK(支援 Go、Java、Node.js、Python),Trace 數據自動送到 Cloud Trace。

3.2 Cloud Profiler:程式碼效能分析

Cloud Profiler 會用極低的額外負擔,持續分析生產環境中應用程式的 CPU 和記憶體使用情況,而且直接對應到原始碼的行數。

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

適用場景:「我的服務很慢,但我不知道是哪段程式碼造成的」

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

Error Reporting 會自動彙整、分類應用程式拋出的例外(Exception),讓你一眼看出「最常發生的錯誤是哪一個」。

支援平台:App Engine、Cloud Functions、Cloud Run、Compute Engine、GKE

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


四、免費額度與定價

Cloud Logging 免費額度(每月)

項目免費額度
一般日誌儲存每個專案前 50 GiB 免費
Log Routing永遠免費
_Required bucket(稽核日誌,400 天保留)永遠免費

超出後:$0.50/GiB(一般日誌)

Cloud Monitoring 免費額度(每月)

項目免費額度
GCP 服務的非計費指標無限量免費(CPU、網路等)
計費指標(自訂指標等)前 150 MiB 免費
Uptime Check每個專案每月 100 萬次免費
Write API永遠免費

五、ACE 考試重點整理

Cloud Monitoring 和 Cloud Logging 在 ACE 考試裡出現的頻率很高,以下是幾種常見題型:

類型 1:指標選擇

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

  • ❌ Cloud Monitoring 不支援記憶體指標
  • ❌ 需要付費升級才能使用記憶體指標
  • Ops Agent 尚未安裝(記憶體指標需要 Ops Agent)

類型 2:日誌匯出

題目:你需要將 GCP 日誌長期保存並用 SQL 分析。最適合的做法是?

  • ❌ 增加 Cloud Logging 的 _Default Bucket 保留期
  • 建立 Log Sink,將日誌匯出到 BigQuery

類型 3:告警設定

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

  • Cloud Monitoring Alerting Policy,設定 http/server_latency 指標的閾值

類型 4:日誌類型

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

  • ❌ System Event Logs(GCP 系統事件,不是人為操作)
  • ❌ Data Access Logs(讀取資料,不是修改設定)
  • Admin Activity Logs(修改資源設定的 API 呼叫)

類型 5:保留期限

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

  • 400 天(儲存在 _Required bucket,不可修改)

六、實戰演練:端對端監控設定

以下用一台 Compute Engine VM 為例,把完整監控設起來:

# Step 1: 安裝 Ops Agent(解鎖記憶體等指標)
# 在 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

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

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

# Step 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'

# Step 5: 查詢日誌確認設定正確
gcloud logging read \
    'resource.type="gce_instance" AND severity>=ERROR' \
    --limit=5 \
    --format=table

七、總結

Cloud Monitoring 核心記憶點

功能關鍵點
記憶體指標需安裝 Ops Agent
指標類型Gauge(瞬間值)/ Delta(區間變化)/ Cumulative(累積)
Dashboard預設為唯讀,可自訂
告警條件 + 通知頻道 + 文件說明
Uptime Check全球位置、HTTP/HTTPS/TCP

Cloud Logging 核心記憶點

功能關鍵點
保留期_Required: 400 天;_Default: 30 天
Admin Activity 日誌修改資源設定的操作,保留 400 天
Log Sink匯出到 BigQuery / GCS / Pub/Sub
Log-based Metrics從日誌建立 Cloud Monitoring 指標
查詢語法resource.type, severity, timestamp, textPayload

系列文章連結


延伸閱讀


🎓 本文是「GCP 精通之路」系列的 GCP-106 篇(入門篇),掌握 GCP 監控與日誌基礎後,建議繼續學習 GCP 資料儲存策略。

GCP 核心服務 — 1/10 完成 查看系列全覽 →

留言討論

徽章解鎖!