mcpField
S
sentry-otel-exporter-setup

sentry-otel-exporter-setup

github.com/getsentryクラウド・DevOps442 回インストール6 日前に更新
リポジトリ

sentry-otel-exporter-setup について

sentry-otel-exporter-setup は、OpenTelemetry Collector から Sentry へトレースとログを送る設定手順を案内するスキルです。Collector の準備、設定の選択、プレースホルダーの追加、検証と確認を扱います。

主な機能

  1. 01既存の Collector 設定を確認
  2. 02互換性のある Collector の確認と導入
  3. 03プロジェクト自動作成の選択
  4. 04Sentry Exporter の設定
  5. 05環境変数のプレースホルダー追加
  6. 06設定の検証と確認

活用シーン

  1. 01Collector のトレースを Sentry に送信
  2. 02Collector のログを Sentry に送信
  3. 03新しい Collector 設定の作成
  4. 04既存パイプラインへの Sentry Exporter 追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/getsentry/plugin-claude --skill sentry-otel-exporter-setup

インストール後、Claude Code で/sentry-otel-exporter-setupを入力して読み込まれたか確認します。

詳細

Sentry OTel Exporter のセットアップ

用語:「Sentry Exporter」コンポーネントを指す場合は、常に「Sentry Exporter」と表記してください。

OpenTelemetry Collector を設定し、Sentry Exporter を使用してトレースとログを Sentry に送信します。

セットアップの概要

進捗を確認するため、このチェックリストをコピーしてください。

OTel Exporter Setup:
- [ ] Step 1: Check for existing configuration
- [ ] Step 2: Check collector version and install if needed
- [ ] Step 3: Configure project creation settings
- [ ] Step 4: Write collector config
- [ ] Step 5: Add environment variable placeholders
- [ ] Step 6: Run the collector
- [ ] Step 7: Verify setup
- [ ] Step 8: Enable trace connectedness with OTLPIntegration (Python/Ruby/Node.js)

ステップ 1:既存の設定を確認する

receivers: を含む YAML ファイルを探して、既存の OpenTelemetry Collector 設定を検索します。また、otel-collector-config.*、collector-config.*、otelcol.* という名前のファイルも確認してください。

既存の設定が見つかった場合:どちらの方法を希望するかユーザーに確認してください。

  • 既存の設定を変更する:重複を避けるため、既存のファイルに Sentry Exporter を追加します(推奨)
  • 別の設定を作成する:既存の設定は変更せず、テスト用に新しい設定を作成します

ユーザーの回答を待ち、ステップ 2 に進む前に選択内容を記録してください。 この判断によって、以降のワークフローが決まります。

設定が存在しない場合:ステップ 4 で新しい collector-config.yaml を作成することを伝えてから、ステップ 2 に進みます。

ステップ 2:Collector のバージョンを確認する

Sentry Exporter を使用するには、otelcol-contrib v0.145.0 以降が必要です。

既存の Collector を確認する
  1. which otelcol-contrib を実行して PATH 上にあるか確認するか、プロジェクト内の ./otelcol-contrib を確認します
  2. 見つかった場合は、適切なバージョン確認コマンドを実行し、バージョン番号を解析します
  3. 後のステップで使用できるよう、Collector のパスを記録します(PATH 上にある場合は otelcol-contrib、ローカルにある場合は ./otelcol-contrib など)
既存のバージョン対応
≥ 0.145.0ステップ 3 に進みます — 既存の Collector は互換性があります
< 0.145.0以下のインストールに進みます
インストールされていない以下のインストールに進みます
インストール

Collector の実行方法をユーザーに確認してください。

  • バイナリ:GitHub のリリースからダウンロードします。 Docker は不要です。
  • Docker:コンテナとして実行します。 Docker のインストールが必要です。
バイナリのインストール

GitHub から最新のリリースバージョンを取得します。

curl -s https://api.github.com/repos/open-telemetry/opentelemetry-collector-releases/releases/latest | grep '"tag_name"' | cut -d'"' -f4

重要:GitHub API が返すバージョンには v の接頭辞が付いています(例:v0.145.0)。ダウンロード URL のパスには v の接頭辞を含む完全なタグが必要ですが、ファイル名と Docker タグには接頭辞なしの数字のみのバージョンを使用します(例:0.145.0)。

