Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
toittaにOpenTelemetryを導入した話 / Mackerel APM リリースパーティ
Search
cohalz
May 28, 2025
Technology
1
550
toittaにOpenTelemetryを導入した話 / Mackerel APM リリースパーティ
https://mackerelio.connpass.com/event/351815/
の発表資料です
cohalz
May 28, 2025
Tweet
Share
More Decks by cohalz
See All by cohalz
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
cohalz
3
6.4k
はてなのSRE組織2024 / Road to SRE NEXT@福岡
cohalz
2
1.8k
SREのキャリア、 あるいは生態 / #ya8
cohalz
11
1.7k
カンファレンスのボランティアスタッフって何やるの? / DAIMYO Meetup #4
cohalz
0
170
小さなものでも Step Functions / Serverless Meetup Fukuoka Re:boot
cohalz
0
210
ECSのCI/CD改善と標準化の取り組み / JAWS FESTA 2023 in Kyushu
cohalz
8
7.2k
ecspressoへの貢献を振り返る / JAWS-UG コンテナ支部 #24 ecspresso MeetUp
cohalz
1
7.3k
はてなフォトライフをECSに移行した話 / Hatena Engineer Seminar #20
cohalz
1
19k
SREの異動と働き方 〜はてなブログ編〜 / Hatena Engineer Seminar #13
cohalz
0
2.4k
Other Decks in Technology
See All in Technology
TODAY 看世界(?) 是我們在看扣啦!
line_developers_tw
PRO
0
160
CIでのgolangci-lintの実行を約90%削減した話
kazukihayase
0
200
IIWレポートからみるID業界で話題のMCP
fujie
0
160
What's new in OpenShift 4.19
redhatlivestreaming
1
220
kotlin-lsp を Emacs で使えるようにしてみた / use kotlin-lsp in Emacs
nabeo
0
150
今からでも間に合う! 生成AI「RAG」再入門 / Re-introduction to RAG in Generative AI
hideakiaoyagi
1
160
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
280
エンジニア採用から始まる技術広報と組織づくり/202506lt
nishiuma
8
1.6k
Tenstorrent 開発者プログラム
tenstorrent_japan
0
310
CI/CDとタスク共有で加速するVibe Coding
tnbe21
0
120
kubellが挑むBPaaSにおける、人とAIエージェントによるサービス開発の最前線と技術展望
kubell_hr
0
280
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
38k
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Being A Developer After 40
akosma
90
590k
RailsConf 2023
tenderlove
30
1.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
6
690
The Art of Programming - Codeland 2020
erikaheidi
54
13k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
4 Signs Your Business is Dying
shpigford
184
22k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
The Cost Of JavaScript in 2023
addyosmani
50
8.3k
Transcript
toittaに OpenTelemetryを 導入した話 id:cohalz / @cohalz 2025-05-28 Mackerel APM リリースパーティ
1
自己紹介 • こはる(@cohalz) • 好きなOpenTelemetryの機能 ◦ Exponential Histogram 2
目次 • toittaの運用における課題 • OpenTelemetry導入による変化と展望 • Next.jsを例にサービス計装の流れを紹介 ◦ 時間があれば 3
toittaについて • 2024年7月にリリース • インタビュー動画をアッ プロードし、生成AIに よってその発話を分析す るサービス 4
toittaのシステム構成 • Google Cloud上に構築されたWebアプリ ◦ Cloud Run(Next.js) ◦ Cloud SQL(PostgreSQL)
• 生成AIを利用 ◦ Vertex AIとAzure OpenAI Service 5
6 なぜOTel導入をしたか
7 ブラックボックスな 部分が多いサービス
サービスの特性 として... • 入力 ◦ ユーザの動画ファイル • 出力 ◦ クラウド/生成AI処理
• 規約で許可なく 閲覧ができない 8
多種多様なエラー・ハルシネーション • 考えられる原因として... ◦ ファイルの形式が正しくない? ◦ クラウドの一時的な不調?クォータ制限? ◦ リリース起因? ◦
ファイルの音質や収音環境の問題? ◦ その他考慮してない部分があった? 9
これらに対処するために • 今まではログを中心に運用していた ◦ アラートやダッシュボードを作成 ◦ 実行時間、エラーの種別、SLOのダッシュボードも • 改善はしていたものの対応には時間がかかる 10
細かいデータが見れていない課題 • 例1: サービスのレイテンシ ◦ 動画アップロードで平均やp95が跳ね上がる ◦ この画面が遅いとかの分析が難しい • 例2:
エラーの状況がわかりづらい ◦ なんの処理が失敗してどこまで成功しているか ◦ エラーから処理時間を見るのも意外と面倒 11
状況を改善したいが... • ログとその活用で手作り対応が手間 ◦ 新機能の開発時に対応が漏れる ◦ 言語やフレームワークも違うことがある • その結果対応の属人性が高くなっていた ◦
典型エラーはドキュメントにまとめているが... ◦ アラートからログとドキュメントを開く手間 12
そんな中 • MackerelでAPM機能の開発が活発に ◦ 社内のサポートとフィードバックができるように • この機会にOTel導入をすることに ◦ ちなみに、チームに知見はない状態からスタート 13
14 OTel導入がスタート
計装への道のり • アプリケーションに計装する • ローカルでcollectorを立てて動作確認 • サービス上にサイドカー等で導入 • 扱いやすいように微調整 •
その後手動計装が必要なものにも導入 15
16 (実装の話は後半パート もしくは懇親会で)
17 OTelのトレース導入 による変化
課題は解決できたのか? • 課題の再掲 ◦ 各画面のレイテンシなどわかりたい ◦ エラー状況を把握したい ◦ 対応をスムーズにしたい 18
パスごとの統計情報がわかる 19
エラー状況が確認できる 20
エラーと対応を一緒に確認できる 21
開発の役に立った事例も • 一部のAPI呼び出しでスロットリングの実装を追加 • その際に処理時間の95%tileを見て方針を決定 ◦ 開発メンバーがMackerelを見ただけで進められた ◦ テナント単位などで集計して状況を確認しやすかった声も 22
OpenTelemetryの良さ • 標準の規格に乗ることで ◦ 世の中にナレッジ・ツールがあって情報を探しやすい • 他のサービスに送るといったこともすぐできる ◦ いろんなサービスを試しやすい ◦
乗り換えも実装がそのまま使える ◦ (Mackerelへのフィードバックも) 23
MackerelのAPM機能の良さ • 必要な情報にすぐ辿り着ける ◦ 目的ごとにタブが分かれている ◦ 必要な画面や検索欄も最小限で迷いにくい ◦ HTTPサーバーとデータベースの統計情報が特に見やすい ◦
課題(エラー)機能はその後の対応までまとめられる • => 迷いにくく慣れてない開発者もとっつきやすい 24
25 OTel導入の今後
OTel導入の今後 • メトリック情報も取れるようにする • アラートをMackerelに移行 • トレース情報を強化していく 26
メトリック情報も取れるようにする • 今は短期のメトリックをGoogle Cloud上で確認 ◦ クラウドのコンソール上は遅い、期限が短いなど課題 • Mackerelで確認できるようにしていく ◦ 長期のメトリックでキャパシティプランニング
◦ トレースから飛べる(逆も)も期待できる 27
アラートをMackerelに移行 • 現在はGoogle Cloud上でアラートを設定 • Mackerelのアラートに移行したい ◦ アラートの閾値や通知周りなど調整がやりやすい ◦ 慣れた画面で学習コストを減らせる(開発者も触りやすい)
◦ アラートの通知から対応・可視化など自動化も作りやすい 28
Tips: アラートにトレースのリンクをつける 29
トレースに情報を増やす • 分散トレーシングを強化 ◦ 例えば「こういうファイルの時にこういうエラーにな る」がログを見なくてもわかるように ◦ 外部サービス呼び出しの状況を把握する 30
LLMのトレース情報 • LLMに関する情報もトレースに載せる ◦ OpenLLMetryを利用? ◦ 入出力のトークン数 ◦ モデルの変化による振る舞いの変化を追えるように ◦
実際の入出力は閲覧できないのでマスクの必要も 31
32 付録: Next.jsを計装する までにやったこと
計装への道のり(再掲) • アプリケーションに計装する • ローカルでcollectorを立てて動作確認 • サービス上にサイドカー等で導入 • 扱いやすいように微調整 •
その後手動計装が必要なものにも導入 33
1. アプリケーションに計装する • 自動計装等で実装する ◦ @opentelemetry/auto-instrumentations-node ◦ @prisma/instrumentation • (重要)
dynamic importを使って読み込み ◦ Next.jsならInstrumentation機能を使う ◦ これをしないと計装のコードが読み込まれない 34
2. ローカルで確認する • (重要) 最初はConsoleSpanExporterでログに出す ◦ 実装か通信か問題を切り分けやすい • 手元でcollectorとバックエンドを立てて確認 ◦
いきなり送るとトレースやスパン数の爆発も • 複数のサービスに送って動作確認・切り分け ◦ 検証時はjaeger, mackerel, debug(ログ)に送っていた 35
3. データを整える • 送られたデータを見て運用できそうか確認 ◦ 正常・異常時に意図したトレースになっているか? • 本番データに送って大丈夫な量と内容か確認 ◦ サンプリング
◦ データのマスク 36
Tips: collector側で大体できる • 属性を追加・削除 ◦ Attributes Processor • ルールを決めてサンプリング ◦
Tail Sampling Processor • ロジックを書いて属性等を変換 ◦ Transform Processor 37
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
4. 本番に導入 • Cloud Runの場合 ◦ YAML形式の設定ファイルに移行が必要 ◦ https://github.com/GoogleCloudPlatform/openteleme try-cloud-run
• 各サービスのResource Detectionも追加 ◦ リビジョンやリージョンなどを埋めてくれる 39
5. 計装対象を増やす • 手動計装 ◦ 主にHTTPリクエストベースでないものには手動で ◦ 非同期処理にはAsyncHooksContextManagerを利用 • トレースの伝播
◦ Propagatorを利用してサービス間で伝播 ◦ データの渡し方は自由(独自ヘッダで渡すのが良いかも?) 40
感想など • APMって意外と難しくないという印象に ◦ 目的の情報にすぐ辿り着ける ◦ 開発メンバーと育てていけそう • 最初にデータを送るまでは大変ではある ◦
データが送られてない、まとまってないなど ◦ やり方は決まってるのでその後はスムーズ 41