【PCD】WEB問題集:アプリのパフォーマンス管理編

WEB問題集

PCD#451(managing)
GKE と Cloud Run を併用するマイクロサービス基盤で、複数プロジェクトのリソースを 1 つの Cloud Monitoring 画面から横断的に観察したいです。最小工数で実現するには、どの構成が最も適切でしょうか。

正解:D

正解の根拠

Cloud Monitoring の metrics scope は、1 つのスコーピングプロジェクトに対して複数の被監視プロジェクトをぶら下げる仕組みです。これにより、各プロジェクトのメトリクスを単一のダッシュボードやアラートポリシーから参照できます。設定はコンソールまたは Terraform で完結し、追加のデータパイプラインは不要です。

主要な集約方式の比較

方式運用工数遅延適性
metrics scopeほぼリアルタイムマルチプロジェクト監視に最適
BigQuery 集約 + Looker Studio分単位分析向け、運用監視には冗長
ダッシュボード複製手動操作依存恒常運用には不向き

設定手順

  1. スコーピングプロジェクトで Monitoring API を有効化します
  2. 「Metrics scope の管理」から被監視プロジェクトを追加します
  3. 追加後はリソースタイプ別にダッシュボードと Alert ポリシーを構成します
gcloud monitoring metrics-scopes add-monitored-project 
  --project=scoping-project 
  --monitored-project=workload-project

不正解の理由

  • A: Logs Explorer はログ閲覧用のため、メトリクスの横断ダッシュボードには利用できず、目的に対して手段が一致しません。
  • B: ダッシュボード複製は metrics scope の機能を再発明する形となり、保守負担が継続的に増えてしまいます。
  • C: BigQuery 集約はコストと遅延を増やすうえ、metrics scope で十分実現できる要件をオーバーエンジニアリングしています。

参考:Metrics scopes for multi-project monitoring

PCD#452(managing)
Cloud Run サービスでビジネス KPI として「1 分あたりの注文成立件数」を Cloud Monitoring へ送信し、アラートと SLO の両方で参照したいです。最も推奨されるアプローチはどれでしょうか。

正解:C

正解の根拠

ビジネス KPI を継続的に観測しアラートと SLO で参照するには、Cloud Monitoring に Custom Metric として送信するのが王道です。Cloud Run のような GA サービスでは OpenTelemetry の Metrics SDK と GCP Exporter を組み合わせると、追加のサイドカー無しで集計済みカウンタやヒストグラムを送信できます。送信後は MQL や PromQL で時系列クエリを書き、同じ指標を Alert ポリシーと Service Monitoring の SLI 双方で参照可能です。

送信方式の比較

方式遅延SLO 連携運用負荷
OpenTelemetry Custom Metric直接 SLI 化可能
ログ集計のみlog-based metric が別途必要
Trace span 数代替サンプリングで欠損不安定

サンプル送信コード

from opentelemetry import metrics
meter = metrics.get_meter("orders")
order_counter = meter.create_counter("orders_completed_total")
order_counter.add(1, {"region": "asia-northeast1"})

不正解の理由

  • A: 手動 CSV 集計は自動化と SLO 連携の要件を満たせず、アラートのリアルタイム性も確保できません。
  • B: Trace は通常サンプリングが効くため、件数の正確な計測には設計上向いていません。
  • D: Cloud Storage 経由のバッチ集計は遅延が大きく、Monitoring と SLO API への直接連携も別途必要となります。

参考:User-defined metrics with OpenTelemetry

PCD#453(managing)
Cloud Monitoring の MQL で「直近 5 分間の HTTP 5xx 応答数が直前 1 時間平均の 3 倍を超えた場合に発火」させる時系列クエリの組み立て要素として、最も中核となるものはどれでしょうか。

正解:C

正解の根拠

MQL は時系列に対する関数型クエリ言語であり、align(集計粒度の正規化) と group_by(ラベル単位の集約) を組み合わせて任意の比率を算出できます。直近と過去を比較する場合は align rate に対し時間オフセットを取った同種クエリを join し、比率の閾値で alert を発火させます。これは Cloud Monitoring が公式に推奨するパターンです。

