🦁

Cloud Run のデプロイ回数を Cloud Logging から取得する

に公開

プロダクトの健康状態をはかるために、デプロイ頻度はひとつの参考情報にになりえます。

https://cloud.google.com/blog/ja/products/gcp/using-the-four-keys-to-measure-your-devops-performance

もちろん記事にあるように、ETLパイプラインを組んですべての指標を定常的にウォッチできると最高です。とはいえ、そこまで本格的にやる前に、まずは手軽にデプロイ頻度だけでも確認したいというケースもあるでしょう。

この記事では、Cloud Run のデプロイ回数を Cloud Logging から取得する方法を紹介します。

Cloud Run のデプロイログを確認する

Cloud Run にデプロイが行われると、Cloud Logging に自動的にログが記録されます。これらのログを活用することで、デプロイ頻度を簡単に把握できます。

デプロイログの特定

Cloud Run のデプロイ時には、以下のようなログが出力されます:

  1. Cloud Build によるデプロイログ

    • resource.type="build"
    • ビルドとデプロイのプロセスが記録される
  2. Cloud Run サービスの更新ログ

    • resource.type="cloud_run_revision"
    • 新しいリビジョンが作成されたタイミングが記録される
  3. 監査ログ

    • protoPayload.serviceName="run.googleapis.com"
    • protoPayload.methodName="google.cloud.run.v1.Services.ReplaceService"
    • サービスの更新操作が記録される

Cloud Logging でデプロイ回数をカウントする

基本的なクエリ

Cloud Logging のログエクスプローラーで、以下のクエリを使用してデプロイログを抽出できます:

resource.type="cloud_run_revision"
resource.labels.service_name="YOUR_SERVICE_NAME"
resource.labels.location="YOUR_REGION"
jsonPayload.message=~"Ready condition status changed"

このクエリは、特定のサービスで新しいリビジョンが Ready 状態になった(デプロイが成功した)ログを抽出します。

監査ログを使用した方法

より正確にデプロイ操作を追跡したい場合は、監査ログを使用します:

protoPayload.serviceName="run.googleapis.com"
protoPayload.methodName="google.cloud.run.v1.Services.ReplaceService"
protoPayload.resourceName=~"YOUR_SERVICE_NAME"
severity="NOTICE"

このクエリは、Cloud Run サービスの更新操作を直接記録している監査ログを抽出します。

ログベースの指標を作成する

定期的にデプロイ回数を確認したい場合は、ログベースの指標を作成すると便利です。

手順

  1. Cloud Logging のログエクスプローラーを開く

    • Google Cloud Console から「ロギング」→「ログエクスプローラー」を選択
  2. クエリを入力

    resource.type="cloud_run_revision"
    resource.labels.service_name="YOUR_SERVICE_NAME"
    jsonPayload.message=~"Ready condition status changed"
    
  3. 「アクション」から「指標を作成」を選択

  4. 指標の設定

    • 指標名: cloudrun_deployment_count
    • 指標の種類: カウンタ
    • 単位: 1
  5. 保存

作成した指標は、Cloud Monitoring のダッシュボードやアラートで使用できます。

Cloud Monitoring でダッシュボードを作成

作成したログベースの指標を使って、デプロイ頻度を可視化するダッシュボードを作成できます。

ダッシュボードの設定例

  1. Cloud Monitoring のダッシュボードを開く

  2. 「ダッシュボードを作成」を選択

  3. ウィジェットを追加

    • グラフタイプ: 折れ線グラフ
    • 指標: logging.googleapis.com/user/cloudrun_deployment_count
    • 集計: SUM
    • 期間: 1日または1週間
  4. 複数のサービスを比較

    • グループ化: resource.service_name
    • これにより、各サービスのデプロイ頻度を一目で比較できます

BigQuery へのエクスポートで詳細分析

より詳細な分析が必要な場合は、ログを BigQuery にエクスポートして分析できます。

ログルーターの設定

  1. ログルーターでシンクを作成

    resource.type="cloud_run_revision"
    OR protoPayload.serviceName="run.googleapis.com"
    
  2. エクスポート先を BigQuery に設定

  3. BigQuery でクエリを実行

-- 日別デプロイ回数
SELECT
  DATE(timestamp) as deploy_date,
  resource.labels.service_name as service_name,
  COUNT(*) as deploy_count
FROM
  `your-project.your_dataset.cloud_run_deployments`
WHERE
  resource.type = "cloud_run_revision"
  AND jsonPayload.message LIKE "%Ready condition status changed%"
  AND DATE(timestamp) >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY
  deploy_date, service_name
ORDER BY
  deploy_date DESC, deploy_count DESC
-- サービス別の週次デプロイ頻度
SELECT
  DATE_TRUNC(DATE(timestamp), WEEK) as week,
  resource.labels.service_name as service_name,
  COUNT(*) as weekly_deploys,
  AVG(COUNT(*)) OVER (
    PARTITION BY resource.labels.service_name
    ORDER BY DATE_TRUNC(DATE(timestamp), WEEK)
    ROWS BETWEEN 3 PRECEDING AND CURRENT ROW
  ) as moving_avg_4weeks
FROM
  `your-project.your_dataset.cloud_run_deployments`
WHERE
  resource.type = "cloud_run_revision"
  AND jsonPayload.message LIKE "%Ready condition status changed%"
GROUP BY
  week, service_name
ORDER BY
  week DESC, service_name

アラートの設定

デプロイ頻度が著しく下がった場合(開発が停滞している可能性)や、逆に頻度が高すぎる場合(不安定な可能性)にアラートを設定できます。

アラートポリシーの例

  1. Cloud Monitoring でアラートポリシーを作成

  2. 条件を設定

    • 指標: logging.googleapis.com/user/cloudrun_deployment_count
    • フィルタ: resource.service_name = "YOUR_SERVICE"
    • 集計: SUM、期間: 1週間
    • 条件: 値が2未満(1週間に2回未満のデプロイ)
  3. 通知チャネルを設定

    • Slack、Email、PagerDuty など

まとめ

Cloud Run のデプロイ回数を Cloud Logging から取得することで、以下のメリットが得られます:

  • 追加コスト不要: Cloud Logging の基本機能で実現可能
  • リアルタイム性: デプロイ直後にログが記録される
  • 柔軟な分析: ログクエリで様々な角度から分析可能
  • 既存システムとの統合: Cloud Monitoring や BigQuery との連携が簡単

デプロイ頻度は DevOps のパフォーマンス指標の一つに過ぎませんが、チームの開発活動を把握する第一歩として有効です。まずは Cloud Logging でデプロイログを確認することから始めて、必要に応じてダッシュボードやアラートを追加していくとよいでしょう。

参考リンク

クラスメソッド Tech Blog

Discussion