ユーザーのプラットフォームを検出し、バイナリをダウンロードします。

  1. uname -s と uname -m を実行して OS とアーキテクチャを検出します
  2. リリース値に対応付けます。
    • Darwin + arm64 → darwin_arm64
    • Darwin + x86_64 → darwin_amd64
    • Linux + x86_64 → linux_amd64
    • Linux + aarch64 → linux_arm64
  3. ダウンロードして展開します。
curl -LO https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v<numeric_version>/otelcol-contrib_<numeric_version>_<os>_<arch>.tar.gz
tar -xzf otelcol-contrib_<numeric_version>_<os>_<arch>.tar.gz
chmod +x otelcol-contrib

例:バージョンが v0.145.0 の場合、URL のパスには v0.145.0 を使用し、ファイル名には 0.145.0 を使用します。

これらの手順はユーザーにコマンドを示すだけでなく、ユーザーに代わって実行してください。

  1. ディスク容量を節約するため、ダウンロードした tarball を削除するかどうか、ユーザーに確認してください(約 50MB)。
    • 削除する:tarball を削除します
    • 残しておく:tarball をそのまま残します

ユーザーの回答を待ってください。 明示的に削除を選んだ場合に限り、削除します。

rm otelcol-contrib_<numeric_version>_<os>_<arch>.tar.gz
Docker のインストール
  1. docker --version を実行して Docker がインストールされていることを確認します
  2. GitHub から最新のリリースタグを取得します(上記と同じ方法です)
  3. v の接頭辞なしの数字のみのバージョンを使用してイメージを取得します。
docker pull otel/opentelemetry-collector-contrib:<numeric_version>

例:GitHub のタグが v0.145.0 の場合は、docker pull otel/opentelemetry-collector-contrib:0.145.0 を使用します。

docker run コマンドは、設定を作成した後のステップ 6 で使用します。

ステップ 3:Sentry プロジェクトの作成を設定する

Sentry プロジェクトの自動作成を有効にするかどうか、ユーザーに確認します。 どちらの選択肢も推奨しないでください。

  • はい:service.name からプロジェクトを作成します。 Sentry 組織にチームが 1 つ以上必要です。 新しいプロジェクトはすべて、最初に見つかったチームに割り当てられます。 作成中に初期データが破棄される場合があります。
  • いいえ:テレメトリが届く前に、Sentry にプロジェクトが存在している必要があります。

ステップ 4 に進む前に、ユーザーの回答を待ってください。

ユーザーが「はい」を選択した場合:エクスポーターがすべてのプロジェクトをスキャンし、最初に見つかったチームを使用することを伝えます。 自動作成されたプロジェクトはすべて、そのチームに割り当てられます。 チームがまだない場合は、先に Sentry でチームを作成する必要があります。

ステップ 4:Collector の設定を書き込む

ステップ 1 での決定を使用します。既存の設定を変更することをユーザーが選んだ場合は、そのファイルを編集します。別の設定を作成することを選んだ場合は、新しいファイルを作成します。 ステップ 5 と 6 で使用するため、設定ファイルのパスを記録してください。

Sentry Exporter のドキュメントから最新の設定を取得します。

  • 設定例(テンプレートとして使用): https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector-contrib/main/exporter/sentryexporter/docs/example-config.yaml
  • 完全な仕様(利用可能なすべてのオプション): https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector-contrib/main/exporter/sentryexporter/docs/spec.md

WebFetch を使用して設定例を取得し、開始用テンプレートとして使用します。 ユーザーが設定例にない高度なオプションを必要とする場合は、仕様を参照してください。

既存の設定を編集する場合(ステップ 1 での決定に従う)

exporters: セクションに sentry エクスポーターを追加し、適切なパイプライン(traces、logs)に含めます。ユーザーから依頼がない限り、他のエクスポーターを削除したり変更したりしないでください。

新しい設定を作成する場合(ステップ 1 での決定に従う)

