mcpField
S
sentry-go-sdk

sentry-go-sdk

github.com/getsentry開発25314 回インストール35 週間前に更新
リポジトリ

sentry-go-sdk について

sentry-go-sdk は、Go プロジェクトをスキャンし、検出したフレームワークやロギングライブラリ、定期処理に応じて Sentry の設定を案内するスキルです。Go アプリにエラー監視、トレーシング、ログ、メトリクス、Crons を導入する開発者向けです。

主な機能

  1. 01Go の依存関係と構成をスキャン
  2. 02フレームワーク別に SDK ミドルウェアを提案
  3. 03エラー監視とトレーシングを設定
  4. 04必要に応じてログ、メトリクス、Crons を追加
  5. 05検証とトラブルシューティングを案内

活用シーン

  1. 01Go サービスに Sentry のエラー監視を追加
  2. 02HTTP フレームワークでリクエスト追跡を有効化
  3. 03定期ジョブに Crons 監視を設定
  4. 04Sentry にイベントが届かない原因を調査

インストール

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

$npx skills add https://github.com/getsentry/sentry-agent-skills --skill sentry-go-sdk

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
crons.md
error-monitoring.md
logging.md
metrics.md
profiling.md
tracing.md

詳細

Sentry Go SDK

Go プロジェクトをスキャンし、Sentry の完全なセットアップを案内する、意見を反映したウィザードです。

このスキルを使用するタイミング

  • ユーザーが Go アプリへの「Sentry の追加」や「Sentry のセットアップ」を依頼した場合
  • ユーザーが Go でエラー監視、トレーシング、ログ記録、メトリクス、または Crons を利用したい場合
  • ユーザーが sentry-go、github.com/getsentry/sentry-go、または Go Sentry SDK に言及した場合
  • ユーザーが Go でパニック、HTTP ハンドラー、またはスケジュールされたジョブを監視したい場合

注: 以下の SDK バージョンと API は、執筆時点の Sentry ドキュメント(sentry-go v0.43.0)に基づいています。 実装前に、必ず docs.sentry.io/platforms/go/ で確認してください。


フェーズ 1:検出

推奨事項を提示する前に、以下のコマンドを実行してプロジェクトの状況を把握します。

# Check existing Sentry dependency
grep -i sentry go.mod 2>/dev/null

# Detect web framework
grep -E "gin-gonic/gin|labstack/echo|gofiber/fiber|valyala/fasthttp|kataras/iris|urfave/negroni" go.mod 2>/dev/null

# Detect logging libraries
grep -E "sirupsen/logrus|go.uber.org/zap|rs/zerolog|log/slog" go.mod go.sum 2>/dev/null

# Detect cron / scheduler patterns
grep -E "robfig/cron|go-co-op/gocron|jasonlvhit/gocron" go.mod 2>/dev/null

# Detect OpenTelemetry usage
grep "go.opentelemetry.io" go.mod 2>/dev/null

# Check for companion frontend
ls frontend/ web/ client/ ui/ 2>/dev/null

確認する項目:

  • sentry-go がすでに go.mod に含まれていますか?含まれている場合は、フェーズ 2(機能の設定)に進みます。
  • 使用しているフレームワークは何ですか?(インストールするサブパッケージとミドルウェアが決まります。)
  • 使用しているログライブラリは何ですか?(ログの自動キャプチャが有効になります。)
  • cron/スケジューラーのパターンはありますか?(Crons の推奨につながります。)
  • 併設されたフロントエンドのディレクトリはありますか?(フェーズ 4 の相互リンクにつながります。)

フェーズ 2:推奨

確認した内容に基づき、具体的な推奨事項を提示します。自由回答式の質問は避け、提案を先に示します。

推奨(基本的なカバレッジ):

  • ✅ エラー監視 — 常に推奨します。パニックと未処理のエラーをキャプチャします。
  • ✅ トレーシング — HTTP ハンドラー、gRPC、または DB 呼び出しが検出された場合に推奨します。
  • ✅ ログ記録 — logrus、zap、zerolog、または slog が検出された場合に推奨します。

任意(可観測性の強化):

  • ⚡ メトリクス — ビジネス KPI/SLO 用のカスタムカウンターとゲージ
  • ⚡ Crons — スケジュールされたジョブのサイレント障害を検出します。
  • ⚠️ プロファイリング — sentry-go v0.31.0 で削除されました。代替案については references/profiling.md を参照してください。

推奨の判断基準:

