1. Observability の 3 本柱
📊 Metrics
- 数値時系列データ
- 例: CPU 利用率、QPS
- 傾向と異常検出
📜 Logs
- 構造化テキスト
- 例: クエリログ、エラーログ
- 調査・トラブルシュート
🔍 Traces
- 分散トレース
- 例: API → DB の伝播経路
- ボトルネック特定
3 本柱を組み合わせる: メトリクスで「何かおかしい」と気付き、ログで「何が起きたか」を確認、トレースで「どこで起きたか」を特定する。
2. Cloud Monitoring の活用
2-1. DB ごとの主要メトリクス
Cloud SQL
| メトリクス | 用途 |
cloudsql.googleapis.com/database/cpu/utilization | CPU 利用率 |
cloudsql.googleapis.com/database/memory/usage | メモリ使用量 |
cloudsql.googleapis.com/database/disk/utilization | ストレージ利用率 |
cloudsql.googleapis.com/database/network/connections | アクティブ接続数 |
cloudsql.googleapis.com/database/replication/replica_lag | レプリ遅延(秒) |
cloudsql.googleapis.com/database/postgresql/transactions/aborted_count | 失敗トランザクション数(Postgres) |
Spanner
| メトリクス | 用途 |
spanner.googleapis.com/instance/cpu/utilization_by_priority | 優先度別 CPU 利用率(HIGH を 65% 以下に) |
spanner.googleapis.com/api/request_latencies | API レイテンシ p50/p95/p99 |
spanner.googleapis.com/api/api_request_count | API 呼び出し回数(ステータス別) |
spanner.googleapis.com/instance/storage/used_bytes | ストレージ使用量 |
Bigtable
| メトリクス | 用途 |
bigtable.googleapis.com/server/latencies | サーバーサイド レイテンシ |
bigtable.googleapis.com/cluster/cpu_load | クラスタ CPU 利用率 |
bigtable.googleapis.com/cluster/storage_utilization | ストレージ利用率 |
bigtable.googleapis.com/replication/latency | レプリ遅延 |
2-2. MQL (Monitoring Query Language)
Cloud Monitoring の高度クエリ言語。複雑な集計や演算をサポート。
# MQL 例: Cloud SQL の CPU 利用率を1時間平均で集計
fetch cloudsql_database
| metric 'cloudsql.googleapis.com/database/cpu/utilization'
| filter resource.database_id == 'project:my-db'
| group_by 1h, [value_avg: mean(value.utilization)]
| every 1h
3. Cloud Logging — ログ集約と分析
3-1. ログの種類
| ログタイプ | 内容 |
| cloudsql.googleapis.com/postgres.log | PostgreSQL 標準ログ |
| cloudsql.googleapis.com/mysql-general.log | MySQL 一般ログ |
| cloudsql.googleapis.com/mysql-slow.log | MySQL スロークエリログ |
| cloudaudit.googleapis.com/activity | 管理操作ログ |
| cloudaudit.googleapis.com/data_access | データアクセスログ |
3-2. ログクエリ例
スロークエリ検索(Cloud SQL PostgreSQL)
resource.type="cloudsql_database"
log_id("cloudsql.googleapis.com/postgres.log")
textPayload =~ "duration: [0-9]{4,}"
エラーログ抽出
resource.type="cloudsql_database"
severity >= "ERROR"
textPayload =~ "FATAL|PANIC"
特定インスタンスへの SELECT クエリ
resource.type="cloudsql_database"
resource.labels.database_id="my-project:my-db"
log_id("cloudsql.googleapis.com/postgres.log")
textPayload =~ "SELECT"
3-3. ログベースメトリクス
ログ内の特定パターンをカスタムメトリクスとして集計可能。
例: PostgreSQL の deadlock 発生回数
1. ログクエリ:
textPayload =~ "deadlock detected"
2. ログベースメトリクスとして登録:
名前: postgresql_deadlock_count
タイプ: COUNTER
3. Cloud Monitoring で時系列グラフ + アラート
4. Cloud Audit Logs — 監査ログの活用
4-1. 4 種類の監査ログ
| 種類 | 内容 | 有効化 |
| Admin Activity |
リソース変更(CREATE / DELETE 等) |
常時有効、無料 |
| Data Access |
データ読み書き |
明示有効化、有料 |
| System Event |
システムイベント |
常時、無料 |
| Policy Denied |
ポリシー拒否 |
常時、無料 |
4-2. Data Access ログの活用
Data Access ログは
大量に発生してコストが嵩む。すべての DB アクセスをログ化すると月数万円〜。
- 機密データを扱うインスタンスのみ有効化
- 必要なリソースタイプを限定
- サンプリング設定で量を抑える
4-3. 監査要件への対応
金融機関・医療機関の規制(GDPR、SOX、HIPAA)では、誰が・いつ・何にアクセスしたかの記録保持が要求される。Cloud Audit Logs を Log Sink で BigQuery へエクスポート → 7年保管のパターンが典型。
5. Cloud Trace + OpenTelemetry
5-1. 分散トレースの考え方
ユーザー Request
├ [API Gateway] 500ms
│ ├ [Auth Service] 50ms
│ ├ [Catalog Service] 100ms
│ │ └ [Cloud SQL] 80ms ← ここがボトルネック
│ └ [Payment Service] 200ms
│ └ [Cloud SQL] 50ms
└ レスポンス
5-2. OpenTelemetry 導入パターン
2026年現在、Cloud Trace はOpenTelemetry (OTel) をフルサポート。Cloud Trace API への直接送信よりも、OTel collector 経由が推奨。
導入手順:
- アプリに OpenTelemetry SDK を組み込み(Java/Go/Python/Node など)
- DB クライアントの自動計装(auto-instrumentation)を有効化
- OTel Collector を Sidecar / Daemon として配置
- Collector が Cloud Trace へ送信
- Cloud Trace UI でトレース確認 + ボトルネック特定
5-3. DB クエリレベルのトレース
OTel の DB 自動計装で、各 SQL クエリの実行時間がトレース span として記録される。これにより「アプリのどの処理が DB を遅くしているか」がトレースから即座に判明。
6. Query Insights ディープダイブ
6-1. Query Insights が見せるもの
Query Insights 画面
┌─────────────────────────────────────────────────┐
│ 時系列グラフ: CPU 利用率 / クエリレイテンシ p99 │
├─────────────────────────────────────────────────┤
│ Top クエリ (CPU 消費トップ N) │
│ - クエリテキスト │
│ - 実行回数 / 平均実行時間 / I/O │
│ - ユーザー / アプリ識別 │
├─────────────────────────────────────────────────┤
│ Wait Events (待機イベント分析) │
│ - Lock / Buffer / IO / CPU │
│ - どこで時間が消費されているか │
├─────────────────────────────────────────────────┤
│ 実行計画 (EXPLAIN) │
│ - Seq Scan / Index Scan の判定 │
│ - 推定行数 vs 実際の行数 │
└─────────────────────────────────────────────────┘
6-2. Query Insights の活用パターン
パターン A: 突然のレイテンシ悪化
- Cloud Monitoring でレイテンシ p99 増加を検知
- Query Insights で同時刻の Top クエリを確認
- 新規に頻出している SQL を特定
- EXPLAIN で実行計画確認 → インデックス不足判明
- インデックス追加 → 改善確認
パターン B: Wait Event 分析
| Wait Event | 意味 | 対応 |
Lock:transactionid | ロック競合 | アプリのトランザクション順序見直し |
BufferIO | ディスク I/O 待機 | buffer 不足、メモリ増 or ワーキングセット削減 |
CPU | CPU 待機 | マシンタイプアップ or クエリ最適化 |
Client | クライアント待機 | アプリ側のボトルネック |
7. ダッシュボード設計
7-1. 階層型ダッシュボード
[LEVEL 1: Executive Dashboard]
- サービス全体の SLO 達成状況
- 月次トレンド (アクセス数、エラー率、コスト)
- インシデント数
[LEVEL 2: Service Dashboard]
- API レイテンシ (p50/p95/p99)
- エラー率
- 上流 → 下流の依存
[LEVEL 3: DB Dashboard]
- 各 DB の主要メトリクス
- レプリ遅延、接続数
- Top クエリ
[LEVEL 4: Diagnostic Dashboard]
- 詳細メトリクス
- ログ集約
- トレース可視化
7-2. Golden Signals
Google SRE Book が定義する 「4つの黄金信号」。すべての本番サービスで監視すべき基本指標。
| 信号 | 意味 | DB での例 |
| Latency | 応答時間 | クエリ p99 レイテンシ |
| Traffic | 負荷量 | QPS, 接続数 |
| Errors | エラー率 | クエリ失敗率, タイムアウト数 |
| Saturation | 飽和度 | CPU/メモリ/ストレージ利用率 |
8. アラート設計の Anti-pattern
典型的なアラート Anti-pattern:
- 「念のため」アラート: 鳴っても何もアクションがないアラート
- 低すぎる閾値: CPU 50% で鳴る → 毎時鳴ってミュート → 本当の障害を見逃す
- 瞬間スパイクで鳴る: 5秒で 100% でも実害ない → 5分継続で評価する
- 同じ事象で複数アラート: DB ダウンで 20 個のアラート → Alert Grouping
8-1. 良いアラートの 5 つの条件
- Actionable: 受信したら明確なアクションがある
- Symptom-based: 原因ではなく症状でアラート(「DB CPU 80%」より「クエリ p99 が SLO 超過」)
- Right Severity: 重要度を正しく分類(P1〜P4)
- Sufficient Context: アラートに Runbook URL を含める
- Tested Regularly: 鳴っているアラートを四半期にレビュー
9. ログエクスポートと長期保管
9-1. Log Sink によるエクスポート
Cloud Logging
↓ Log Sink (フィルター条件)
┌────────────────────────┬──────────────────┐
↓ ↓ ↓
BigQuery Cloud Storage Pub/Sub
(分析・長期保管) (Archive) (リアルタイム連携)
9-2. 監査要件への対応
| 要件 | 保管先 | 保持期間 |
| 金融 (SOX) | BigQuery + GCS Archive | 7 年 |
| 医療 (HIPAA) | BigQuery + GCS Archive | 6 年 |
| GDPR | BigQuery | 業務要件次第 |
| PCI-DSS | BigQuery + 改ざん防止 GCS | 1 年以上 |
10. Observability のコスト管理
10-1. ログコストの落とし穴
Data Access ログを全 Cloud SQL インスタンスで有効化すると、月数万円〜のログ料金が発生する場合がある。
特に DEBUG レベルのログを保持すると容量爆発。
10-2. コスト削減パターン
- Log Routing で必要なログだけ Cloud Logging に取り込む(ノイズログは除外)
- 長期保管は GCS Archive クラスへ(Logging より大幅安価)
- BigQuery に取り込む際はパーティション + クラスタリングで分析コスト削減
- Custom メトリクスのcardinalityを抑える(ラベル組み合わせを減らす)
- 不要になったログベースメトリクスは削除
10-3. 可視化ツール選択
| 用途 | 推奨ツール |
| 標準的なメトリクス可視化 | Cloud Monitoring Dashboards (無料) |
| BI / ビジネス向け | Looker / Looker Studio |
| カスタム高度可視化 | Grafana (Cloud Monitoring プラグイン) |
| APM 統合 | Datadog / New Relic (3rd party) |
📋 Observability の試験ポイント
PCDBE で Observability に関連する出題:
- 「スロークエリ調査」 → Query Insights
- 「監査要件 + 長期保管」 → Audit Logs + Log Sink → BigQuery/GCS Archive
- 「分散トレース」 → Cloud Trace + OpenTelemetry
- 「アラート設計」 → 5分継続 + Notification Channel 分離
- 「ログコスト爆発」 → Log Routing + サンプリング