mcpField
S
sentry-go-sdk

sentry-go-sdk

github.com/getsentry開発2722.2k 回インストール今日更新
リポジトリ

sentry-go-sdk について

sentry-go-sdkは、Goプロジェクトを調査し、Sentryのエラー監視などの可観測性機能の設定を案内するスキルです。検出したフレームワークに応じてパッケージとミドルウェアを示し、HTTPやgRPCの連携も扱います。

主な機能

  1. 01Goの依存関係とフレームワークの検出
  2. 02フレームワーク別のミドルウェア選択
  3. 03エラー監視とトレースの設定案内
  4. 04ログ、メトリクス、Cronへの対応
  5. 05設定検証とトラブルシューティングの説明

活用シーン

  1. 01GoのWebサービスへのSentry導入
  2. 02HTTPハンドラーでのpanic捕捉
  3. 03gRPCサーバーまたはクライアントへの計測追加
  4. 04Goのスケジュールジョブ監視

インストール

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

$npx skills add https://github.com/getsentry/sentry-for-ai --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

詳細

すべてのスキル > SDK のセットアップ > Go SDK

Sentry Go SDK

Go プロジェクトをスキャンし、Sentry のセットアップを最後まで案内する、推奨設定を備えたウィザードです。

このスキルを使う場面

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

注: 以下の SDK バージョンと API は、執筆時点の Sentry ドキュメント(sentry-go v0.43.0 以降)に基づいています。 v0.33.0 以降、SDK には Go 1.25 以降が必要です(直近 2 つの Go メジャーバージョンをサポートしています)。 実装前に必ず 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 gRPC
grep "google.golang.org/grpc" 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、または DB 呼び出しが検出された場合
ログ記録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

# gRPC interceptors (only if google.golang.org/grpc is detected):
go get github.com/getsentry/sentry-go/grpc

# 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)
gRPC の統合

gRPC サーバーとクライアントには、代わりに sentrygrpc インターセプターを使用します。

import sentrygrpc "github.com/getsentry/sentry-go/grpc"

// Server: register interceptors when creating the gRPC server
server := grpc.NewServer(
    grpc.UnaryInterceptor(sentrygrpc.UnaryServerInterceptor()),
    grpc.StreamInterceptor(sentrygrpc.StreamServerInterceptor()),
)

// Client: register interceptors when dialing
conn, err := grpc.NewClient(
    address,
    grpc.WithUnaryInterceptor(sentrygrpc.UnaryClientInterceptor()),
    grpc.WithStreamInterceptor(sentrygrpc.StreamClientInterceptor()),
)

// Hub access inside a gRPC handler:
hub := sentry.GetHubFromContext(ctx)
合意した各機能について

機能を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 の追跡
Cron${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エラーチェーンを展開する最大深度
DebugboolfalseSDK の詳細なデバッグ出力
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 の内部情報が stdout に出力されます
  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: "" を設定します

コメント