機能推奨する条件
エラー監視常に — 必須の基本機能です
トレーシングnet/http、gin、echo、fiber、または gRPC のインポートが検出された場合
ログ記録logrus、zap、zerolog、または log/slog のインポートが検出された場合
メトリクスビジネスイベント、SLO の追跡、またはカウンターが必要な場合
Cronsrobfig/cron、gocron、またはスケジュールされたジョブのパターンが検出された場合
プロファイリング⚠️ v0.31.0 で削除済み — 推奨しないでください。references/profiling.md を参照してください。

次のように提案します:「エラー監視 + トレーシング [+ 該当する場合はログ記録] のセットアップをおすすめします。メトリクスや Crons も追加しましょうか?」


フェーズ 3:案内

インストール
# Core SDK (always required)
go get github.com/getsentry/sentry-go

# Framework sub-package — install only what matches detected framework:
go get github.com/getsentry/sentry-go/http      # net/http
go get github.com/getsentry/sentry-go/gin       # Gin
go get github.com/getsentry/sentry-go/echo      # Echo
go get github.com/getsentry/sentry-go/fiber     # Fiber
go get github.com/getsentry/sentry-go/fasthttp  # FastHTTP

# Logging sub-packages — install only what matches detected logging lib:
go get github.com/getsentry/sentry-go/logrus    # Logrus
go get github.com/getsentry/sentry-go/slog      # slog (stdlib, Go 1.21+)
go get github.com/getsentry/sentry-go/zap       # Zap
go get github.com/getsentry/sentry-go/zerolog   # Zerolog

# OpenTelemetry bridge (only if OTel is already in use):
go get github.com/getsentry/sentry-go/otel
クイックスタート — 推奨される初期化

他のコードより前に、main() に追加します。この設定では、適切なデフォルト値を使ってほとんどの機能を有効にします。

import (
    "log"
    "os"
    "time"
    "github.com/getsentry/sentry-go"
)

err := sentry.Init(sentry.ClientOptions{
    Dsn:              os.Getenv("SENTRY_DSN"),
    Environment:      os.Getenv("SENTRY_ENVIRONMENT"), // "production", "staging", etc.
    Release:          release,                          // inject via -ldflags at build time
    SendDefaultPII:   true,
    AttachStacktrace: true,

    // Tracing (adjust sample rate for production)
    EnableTracing:    true,
    TracesSampleRate: 1.0, // lower to 0.1–0.2 in high-traffic production

    // Logs
    EnableLogs: true,
})
if err != nil {
    log.Fatalf("sentry.Init: %s", err)
}
defer sentry.Flush(2 * time.Second)

ビルド時に Release を挿入する(推奨):

var release string // set by -ldflags

// go build -ldflags="-X main.release=my-app@$(git describe --tags)"
フレームワークのミドルウェア

sentry.Init の後に、使用するフレームワーク用の Sentry ミドルウェアを登録します。

フレームワークインポートパスミドルウェア呼び出しRepanicWaitForDelivery
net/http.../sentry-go/httpsentryhttp.New(opts).Handle(h)truefalse
Gin.../sentry-go/ginrouter.Use(sentrygin.New(opts))truefalse
Echo.../sentry-go/echoe.Use(sentryecho.New(opts))truefalse
Fiber.../sentry-go/fiberapp.Use(sentryfiber.New(opts))falsetrue
FastHTTP.../sentry-go/fasthttpsentryfasthttp.New(opts).Handle(h)falsetrue
Iris.../sentry-go/irisapp.Use(sentryiris.New(opts))truefalse
Negroni.../sentry-go/negronin.Use(sentrynegroni.New(opts))truefalse

注: Fiber と FastHTTP は、組み込みのリカバリー機能がない valyala/fasthttp を基盤としています。これらでは Repanic: false, WaitForDelivery: true を使用してください。

ハンドラー内での Hub へのアクセス:

// net/http, Negroni:
hub := sentry.GetHubFromContext(r.Context())

// Gin:
hub := sentrygin.GetHubFromContext(c)

// Echo:
hub := sentryecho.GetHubFromContext(c)

// Fiber:
hub := sentryfiber.GetHubFromContext(c)
合意した各機能について

機能を1つずつ順に確認します。それぞれの参照ファイルを読み込み、記載された手順に従って、次に進む前に動作を確認してください。

機能参照ファイル読み込む条件
エラーモニタリング${SKILL_ROOT}/references/error-monitoring.md常に(基本)
トレーシング${SKILL_ROOT}/references/tracing.mdHTTP ハンドラー/分散トレーシング
プロファイリング${SKILL_ROOT}/references/profiling.mdパフォーマンスが重要な本番アプリ
ロギング${SKILL_ROOT}/references/logging.mdlogrus/zap/zerolog/slog が検出された場合
メトリクス${SKILL_ROOT}/references/metrics.mdビジネス KPI/SLO の追跡
クロン${SKILL_ROOT}/references/crons.mdスケジューラー/cron ジョブのパターンが検出された場合

