Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LaravelプロダクトにOpentelemetryを導入した話

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for h_rym h_rym
December 11, 2025
230

 LaravelプロダクトにOpentelemetryを導入した話

Grafana Meetup Japan #7|Let's OpenTelemetry!
https://grafana-meetup-japan.connpass.com/event/376412/

Avatar for h_rym

h_rym

December 11, 2025

Transcript

  1. 8

  2. 1. 認証ミドルウェアより後にスパンにユーザID を 埋め込むミドルウェアを追加 final class AddUserIdToSpan { public function

    handle(Request `$request, Closure $`next): { $span = Span::getCurrent(); if (!$span->getContext()->isValid() || !Auth::check()) return `$next($`request); } $userId = (int) Auth::id(); `$span->setAttribute('user_id', (int) $`userId); return `$next($`request); } } 12
  3. 2. バゲッジにユーザID があればスパンに追加する 独自SpanProcessor を定義 final class UserIdSpanProcessor implements SpanProcessorInterf

    { public function onStart(`$span, $`parentContext): void { `$userId = Baggage::fromContext($`parentContext) ->getValue('user_id'); if ($userId !== null) { `$span->setAttribute('user_id', $`userId); } } } 14
  4. ライブラリを参考に初期化処理を追加し、 bootstrap/app.php で呼び出すようにした Globals::registerInitializer(function (Configurator $configura ... $multiProcessor = new

    MultiSpanProcessor( new UserIdSpanProcessor(), $defaultSpanProcessor, ); $tracerProvider = (new TracerProviderBuilder()) ->addSpanProcessor($multiProcessor) ->setResource($resource) ->setSampler((new SamplerFactory())->create()) ->build(); return `$configurator->withTracerProvider($`tracerProvider }); 15
  5. 17