取得した設定例を基に collector-config.yaml を作成します。 認証情報には環境変数参照(${env:SENTRY_ORG_SLUG}、${env:SENTRY_AUTH_TOKEN})を使用してください。

ステップ 3 でユーザーが自動作成を選択した場合は、sentry エクスポーターに auto_create_projects: true を追加します。

Debug Exporter を追加する(推奨)

セットアップ中のトラブルシューティングのため、verbosity: detailed を指定した debug エクスポーターをパイプラインに追加します。これにより、すべてのテレメトリがコンソールに出力されます。 セットアップの確認が済んだら削除してください。

ステップ 5:環境変数のプレースホルダーを追加する

Sentry Exporter には、2 つの環境変数が必要です。 ユーザーが後から自分で入力するプレースホルダー値を追加します。実際の 認証情報は絶対に追加しないでください。

言語上の制約:「認証情報を追加する」「環境変数を追加する」「トークンを追加する」と伝える場合は、 これらがプレースホルダーであることを必ず明示してください。ユーザーが後から入力することも、常に明確にしてください。

次のように言わないでください:

  • 「環境変数を追加します」
  • 「.env に認証情報を追加します」
  • 「Sentry の認証トークンを追加します」

代わりに次のように言ってください:

  • 「後から入力していただく環境変数のプレースホルダーを追加します」
  • 「プレースホルダー値を設定します。実際の認証情報に置き換えてください」
  • 「プレースホルダー値を使って環境変数のキーを設定します」

glob **/.env を使って、プロジェクト内の既存の .env ファイルを検索します。必ずどのファイルを使うかユーザーに尋ねてください。会話の流れから推測したり、開いているファイルを根拠に決めたりしないでください。

見つかった選択肢を提示します:

  • [見つかった .env ファイルのパス]:既存ファイルに追加(見つかったパスをそれぞれ列挙)
  • ルートに新規作成:プロジェクトルートに .env を作成

**ユーザーが明示的に選択するまで待ってください。**選択されるまで先に進まないでください。 ステップ 5(検証)とステップ 6(実行)で使うため、環境変数ファイルのパスを記録します。

選択されたファイルに次のプレースホルダー値を追加します:

SENTRY_ORG_SLUG=your-org-slug
SENTRY_AUTH_TOKEN=your-token-here