各機能について:Read ${SKILL_ROOT}/references/<feature>.md を読み込み、手順に厳密に従い、動作することを確認してください。


設定リファレンス

主な ClientOptions フィールド
オプション型デフォルト目的
Dsnstring""空の場合は SDK が無効になります。環境変数:SENTRY_DSN
Environmentstring""例:"production"。環境変数:SENTRY_ENVIRONMENT
Releasestring""例:"[email protected]"。環境変数:SENTRY_RELEASE
SendDefaultPIIboolfalseIP、リクエストヘッダーを含めます
AttachStacktraceboolfalseCaptureMessage の呼び出しにスタックトレースを付加します
SampleRatefloat641.0エラーイベントのサンプルレート(0.0 は 1.0 として扱われます)
EnableTracingboolfalseパフォーマンストレーシングを有効にします
TracesSampleRatefloat640.0トランザクションのサンプルレート
TracesSamplerTracesSamplernilトランザクションごとのカスタムサンプリング(レートを上書きします)
EnableLogsboolfalseSentry Logs 機能を有効にします
MaxBreadcrumbsint100イベントあたりのブレッドクラムの最大数
MaxErrorDepthint100エラーチェーンをアンラップする最大深度
Debugboolfalse詳細な SDK デバッグ出力
BeforeSendfuncnilエラーイベントを変更/破棄するフック
BeforeSendTransactionfuncnilトランザクションイベントを変更/破棄するフック
IgnoreErrors[]stringnil破棄するエラーの正規表現パターン
IgnoreTransactions[]stringnil破棄するトランザクションの正規表現パターン
環境変数
変数対応先目的
SENTRY_DSNDsnデータソース名
SENTRY_RELEASEReleaseアプリのバージョン(例:[email protected])
SENTRY_ENVIRONMENTEnvironmentデプロイ環境
HTTP_PROXY / HTTPS_PROXYHTTPProxy / HTTPSProxy外向きプロキシ

ClientOptions で設定したオプションは、環境変数を上書きします。


検証

Sentry がイベントを受信していることをテストします。

// In a handler or test — triggers a real error event:
sentry.CaptureMessage("Sentry Go SDK test")

// Or trigger a captured panic (with recovery middleware in place):
panic("sentry test panic")

数秒以内に Sentry ダッシュボードを確認してください。何も表示されない場合:

  1. ClientOptions で Debug: true を設定します。SDK の内部情報が標準出力に表示されます
  2. DSN が正しく、プロジェクトが存在することを確認します
  3. sentry.Flush(2 * time.Second) が呼び出されていることを確認します(イベントはデフォルトで非同期です)

フェーズ 4:クロスリンク

Go のセットアップが完了したら、Sentry のカバレッジが不足している関連フロントエンドがないか確認します。

ls frontend/ web/ client/ ui/ 2>/dev/null
cat frontend/package.json web/package.json 2>/dev/null | grep -E '"react"|"svelte"|"vue"|"next"'

Sentry が設定されていないフロントエンドのディレクトリがある場合は、対応するスキルを提案します。

検出されたフロントエンド提案するスキル
React / Next.jssentry-react-sdk
Svelte / SvelteKitsentry-svelte-sdk
Vue@sentry/vue を使用してください。docs.sentry.io/platforms/javascript/guides/vue/ を参照してください
その他の JS/TSsentry-react-sdk(一般的なブラウザー JS のパターンをカバーします)

トラブルシューティング

問題解決策
イベントが表示されないDebug: true を設定し、DSN を確認して、sentry.Flush() が呼び出されていることを確認します
sentry.Init がエラーを返すDSN の形式が正しくありません。形式を確認してください:https://<key>@o<org>.ingest.sentry.io/<project>
パニックが捕捉されないハンドラーより前にフレームワークのミドルウェアが登録されていることを確認します
defer sentry.Flush が実行されないos.Exit() は defer をスキップします。os.Exit() の前に sentry.Flush() を明示的に呼び出してください
スタックトレースがないCaptureMessage では AttachStacktrace: true を設定します。CaptureException では自動的に機能します
Goroutine イベントにコンテキストがないGoroutine を起動する前にハブを複製します:hub := sentry.CurrentHub().Clone()
トランザクションが多すぎるTracesSampleRate を下げるか、TracesSampler を使用してヘルスチェック/メトリクスのエンドポイントを除外します
Fiber/FastHTTP が復旧しないfasthttp ベースのフレームワークでは Repanic: false, WaitForDelivery: true を使用します
SampleRate: 0.0 を設定してもすべてのイベントが送信される0.0 は 1.0 として扱われます。すべてを除外するには、代わりに Dsn: "" を設定します

コメント