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 で検出できるパターン ● スパン数・形状・ギャップ が手がかり ● コードレビューで見逃すパターンを 発見