MQL サンプル

fetch cloud_run_revision
| metric 'run.googleapis.com/request_count'
| filter metric.response_code_class = '5xx'
| align rate(5m)
| every 1m
| { ident
  ; ident | group_by [], mean | window 1h | shift 5m }
| ratio
| condition val() > 3

方式の比較

方式リアルタイム性運用容易性
MQL ratio1 分粒度で発火Alert ポリシーから直接利用
Logs Explorer + 手動 Excel分単位以上属人化しやすい
Billing 連動時間単位因果関係が間接的

不正解の理由

  • A: Billing データの粒度は時間単位で、5 分粒度の異常検知には粒度と意味の両面で合いません。
  • B: 手動エクスポートはアラート連携できず、自動的な閾値判定の仕組みとしては成立しません。
  • D: Trace の目視確認は属人的でアラート化できず、SLO や PagerDuty 連携の要件も満たせません。

参考:Monitoring Query Language reference

PCD#454(managing)
Prometheus 互換のクエリを Cloud Monitoring 上で記述し、Managed Service for Prometheus に取り込んだ GKE Workload のメトリクスを参照したいです。Cloud Monitoring 側で利用する標準のクエリ言語はどれでしょうか。

正解:D

正解の根拠

Google Cloud Managed Service for Prometheus は、収集したメトリクスを Cloud Monitoring のバックエンドに保存します。クエリ側は PromQL に対応しており、Cloud Monitoring の Metrics Explorer、Grafana data source、Alert ポリシーのいずれからも PromQL を発行できます。これにより既存の OSS 資産をほぼそのまま再利用可能です。

クエリ言語の使い分け

言語対象データ主な用途
PromQLManaged Prometheus 取り込みK8s メトリクスの解析
MQLCloud Monitoring 全般GCP ネイティブ指標の比率算出
LogQL 風フィルタCloud Loggingログ検索 / log-based metric 定義

PromQL 例

sum by (pod)(
  rate(container_cpu_usage_seconds_total{namespace="shop"}[5m])
)

不正解の理由

  • A: BigQuery SQL は分析用途であり、Monitoring の Alert ポリシーから直接呼び出す経路としては設計されていません。
  • B: Looker Studio は可視化レイヤーで、PromQL の代替となるクエリ言語を提供していません。
  • C: Cloud Logging のフィルタ言語はログ用途で、Prometheus メトリクスの時系列クエリには対応していません。

参考:Query data in Managed Service for Prometheus

PCD#455(managing)
Cloud Monitoring の Alert ポリシーを設計する際、誤検知を抑えつつ重大障害を取り逃さないために特に重要な設定項目を 2 つ選んでください。

(2つ選択)

正解:A, C

正解の根拠

Alert ポリシーの誤検知抑制と取り逃し防止は、duration(継続時間)・auto-close・対象フィルタ・アグリゲーション粒度の 4 つで決まります。継続時間を短くしすぎるとスパイクで誤発報し、長すぎると重大障害の検知が遅れます。フィルタとアグリゲーションは、対象を「サービス × リージョン」など業務単位にそろえることで、ノイズと信号を分離します。

主要設定の意義

設定役割典型値
duration瞬間スパイク除去3〜10 分
auto-close復旧後の自動クローズ30 分〜24 時間
filter対象リソースの限定service / namespace
aggregation系列の集約粒度per service per region

運用 Tips

  1. SLO に紐づくバーンレートアラートは duration を短め、長期予算アラートは長めに分けて設定します
  2. 通知チャネルは PagerDuty と Email を併用し、片側障害でも届くよう冗長化します
  3. incident の auto-close は障害復旧の検出ロジックと併せて調整します

不正解の理由

  • B: 通知経路を 1 つに絞ると、その経路自体の障害時に重大インシデントを取り逃すリスクが高まります。
  • D: ダッシュボードの装飾は人の視認性に依存するため、自動的なアラート品質改善には寄与しません。

参考:Alerting concepts in depth