テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
by
shiro seike
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
©Fusic Co., Ltd. CONFIDENTIAL OSEKKAI × TECHNOLOGY テレメトリーシグナルが導くパフォーマンス最適化 PHPerKaigi 2026 2026.03.20 清家史郎 @seike460
Slide 2
Slide 2 text
©Fusic Co., Ltd. 自己紹介 はじめに 清家 史郎 (@seike460) SHIRO SEIKE 株式会社Fusicプリンシパルエンジニア/エバンジェリスト AWS User Group Leaders AWS Community Builder Serverless 2025 Japan AWS Top Engineers JAWS Days 2026 実行委員長
Slide 3
Slide 3 text
©Fusic Co., Ltd. アジェンダ
Slide 4
Slide 4 text
©Fusic Co., Ltd. 「なんか遅いんだよね」 ● 勘と経験で 推測 する改善 ● 本当に速くなったか 答えられない
Slide 5
Slide 5 text
©Fusic Co., Ltd. 推測するな、計測せよ ● "Don't tune until you've measured" ● 計測には 3つのシグナル が必要
Slide 6
Slide 6 text
©Fusic Co., Ltd. ● CNCF公式の ベンダーフリー テレメトリ基盤 ● PHP: PECL拡張で コード変更ゼロ計装 OpenTelemetry — 計測の標準基盤
Slide 7
Slide 7 text
©Fusic Co., Ltd. テレメトリパイプラインの設計
Slide 8
Slide 8 text
©Fusic Co., Ltd. 属性設計 — シグナルに意味を持たせる ● api.version 属性で V1/V2 を区別 ● Metrics のラベルとしても自動伝播
Slide 9
Slide 9 text
©Fusic Co., Ltd. 今日のサンプルアプリ : BookShelf API ● V1 ボトルネックあり / V2 最適化済み ● Docker Compose で 1コマンド起動
Slide 10
Slide 10 text
©Fusic Co., Ltd. 今日のサンプルアプリ : BookShelf API ● V1 ボトルネックあり / V2 最適化済み ● Docker Compose で 1コマンド起動
Slide 11
Slide 11 text
©Fusic Co., Ltd. Traces — ボトルネックを可視化する ● 自動計装 がスパンツリーを自動生成 ● ウォーターフォールで 時間の内訳 が一目瞭然
Slide 12
Slide 12 text
©Fusic Co., Ltd. ボトルネック 1: N+1クエリ — V1 /books ● Book::all() — ページネーションなし ● $book->author — 都度SELECT発行
Slide 13
Slide 13 text
©Fusic Co., Ltd. V1 トレース実測 : 50,009スパン / 約62秒 ● GET /api/v1/books の 実測 トレースデータ ● 50,009スパン の異常なDB操作
Slide 14
Slide 14 text
©Fusic Co., Ltd. V2 の修正: Eager Loading + Pagination ● with() で N+1を解消 ● paginate(20) で 20件ずつ 取得
Slide 15
Slide 15 text
©Fusic Co., Ltd. V2 トレース: 23スパン / 23ms 約2,700倍の改善 V1 V2 改善 レイテンシ 62,370ms 23ms ~2,700x スパン数 50,009 23 2,174x SQLクエリ ~10,001 4 2,500x
Slide 16
Slide 16 text
©Fusic Co., Ltd. ボトルネック 2: 同期外部API — V1 /orders
Slide 17
Slide 17 text
©Fusic Co., Ltd. Traces のウォーターフォール : 約5.5秒の内訳 ● DB操作は 100ms以下 — 処理時間の 0.3% ● 残り 99.7% は外部API + sleep
Slide 18
Slide 18 text
©Fusic Co., Ltd. V2 の修正: 非同期Job化 ● 重い処理を Queue Job にオフロード ● 5,537ms → 1,017ms (約5倍改善)
Slide 19
Slide 19 text
©Fusic Co., Ltd. Metrics — 改善効果を計測する ● Traces = 点の分析 / Metrics = 線の監視 ● spanmetrics で RED Metrics 自動生成
Slide 20
Slide 20 text
©Fusic Co., Ltd. spanmetrics connector Traces から Metrics を自動生成
Slide 21
Slide 21 text
©Fusic Co., Ltd. V1 vs V2 レイテンシ比較 — 実データ エンドポイント V1 p95 V2 p95 改善率 GET /books 62,370ms 23ms ~2,700x POST /orders 5,537ms 1,017ms ~5x GET /books/{id} 35ms 29ms 1.2x GET /books/search 396ms 28ms ~14x
Slide 22
Slide 22 text
©Fusic Co., Ltd. Grafana ダッシュボード — 継続的な監視 ● api_version ラベルで V1/V2 比較 ● V1/V2 比較 をリアルタイム監視
Slide 23
Slide 23 text
©Fusic Co., Ltd. カスタムメトリクスの設計
Slide 24
Slide 24 text
©Fusic Co., Ltd. Logs — コンテキストを補完する ● trace_id でログへ直接ジャンプ ● 構造化ログ で検索・フィルタ可能に
Slide 25
Slide 25 text
©Fusic Co., Ltd. Logs でバグを発見 : cache テーブル欠損
Slide 26
Slide 26 text
©Fusic Co., Ltd. 3シグナルの相関 — Trace IDで紐づける ● spanmetrics で自動変換 ● Exemplar で逆引き ● これらをOpenTelemetryMCPを利用して「データソース」 に出来る
Slide 27
Slide 27 text
勘と経験に頼らず シグナルが導く改善を始めよう
Slide 28
Slide 28 text
©Fusic Co., Ltd. 本番運用の知見 ● コスト・パフォーマンス・データ量の バランス ● デモ環境と本番は 別物
Slide 29
Slide 29 text
©Fusic Co., Ltd. サンプリング戦略 ● Head-based: 開始時に確率判定 ● Tail-based: 完了後に条件判定
Slide 30
Slide 30 text
©Fusic Co., Ltd. Tail-based サンプリングの実践 ● エラー/遅延トレースは 100% 収集 ● 正常トレースは 10% サンプリング
Slide 31
Slide 31 text
©Fusic Co., Ltd. Collector 構成: memory_limiter と batch ● memory_limiter: 512MiB 上限 ● batch: 1024スパン ごと送信
Slide 32
Slide 32 text
©Fusic Co., Ltd. spanmetrics: カーディナリティに注意 ● dimension 過多で メトリクス爆発 ● 値が有限な属性だけを選ぶ
Slide 33
Slide 33 text
©Fusic Co., Ltd. 今日から始める 3ステップ ● 計装 → 収集 → 可視化 の3ステップ ● 数時間で 小さく始められる
Slide 34
Slide 34 text
©Fusic Co., Ltd. テレメトリーシグナルを取得して オブザーバビリティを始めよう まとめ ● Traces — ボトルネック可視化 ● Metrics — 改善効果の定量化 ● Logs — 根本原因の特定
Slide 35
Slide 35 text
©Fusic Co., Ltd. OSEKKAI × TECHNOLOGY ご清聴いただきありがとうございました Thank You ココロと技術で、ぴったりも、びっくりも。
Slide 36
Slide 36 text
©Fusic Co., Ltd. Appendix 時間の関係で紹介しきれなかったスライドを供養するゾーンです
Slide 37
Slide 37 text
©Fusic Co., Ltd. Before/After — データに基づく改善効果
Slide 38
Slide 38 text
©Fusic Co., Ltd. N+1だけじゃない Traces で検出できるパターン ● スパン数・形状・ギャップ が手がかり ● コードレビューで見逃すパターンを 発見