🔔

Google Cloudにおける監視:Cloud Logging/Monitoringで監視とアラート通知を設定する方法

に公開

はじめに

Google Cloud でインフラを構築する際、システムの安定稼働を維持するためには適切な監視設定が不可欠です。

特に Cloud Run、Cloud SQL などのマネージドサービスを利用する場合、サービス特性に応じた監視方法を理解し、適切なアラート通知を設定する必要があります。

本記事では、Cloud Logging と Cloud Monitoring を活用して Google Cloud の主要コンポーネントに対する監視・アラート設定を実装した内容を紹介します。

対象とする監視コンポーネント

今回監視対象とする Google Cloud コンポーネントは以下の 3 つです。

  • Cloud Run: コンテナベースのサーバーレス実行環境
  • Cloud SQL: フルマネージドのリレーショナルデータベース
  • Cloud Logging: ログ管理サービス

これらのコンポーネントに対して、正常性監視、ログ監視、認証監視、負荷監視などを実装します。

監視要件の整理

今回は各コンポーネントで以下のように監視を設定することにします。

Cloud Run

監視種別 監視対象 通知条件 監視方式
正常性監視 サービス応答(外形) ヘルスチェックで異常が検知された時 ヘルスチェックプローブ設定により1分ごとにCloud Loggingに出力し、ログベース指標で通知
ログ監視 ERROR/FATALログ ログ発生時 アプリケーションログ出力をCloud Loggingで収集
認証監視 異常なログイン挙動 同一アカウントで5分間に5回以上の認証失敗 アプリケーションログ出力をCloud Loggingで収集
負荷監視 CPU使用率・メモリ使用率 95%で10分間の継続 Cloud Monitoring標準機能で1分ごとに監視

Cloud SQL

監視種別 監視対象 通知条件 監視方式
正常性監視 インスタンス状態 異常が検知された時 Cloud Monitoring標準機能で1分ごとに監視
ログ監視 ERROR/FATALログ ログ発生時 Cloud SQLの標準ログをCloud Loggingで収集
負荷監視 CPU使用率・メモリ使用率 95%で10分間の継続 Cloud Monitoring標準機能で1分ごとに監視
使用量監視 ディスク容量 ディスク自動増加が発生した時 Cloud Monitoring標準機能で1分ごとに監視

Cloud Logging

監視種別 監視対象 通知条件 監視方式
正常性監視 Cloud Runヘルスチェックログ 10分間未達時 直接的な監視方法は提供されていないため、Cloud Runのヘルスチェックプローブのログ途絶で通知を行う
ログ監視 ERROR/FATALログ ログ発生時 標準ログを収集

通知設定

アラートを設定する前に、通知先となる Notification Channel を作成します。

Notification Channelの作成

今回は Slack チャンネルへの通知を設定しました。
Google Cloud では Slack の他にも、メール、PagerDuty、Webhook など、さまざまな通知チャネルに対応しています。

1. Cloud Monitoringの通知チャネル設定画面を開く

Google Cloud コンソールで Cloud Monitoring > アラート > Notification channels
を開き、右上の「Add New」ボタンをクリックします。

Notification Channelsの一覧画面

2. Slack連携アプリをインストール

Slack を選択すると、Google Cloud Monitoring アプリを Slack にインストールする画面が表示されます。
ワークスペースを選択し、「インストール Google Cloud Monitoring」ボタンをクリックして連携を許可します。

Slackアプリのインストール画面

3. Slackチャネルを設定