プレースホルダーを追加した後、Sentry で実際の値を取得する方法をユーザーに伝えます:

  1. Sentry の org slug:Sentry で Settings → Organization Settings → Organization Slug に移動します。これはサブドメインでもあります(例:https://myorg.sentry.io の myorg)。
  2. Sentry の認証トークン:Sentry で Internal Integration を作成します:
    • Sentry で Settings → Developer Settings → Custom Integrations に移動します
    • Create New Integration をクリックし、Internal Integration を選択します
    • 権限を設定します:
      • Organization: Read — 必須
      • Project: Read — 必須
      • Project: Write — auto_create_projects を使用する場合のみ必須
    • 保存してから Create New Token をクリックし、トークンをコピーします

選択した .env ファイルが .gitignore に含まれていることを確認します。

ユーザーが認証情報を設定するまで待つ

値の取得方法を説明した後、.env ファイルを更新したら確認するようユーザーに尋ねます:

  • はい、認証情報を設定しました:検証に進み、コレクターを実行する
  • まだです:.env ファイルを更新するまで待つ

ユーザーが「まだです」を選択した場合は、待ってから再度尋ねます。 認証情報の設定が確認されるまで、ステップ 6 に進まないでください。

設定を検証する

認証情報が設定されたら、ステップ 2 で選択したインストール方法に応じて、適切な方法で設定を検証します。

ステップ 1 の設定ファイルのパスを使用します(変更した既存の設定ファイル、または新しい collector-config.yaml のいずれか)。

バイナリの検証

ステップ 2 で記録したコレクターのパスを使用します(PATH 上にある場合は otelcol-contrib、ローカルにある場合は ./otelcol-contrib)。

まず環境変数を読み込み、それから検証を実行します:

set -a && source "<env_file>" && set +a && "<collector_path>" validate --config "<config_file>"
Docker による検証

注:Docker のボリュームマウントには絶対パスが必要です。 <config_file> または <env_file> が相対パスの場合は、$(pwd)/ を前に付けます。すでに絶対パスの場合は、そのまま使います。

docker run --rm \
  -v "<config_file>":/etc/otelcol-contrib/config.yaml \
  --env-file "<env_file>" \
  otel/opentelemetry-collector-contrib:<numeric_version> \
  validate --config /etc/otelcol-contrib/config.yaml

ステップ 5 で選択した .env ファイルのパスを使用します。

検証に失敗した場合:

  1. エラーメッセージを注意深く確認します
  2. 設定ファイルの問題を修正します
  3. もう一度検証を実行します
  4. 検証に成功するまで繰り返します

検証に成功したら、コレクターを実行する準備ができたかユーザーに尋ねます:

  • はい、今すぐ実行します:ステップ 6 に進み、コレクターを起動する
  • まだです:待ちます。ユーザーは先に設定を確認したり、環境を準備したりする場合があります

ステップ 6 に進む前に、ユーザーの確認を待ってください。

ステップ 6:コレクターを実行する

ユーザーがコレクターを実行する準備ができたことを確認してから、このステップに進んでください。

実行コマンドをユーザーに提示しますが、自動的に実行しないでください。 ユーザー自身が実行します。

ステップ 2 で選択したインストール方法に応じたコマンドを提示してください。

先ほど選択した実際のパスを使用してください:

  • 設定ファイル:ステップ 1 で選択したもの(既存の設定ファイルまたは新しい collector-config.yaml)
  • 環境変数ファイル:ステップ 5 で選択したもの(ユーザーが選んだ .env ファイル)
  • コレクターのパス:ステップ 2 で選択したもの(PATH 上にある場合は otelcol-contrib、ローカルにある場合は ./otelcol-contrib)
バイナリ

最初に環境変数を読み込んでから、コレクターを実行します:

set -a && source "<env_file>" && set +a && "<collector_path>" --config "<config_file>"
Docker

注:Docker のボリュームマウントには絶対パスが必要です。 <config_file> または <env_file> が相対パスの場合は、先頭に $(pwd)/ を付けてください。すでに 絶対パスの場合は、そのまま使用してください。

再実行する場合:最初に、既存のコンテナーを停止して削除してください:

docker stop otel-collector 2>/dev/null; docker rm otel-collector 2>/dev/null
docker run -d \
  --name otel-collector \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 13133:13133 \
  -v "<config_file>":/etc/otelcol-contrib/config.yaml \
  --env-file "<env_file>" \
  otel/opentelemetry-collector-contrib:<numeric_version>

ステップ 2 でプルしたものと同じ数値のバージョンを、v の接頭辞を付けずに使用してください。

コマンドを提示したら、準備ができたら実行するようユーザーに伝え、続いて ステップ 7 に進んで検証します。

ステップ 7:設定を検証する

  1. コレクターのログで、正常に起動したことを確認します(無効な設定や接続失敗に関するエラーがないこと)
  2. Sentry への接続を示すログメッセージを確認します
  3. インストゥルメント済みのサービスからテストテレメトリを送信し、Sentry に表示されることを確認します

成功条件:

  • コレクターがエラーなく起動する
  • 送信後 60 秒以内に、トレースやログが Sentry に表示される

Docker を使用している場合は、docker logs otel-collector でログを確認します。

ステップ 8:OTLPIntegration でトレースの関連付けを有効にする

ユーザーのアプリケーションが Sentry SDK(Python、Ruby、または Node.js)を使用している場合は、 OTLPIntegration を有効にすることを推奨してください。 これにより、トレースの関連付けが可能になります。OTel のトレースを Sentry のエラー、ログ、 cron、メトリクスに関連付け、自動的に分散トレーシングの伝搬を設定します。

このステップを行わない場合、コレクター経由で送信されたトレースは Sentry に表示されますが、 同じサービスからの他の Sentry イベント(エラー、ログ)には関連付けられません。

ユーザーに次のように尋ねてください:アプリケーションでは Sentry Python SDK、Sentry Ruby SDK、または Sentry Node.js SDK を使用していますか?

  • Python:以下の Python の設定手順に従います
  • Ruby:以下の Ruby の設定手順に従います
  • Node.js:以下の Node.js の設定手順に従います
  • いずれも使用していない/その他の SDK:このステップはスキップします。 OTLPIntegration によるトレースの関連付けは、現在 Python、Ruby、Node.js で利用できます。
Python OTLPIntegration

ドキュメント:https://docs.sentry.io/platforms/python/integrations/otlp/

  1. 追加パッケージをインストールします:
pip install "sentry-sdk[opentelemetry-otlp]"
  1. 既存の sentry_sdk.init() 呼び出しに OTLPIntegration を追加し、 collector_url にコレクターの OTLP トレースエンドポイントを設定します:
from sentry_sdk.integrations.otlp import OTLPIntegration

sentry_sdk.init(
    dsn="___PUBLIC_DSN___",
    integrations=[
        OTLPIntegration(collector_url="http://localhost:4318/v1/traces"),
    ],
)

コレクターの実際の OTLP HTTP エンドポイントを使用してください。 ローカルで実行している場合のデフォルトは http://localhost:4318/v1/traces です。

Ruby OTLPIntegration

ドキュメント:https://docs.sentry.io/platforms/ruby/integrations/otlp/

  1. Gemfile に gem を追加します:
gem "sentry-opentelemetry"
gem "opentelemetry-sdk"
gem "opentelemetry-exporter-otlp"
gem "opentelemetry-instrumentation-all"
  1. bundle install を実行します

  2. OpenTelemetry のインストルメンテーションを設定します:

OpenTelemetry::SDK.configure do |c|
  c.use_all
end
  1. 既存の Sentry.init ブロックで OTLP を有効にし、collector_url にコレクターの OTLP トレースエンドポイントを設定します:
Sentry.init do |config|
  config.dsn = "___PUBLIC_DSN___"
  config.otlp.enabled = true
  config.otlp.collector_url = "http://localhost:4318/v1/traces"
end

コレクターの実際の OTLP HTTP エンドポイントを使用してください。 ローカルで実行している場合のデフォルトは http://localhost:4318/v1/traces です。

Node.js OTLPIntegration

ドキュメント:https://docs.sentry.io/platforms/javascript/guides/node/

  1. 軽量な Sentry SDK と OpenTelemetry の依存関係をインストールします:
npm install @sentry/node-core @opentelemetry/api @opentelemetry/sdk-trace-node @opentelemetry/sdk-trace-base
  1. OTel と Sentry をまとめて設定するインストルメントファイル(instrument.mjs)を作成します:
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
import * as Sentry from '@sentry/node-core/light';
import { otlpIntegration } from '@sentry/node-core/light/otlp';

const provider = new NodeTracerProvider();
provider.register();

Sentry.init({
  dsn: '___PUBLIC_DSN___',
  integrations: [
    otlpIntegration({
      collectorUrl: 'http://localhost:4318/v1/traces',
    }),
  ],
});
  1. --import フラグを付けてアプリを起動します:
node --import ./instrument.mjs app.mjs

コレクターの実際の OTLP HTTP エンドポイントを使用してください。 ローカルで実行している場合のデフォルトは http://localhost:4318/v1/traces です。

otlpIntegration の使用時は tracesSampleRate を設定しないでください。サンプリングは OTel が制御します。 設定すると、OTLP の経路と競合します。

トラブルシューティング

エラー原因対処方法
“failed to create project”Project:Write 権限がありませんSentry で内部インテグレーションの権限を更新します
“no team found”組織にチームがありません自動作成を有効にする前に、Sentry でチームを作成します
“invalid auth token”トークンの種類が誤っているか、有効期限が切れていますユーザー認証トークンではなく、内部インテグレーショントークンを使用します
4317/4318 で “connection refused”コレクターが実行されていないか、ポートが競合していますコレクターのログを確認し、ポートが使用可能であることを確認します
環境変数のエラーで検証に失敗する.env ファイルが読み込まれていないか、プレースホルダーが置き換えられていません実際の認証情報が .env に記載され、ファイルが読み込まれていることを確認します
“container name already in use”前回のコンテナーが残っていますdocker stop otel-collector && docker rm otel-collector を実行します

コメント