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

toittaにOpenTelemetryを導入した話 / Mackerel APM リリースパーティ

toittaにOpenTelemetryを導入した話 / Mackerel APM リリースパーティ

Avatar for cohalz

cohalz

May 28, 2025
Tweet

More Decks by cohalz

Other Decks in Technology

Transcript

  1. 細かいデータが見れていない課題 • 例1: サービスのレイテンシ ◦ 動画アップロードで平均やp95が跳ね上がる ◦ この画面が遅いとかの分析が難しい • 例2:

    エラーの状況がわかりづらい ◦ なんの処理が失敗してどこまで成功しているか ◦ エラーから処理時間を見るのも意外と面倒 11
  2. 1. アプリケーションに計装する • 自動計装等で実装する ◦ @opentelemetry/auto-instrumentations-node ◦ @prisma/instrumentation • (重要)

    dynamic importを使って読み込み ◦ Next.jsならInstrumentation機能を使う ◦ これをしないと計装のコードが読み込まれない 34
  3. 2. ローカルで確認する • (重要) 最初はConsoleSpanExporterでログに出す ◦ 実装か通信か問題を切り分けやすい • 手元でcollectorとバックエンドを立てて確認 ◦

    いきなり送るとトレースやスパン数の爆発も • 複数のサービスに送って動作確認・切り分け ◦ 検証時はjaeger, mackerel, debug(ログ)に送っていた 35
  4. Tips: collector側で大体できる • 属性を追加・削除 ◦ Attributes Processor • ルールを決めてサンプリング ◦

    Tail Sampling Processor • ロジックを書いて属性等を変換 ◦ Transform Processor 37
  5. Tips: Transform Processorが高機能 • OTTLという言語で変換処理を記述 • 例1: 正規表現で属性をまとめる ◦ replace_pattern(span.attributes["http.route"],

    "_rsc=[a-z0-9]{5}", "_rsc=*****") • 例2: 特定の条件で属性を削る ◦ delete_key(span.attributes, "xxx") where span.attributes["yyy"] == "zzz" 38
  6. 4. 本番に導入 • Cloud Runの場合 ◦ YAML形式の設定ファイルに移行が必要 ◦ https://github.com/GoogleCloudPlatform/openteleme try-cloud-run

    • 各サービスのResource Detectionも追加 ◦ リビジョンやリージョンなどを埋めてくれる 39
  7. 5. 計装対象を増やす • 手動計装 ◦ 主にHTTPリクエストベースでないものには手動で ◦ 非同期処理にはAsyncHooksContextManagerを利用 • トレースの伝播

    ◦ Propagatorを利用してサービス間で伝播 ◦ データの渡し方は自由(独自ヘッダで渡すのが良いかも?) 40