連携が完了すると、通知先の Slack チャネルを設定する画面が表示されます。

  • Slack Channel Name: 通知先の Slack チャネル名(例: #alerts
  • Cloud Alerting Display Name: Google Cloud コンソールに表示される名前

設定後、「テスト通知を送信」ボタンでテスト通知を送信し、正常に通知が届くことを確認します。

Slackチャネルの設定画面

アラートポリシーとNotification Channelの紐付け

作成したアラートポリシーに通知チャネルを関連付けることで、アラート発生時に自動的に Slack へ通知が送信されます。
Google Cloud コンソールからアラートポリシーを作成する際に、作成した通知チャネルを選択できます。

通知イメージ

実際にアラートが発生した際の Slack 通知の例です。

Slack通知のサンプル

通知内の「View alert」リンクをクリックすると、Google Cloud のアラート詳細ページに遷移し、アラートの詳細情報を確認できます。

実装した監視設定

ここからは、実際に設定した各コンポーネントの監視内容を具体的に説明します。

ログベースの指標について

一部の監視設定では「ログベースの指標(Log-based Metrics)」を使用します。

ログベースの指標は、Cloud Logging に記録されたログデータをカウントし、Cloud Monitoring のメトリクスとして利用できるようにする機能です。

利用シーン

以下のような場合にログベースの指標を使用します:

  • 特定のログの発生回数を監視したい: 認証失敗ログが一定回数を超えたらアラート
  • ログの途絶を検知したい: ヘルスチェックログが一定時間途絶えたらアラート
  • ログから抽出した値を監視したい: レスポンスタイムなどの値をログから抽出して監視

仕組み

  1. Cloud Logging でログフィルタを定義
  2. フィルタに一致するログをカウントし、メトリクスとして記録
  3. Cloud Monitoring でそのメトリクスに対してアラートポリシーを設定

これにより、標準メトリクスでは監視できない独自の条件でアラートを設定できます。

Cloud Runの監視設定

1. ヘルスチェックプローブの設定

Cloud Run サービスにヘルスチェックプローブを設定し、定期的にエンドポイントの正常性を確認します。

gcloud run deploy my-service \
  --image asia-northeast1-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME:latest \
  --region asia-northeast1 \
  --startup-probe=httpGet.path=/health,initialDelaySeconds=20,\
timeoutSeconds=30,periodSeconds=30,failureThreshold=3 \
  --liveness-probe=httpGet.path=/health,initialDelaySeconds=0,\
timeoutSeconds=60,periodSeconds=60,failureThreshold=3
  • startup-probe: コンテナ起動時の初期ヘルスチェック(30 秒間隔で最大 3 回失敗まで許容)
  • liveness-probe: コンテナ稼働中の定期ヘルスチェック(60 秒間隔)

プローブが異常を検知した場合、自動的に Cloud Logging にログが出力されます。

2. エラーログ監視

Cloud Run のエラーログを Cloud Logging で収集し、アラートを設定します。

ログクエリ:

resource.type="cloud_run_revision"
severity>=ERROR

通知の間隔:

  • 5 分

3. 認証失敗の監視

同一アカウントで 5 分間に 5 回以上の認証失敗を検知するアラートを設定します。

アプリケーション側のログ出力例:

認証失敗時に、以下のような構造化ログを出力します。

// 認証失敗時のログ出力例
logger.warn({
  message: 'Login failure',
  email: user.email,
  isAuditLog: true,
  timestamp: new Date().toISOString(),
});

このログは Cloud Logging に以下のように記録されます:

{
  "jsonPayload": {
    "message": "Login failure",
    "email": "user@example.com",
    "isAuditLog": true,
    "timestamp": "2025-11-17T12:34:56.789Z"
  },
  "resource": {
    "type": "cloud_run_revision"
  },
  "severity": "WARNING"
}

ログクエリ:

resource.type="cloud_run_revision"
jsonPayload.message="Login failure"
jsonPayload.isAuditLog=true

ログベースの指標:

  • メトリクス名: login_failure_count
  • フィルタ: 上記クエリ
  • ラベル: emailjsonPayload.email から抽出)

アラートポリシー設定:

  • 条件: 5 分間のウィンドウで同一 email から 5 回以上

4. CPU/メモリ負荷監視

Cloud Monitoring の標準メトリクスを使用してリソース使用率を監視します。

アラートポリシー設定(CPU):

  • メトリクス: run.googleapis.com/container/cpu/utilizations
  • 条件: 95%以上が 10 分間継続

アラートポリシー設定(メモリ):

  • メトリクス: run.googleapis.com/container/memory/utilizations
  • 条件: 95%以上が 10 分間継続

