GitHub Actions OpenTelemetryをGoogle Cloudで試してみる

GitHub Actions OpenTelemetryをGoogle Cloudで試す方法をご紹介します。最新版はリポジトリで確認できます。

paper2.hatenablog.com

概要

このガイドでは、OpenTelemetry Collector を Google Cloud の Cloud Run にデプロイし、github-actions-opentelemetry を使って GitHub Actions のワークフローからトレースやメトリクスを OpenTelemetry Protocol(OTLP)経由で Google Cloud に送信する方法を説明します。

なお、github-actions-opentelemetry は任意の OTLP エンドポイントと連携可能です。Google Cloud 以外でも使用できます

前提条件

ステップ 1: gcloud のデフォルト設定を構成する

  1. デフォルトプロジェクトを設定:
gcloud config set project <PROJECT_ID>

<PROJECT_ID> を自身の Google Cloud プロジェクト ID に置き換えてください。

  1. デフォルトリージョンを設定:
gcloud config set run/region <REGION>

<REGION> を Cloud Run のリージョン(例: us-west1)に置き換えてください。

ステップ 2: GitHub Actions OpenTelemetry リポジトリをフォークする

サンプル GitHub Actions ワークフローを実行するには、github-actions-opentelemetry リポジトリをフォークしてください。

リポジトリをフォーク

ステップ 3: サンプルコードをクローンする

フォークしたリポジトリをローカルにクローンし、google-cloud サンプルディレクトリに移動します。

git clone https://<YOUR_FORKED_REPOSITORY>
cd github-actions-opentelemetry/examples/google-cloud

ステップ 4: OpenTelemetry Collector を Cloud Run にデプロイする

以下のコマンドで Collector をデプロイします。

gcloud run deploy collector \
  --source . \
  --allow-unauthenticated \
  --port=4318 \
  --max-instances=3

本番環境で利用する際は、Cloud Run への未認証アクセスを許可しないことを推奨します。

このコマンドは Dockerfile を使用してコンテナをビルドし、OpenTelemetry Collector を Cloud Run にデプロイします。コンテナは OpenTelemetry Collector Contrib リポジトリ をベースにしており、collector-config.yaml を設定ファイルとして使用します。

設定ファイルは OTLP 経由でテレメトリデータを受信し、Cloud Trace と Cloud Monitoring へ転送するよう構成されています。

ステップ 5: OTLP エンドポイントを設定する

OpenTelemetry Collector の Cloud Run エンドポイントを取得します。

gcloud run services describe collector --format 'value(status.url)'

取得した URL をコピーして、リポジトリのシークレット OTEL_EXPORTER_OTLP_ENDPOINT として登録します。

シークレットを設定

ステップ 6: ワークフローの有効化

フォークしたリポジトリActions タブを開き、ワークフローを有効化します。ワークフローを有効にするかどうかを尋ねるメッセージが表示されます。それらを確認し、この機能を有効にしてください。

ワークフローを有効化

ステップ 7: ワークフローを実行する

getting-started という新しいブランチを作成し、プッシュします。

git switch -c getting-started
git commit --allow-empty -m "empty commit"
git push --set-upstream origin getting-started

Actions タブで、Example Workflow が成功したか確認します。その後、Send Telemetry after Other Workflow Example ワークフローが実行され、github-actions-opentelemetry を使用して OTLP エンドポイントにトレースとメトリクスが送信されます。

Example Workflowの成功確認

ワークフローが完了したら、さらにコミットしてメトリクスの変化を確認しましょう。

git commit --allow-empty -m "empty commit"
git push

以下が、Send Telemetry after Other Workflow Example の内容です。

name: Send Telemetry after Other Workflow Example

on:
  workflow_run:
    workflows:
      - Example Workflow 01
      - Example Workflow 02
      - Example Workflow 03
    types:
      - completed

permissions:
  actions: read

jobs:
  send-telemetry:
    name: Send CI Telemetry
    runs-on: ubuntu-latest
    steps:
      - name: Run
        id: run
        uses: paper2/github-actions-opentelemetry@main
        env:
          OTEL_EXPORTER_OTLP_ENDPOINT: ${{ secrets.OTEL_EXPORTER_OTLP_ENDPOINT }}
          OTEL_SERVICE_NAME: github-actions-opentelemetry
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

指定したワークフローが完了すると、workflow_run イベントがこのジョブをトリガーし、github-actions-opentelemetry がワークフローの詳細を収集してトレースとメトリクスを OTLP エンドポイントに送信します。

ステップ 8: Cloud Trace でトレースを確認する

Example Workflow の run_id を特定し、Trace Explorerrun_id でフィルタリングしてトレースを確認します。

run_id でフィルタ

Span ID リンクをクリックして、詳細なトレース情報を確認できます。

トレース詳細

ステップ 9: Cloud Monitoring でメトリクスを確認する

Metrics Explorer を開き、以下のメトリクスを選択します。

prometheus/github_job_duration_seconds/gauge

メトリクスを選択

Aggregation 設定で workflow_namejob_name ごとにグループ化すると、それぞれのワークフローとジョブの実行時間を確認できます。

メトリクスグラフ

ステップ 10: クリーンアップ

Cloud Run サービスを削除します。

gcloud run services delete collector

その後、gcloud の設定をリセットします。

gcloud config unset project
gcloud config unset run/region

最後に、必要がなければフォークしたリポジトリも削除してください。