Skip to content

feat: Sentry を撤去し OpenTelemetry + Pyroscope へ移行する - #239

Merged
outductor merged 2 commits into
mainfrom
feat/migrate-sentry-to-otel
Aug 2, 2026
Merged

feat: Sentry を撤去し OpenTelemetry + Pyroscope へ移行する#239
outductor merged 2 commits into
mainfrom
feat/migrate-sentry-to-otel

Conversation

@outductor

@outductor outductor commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

概要

GiganticMinecraft/seichi_infra#5613 (Bugsink と旧 Sentry の完全撤去) の先行移行です。旧 Sentry (sentry.onp.admin.seichi.click) は配信面が撤去済みで、ハードコードされた DSN への送信は既に到達不能でした。seichi-portal-backend で確立した観測スタックへ移行します。

変更内容

Before (Sentry) After
sentry::integrations::tower の HTTP transaction axum-tracing-opentelemetry のサーバースパン (OTLP http/protobuf → Alloy)
sentry::integrations::tracing のイベント送信 stdout 1 行 JSON + OTel trace_id 注入 → Loki (Tempo の tracesToLogsV2 で相関)
panic の Sentry 送信 panic hook が panic=true / level=ERROR を出力 (seichi_infra の LogQL ルール `
(なし) Pyroscope への継続プロファイリング push (PYROSCOPE_SERVER_ADDRESS 設定時のみ)
  • telemetry.rs / logging.rs / panic_hook.rs は seichi-portal-backend のレビュー済み実装の移植 (service 名のみ変更)
  • トレース/プロファイラは環境変数ゲート式で、env 供給は seichi_infra#5669 で行います
  • 注意 (レビュー指摘で訂正): stdout ログは ENV_NAME 未設定時に JSON がデフォルトです (本番で env 供給前でも JSON になる安全側の挙動)。ローカルで pretty にするには ENV_NAME=localLOG_FORMAT=pretty を指定してください

検証

  • cargo check / cargo clippy 警告ゼロ
  • 移植したユニットテスト 5 件パス (JSON ログ形式 / trace_id 注入 / panic=true 契約 / OTel の env ゲート)

🤖 Generated with Claude Code

outductor and others added 2 commits August 2, 2026 09:16
- cargo-chefイメージをrust 1.87から1.97.1に更新 (rust-toolchain.tomlと同期)。
  sentry 0.48.5やtime 0.3.47がrustc 1.88以上を要求するため、2026-04-10以降
  Build and releaseワークフローが失敗し続けていた
- 実行ステージのubuntu:24.04 (glibc 2.39) でバイナリが動くよう、
  デフォルトのtrixie (glibc 2.41) ではなくbookworm variantを明示指定
- mariadb_repo_setupのsha256をMariaDB公式の現行版 (2026-06-30) に更新

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
旧 Sentry (sentry.onp.admin.seichi.click) は配信面が撤去済みで
(GiganticMinecraft/seichi_infra#5613)、ハードコードされた DSN への
送信は既に到達不能だった。seichi-portal-backend と同じ観測スタックへ移行する:

- OTel トレーシング: OTLP http/protobuf、OTEL_* 環境変数で設定。
  OTEL_EXPORTER_OTLP_ENDPOINT 未設定 / OTEL_SDK_DISABLED=true なら無効
- HTTP サーバースパン: axum-tracing-opentelemetry (Sentry の tower layer を置換)
- stdout ログ: 本番は 1 行 JSON + OTel trace_id 注入 (json-subscriber)。
  panic hook が panic=true / level=ERROR を付ける (seichi_infra の
  LogQL ルールとの契約。portal-backend の panic_hook.rs と同一)
- handler 内 panic は CatchPanicLayer で 500 を返しつつ hook がログに残す
- 継続プロファイリング: Pyroscope への push (pyroscope crate、
  PYROSCOPE_SERVER_ADDRESS 未設定なら無効)

telemetry / logging / panic_hook は seichi-portal-backend の実装 (レビュー済み) の移植。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant