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
Flight recorder at the application layer (NOT t...
Search
Ken’ichiro Oyama
August 25, 2025
Technology
0
90
Flight recorder at the application layer (NOT the FlightRecoder newly added at Go 1.25) / Fukuoka.go #22
https://fukuokago.connpass.com/event/364970/
Ken’ichiro Oyama
August 25, 2025
Tweet
Share
More Decks by Ken’ichiro Oyama
See All by Ken’ichiro Oyama
ソフトウェア開発におけるインターフェイスという考え方 / PHPerKaigi 2025
k1low
9
5.4k
Parsing HCL/CUE / Fukuoka.go #21
k1low
0
8.5k
実践 net/http Middleware パターン / Kizuku.go Vol.1
k1low
2
340
Cleanup handling in Go / Go Conference 2024
k1low
6
3.7k
CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7
k1low
18
11k
Command-line interface tool design / PHPerKaigi 2024
k1low
8
3.4k
gostyle IS NOT Go Style / Fukuoka.go#19 Reboot
k1low
1
300
Parsing case study in Go / Go Conference mini 2023 Winter IN KYOTO
k1low
2
1.4k
APIシナリオテストツールとしてのrunn / 4 API testing tools
k1low
3
1.7k
Other Decks in Technology
See All in Technology
2025年夏 コーディングエージェントを統べる者
nwiizo
0
140
サンドボックス技術でAI利活用を促進する
koh_naga
0
200
AWSを利用する上で知っておきたい名前解決のはなし(10分版)
nagisa53
10
3.1k
Terraformで構築する セルフサービス型データプラットフォーム / terraform-self-service-data-platform
pei0804
1
170
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
100
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.2k
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
140
JTCにおける内製×スクラム開発への挑戦〜内製化率95%達成の舞台裏/JTC's challenge of in-house development with Scrum
aeonpeople
0
210
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
710
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
460
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
890
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
9.9k
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
GraphQLとの向き合い方2022年版
quramy
49
14k
Designing Experiences People Love
moore
142
24k
Site-Speed That Sticks
csswizardry
10
810
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
112
20k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
The Language of Interfaces
destraynor
161
25k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Transcript
Flight recorder at the application layer (NOT the FlightRecoder newly
added at Go 1.25) ⼩⼭健⼀郎 / Tailor Inc. 2025.8.25 Fukuoka.go #22
• Go 1.25で runtime/trace 追加された機能 ◦ https://pkg.go.dev/runtime/trace#FlightRecorder • トレースデータのサイズや継続的な書き込みコストから従来の実⾏トレースキャプチャでは実⽤的でな かった稀なイベントのデバッグに役にたつ軽量な実⾏トレースキャプチャ。
• 仕組みとしては実⾏トレースをインメモリのリングバッファに継続的に記録し、重要なイベントが発⽣し た際に、FlightRecorder.WriteTo を呼び出すことで、直近のトレースをファイルに書き出す。 • 直前の、必要なトレースのみをキャプチャできるため、⽣成されるトレースが⼤幅に⼩さくなる。 ◦ 従来の実⾏トレースのように⾼コストではないため、常に有効にしやすい。 • FlightRecorderConfig 内で、キャプチャする期間やデータ量を設定できる runtime/trace.FlightRecorder 2
• goroutine creation/blocking/unblocking (Goroutineの作成/ブロック/ブロック解除) • syscall enter/exit/block (System callの⼊⼒/終了/ブロック) •
GC-related events (GC 関連イベント) • changes of heap size (ヒープサイズの変更) • processor start/stop (プロセッサの開始/停⽌) • etc. runtime/trace で取得できるトレースデータ 3
• エラーが発⽣したときに原因を特定したい • コードのどこでエラーになったのか • エラーになるまでにどのような処理をしていたのか • (OSSのCLIツールとして提供しているのでOtelは使いにくい) つまり、スタックトレースや実⾏ログが欲しい アプリケーションレイヤで欲しいトレースデータ
4
• エラー時にスタックトレースと直前のログをまとめてファイルに書き出す ◦ 全てのログは必要ない。 https://pkg.go.dev/runtime/trace#FlightRecorder と同じ • ログは LogLevel=Debug な詳細なログが欲しい
アプリケーションレイヤのFlight recorder 5
スタックトレース 6
• https://github.com/k1LoW/errors • errors + stack staces. • 実装コンセプトは ◦
Retain the stack traces once stacked as far as possible. ▪ Support for errors.Join. ◦ It is possible to output stack traces in structured data. ◦ Zero dependency k1LoW/errors 7
直前のデバッグログ 8
• ユーザがログレベルをハンドリングするログハンドラと、Flight recorder⽤のログハンドラの2つに分ける ◦ Flight recorder⽤のログは常に LogLevel=Debug • log/slog だと
https://github.com/samber/slog-multi を使うと良い まずログを分岐する 9
• https://github.com/k1LoW/tail • 直近N⾏だけを保持する io.Writer を満たす実装 k1LoW/tail 10
11 完成
12
少し実⽤的で⼩さなOSSを書くのが趣味 • GitHub: @k1LoW • X: @k1LoW • SWE at
Tailor Inc. ⾃⼰紹介 13 Ken'ichiro Oyama ⼩⼭健⼀郎
14 わたしたちは、"Empower every company to deploy any ideas (誰もがデプロイできる社会を創る)" というミッ
ションのもと、誰しもがプロダクト開発の担い⼿になることができる社会の実現を⽬指しています。ミッション の実現に向けて、共に挑戦する仲間を募集しています。 https://careers.tailor.tech/ 共に働く仲間を募集しています