Cloud SQLの監視設定

1. インスタンス状態監視

Cloud Monitoring の標準メトリクスでインスタンスの状態を監視します。

アラートポリシー設定:

  • メトリクス: cloudsql.googleapis.com/database/up
  • 条件: 値が 0(ダウン状態)

2. エラーログ監視

Cloud SQL のエラーログを Cloud Logging で収集し、アラートを設定します。

ログクエリ:

resource.type="cloudsql_database"
severity>=ERROR

通知の間隔:

  • 5 分

3. CPU/メモリ負荷監視

Cloud Monitoring の標準メトリクスを使用してリソース使用率を監視します。

アラートポリシー設定(CPU):

  • メトリクス: cloudsql.googleapis.com/database/cpu/utilization
  • 条件: 95%以上が 10 分間継続

アラートポリシー設定(メモリ):

  • メトリクス: cloudsql.googleapis.com/database/memory/utilization
  • 条件: 95%以上が 10 分間継続

4. ディスク容量の監視

Cloud SQL のディスク容量が自動増加したことを検知します。

Cloud SQL では、ディスク容量が不足すると自動的にディスクサイズが増加します。この機能により、ディスク容量不足でサービスが停止することは防げますが、予期しない容量増加はコスト増加につながるため、通知で早期に把握することが重要です。

アラートポリシー設定:

  • メトリクス: cloudsql.googleapis.com/database/disk/quota
  • ローリングウィンドウ関数: percent change
  • 条件: 値が 0 より大きい

Cloud Loggingの監視設定

1. ヘルスチェックログの途絶監視

Cloud Logging の正常性を間接的に確認するため、Cloud Run のヘルスチェックログが 10 分間途絶えた場合に通知します。

ヘルスチェックエンドポイントでのログ出力:

ヘルスチェックプローブ自体はログを出力しないため、アプリケーション側でログを明示的に出力します。

@Controller('health')
export class HealthController {
  @Get()
  check() {
    console.log('Health check executed successfully')
    return this.health.check([])
  }
}

ログクエリ:

resource.type="cloud_run_revision"
textPayload="Health check executed successfully"

ログベースの指標:

  • メトリクス名: health_check_log_count
  • フィルタ: 上記クエリ

アラートポリシー設定:

  • 条件タイプ: Metric absence
  • Trigger absence time: 10 分

Metric absenceの設定画面

2. エラーログ監視

Cloud Run / Cloud SQL 以外のエラーログを Cloud Logging で収集し、アラートを設定します。

ログクエリ:

NOT resource.type="cloud_run_revision"
NOT resource.type="cloudsql_database"
severity>=ERROR

通知の間隔:

  • 5 分

運用上の考慮事項

ログ保存期間の設定

Cloud Logging のログは、Log Bucket に保存され、デフォルトでは 30 日間保持されます。要件定義に基づき、保存期間が適切に設定されていることを確認してください。

Log Bucket保存期間の確認:

gcloud logging buckets describe _Default --location=global

アラート疲れの防止

監視設定を行う際は、以下の点に注意してアラート疲れを防ぎます。

  • 適切なしきい値の設定: 95%を 10 分間継続など、一時的なスパイクを除外
  • 通知の重複排除: 同じ問題に対して複数のアラートが発生しないよう集約
  • 通知先の分類: 緊急度に応じて通知先を使い分け

まとめ

本記事では、Google Cloud の Cloud Logging と Cloud Monitoring を活用した監視設定を実装しました。
対象は Cloud Run、Cloud SQL、Cloud Logging といった主要コンポーネントです。

マネージドサービス特有の制約を理解し、それぞれのサービスに適した監視方法を選択することで、効果的なシステム監視を実現できます。
ログベースのアラート指標ベースのアラートを組み合わせることで、ログレベルの異常検知からリソース使用率の監視まで、幅広い監視要件に対応できます。

適切な監視設定により、システムの安定稼働を維持し、障害の早期発見・対応が可能になります。本記事が、Google Cloud での監視設定の参考になれば幸いです。

Discussion