Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DatadogAPMで始める Laravelアプリケーションのパフォーマンスチューニンク...
Search
akihiro.oguro
April 09, 2022
Programming
2.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DatadogAPMで始める Laravelアプリケーションのパフォーマンスチューニング phperkaigi2022
akihiro.oguro
April 09, 2022
Other Decks in Programming
See All in Programming
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
500
Domain-Driven Transformation
hschwentner
2
2.3k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
680
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
110
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.5k
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
contenteditable と日本語入力に向き合う
colorful12
0
200
Featured
See All Featured
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Agile that works and the tools we love
rasmusluckow
331
22k
New Earth Scene 8
popppiees
4
2.7k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
780
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
GraphQLとの向き合い方2022年版
quramy
50
15k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Transcript
株式会社 DROBE 小黒 陽弘 Datadog APM で始める Laravel アプリケーションの パフォーマンスチューニング
自己紹介 • 小黒 陽弘 (おぐろ あきひろ) • 株式会社DROBEで主に PHP x
Laravel で開発しています • パーソナルスタイリングサービスのDROBEを作っています ◦ ご興味ある方はぜひ「DROBE」で検索してみてください
はじめに • Laravelで開発しているとこんなコードに遭遇しませんか?
はじめに toArray() の結果に独自プロパティ を混ぜるために appends に定義を 追加
はじめに 追加したプロパティは取 得時にDBアクセスが走 る可能性がある
はじめに • 先ほどの Eloquent の一覧取得のAPI
はじめに appends で指定したプロパティ取得時、 eager loading していないため N+1 が発生
• Laravelを使った開発ではEloquentがよしなにやってくれすぎて、呼び出し 先のことをかなり意識しないと簡単に N+1 が発生してしまう ◦ リレーションがたくさんあると、コード上で追うのが困難 ◦ データ数の少ないローカル環境だと開発中気づけないことも →
Laravelを使った開発において開発中に N+1 を完全に排除することは難し い!! Laravel と N+1
• 開発中に気づけないので、パフォーマンスの悪いAPIをリリースしていたり、 過去にリリースしたAPIがデータ増によってパフォーマンスが悪くなったりと いうことが起き得る → リリースされたAPIのパフォーマンスやボトルネックを確認できるようにしてお いて、問題の発見・修正を瞬時に行えるようにするべき Laravel と N+1
どう実現するべきか ...
Laravel と N+1 • DROBEではどうしたか?
Laravel と N+1 • 試しにDatadog APMを入れてみました • Datadogをもともと使っていたこともあって、とりあえず入れてみたのです が、非常に良かったので今日はそのお話をしていきます
このセッションで話すこと • Datadog APM について • DROBEでの活用事例
このセッションのゴール • 同じ課題感を持っている人が、自分のプロダクトに Datadog APM を入れてみたいと思えるようになること
Datadog APM について
APM とは • Application Performance Monitoring (Management) の略称で、ア プリケーションのパフォーマンスを監視・管理することや、監視を行うツール 自体を指す
APM とは • APMを導入することで、本番で運用されているアプリケーションのパフォー マンスが可視化され原因の特定・修正結果の確認が容易になる • 例えば N+1 やスロークエリ・無駄に遅いロジックなどが一目でわかるように なる!!
Datadog APM とは • Datadog の一機能として提供されているAPM
Datadog APM の特徴 • エンドツーエンドトレーシング ◦ アプリからDBに発行されるクエリまで全て紐づけ可能 ◦ ログや各種メトリクスなども含め全てが自動で紐づく •
サンプリング無し ◦ データは全て保存し、検索・分析可能な状態に • コードレベルの可視性 ◦ PHP はまだまだベータ版 … • デプロイメントの追跡 ◦ リリースバージョンごとのパフォーマンスをみたりできる • 自動インスツルメンテーション ◦ 様々な環境、言語、FWに対応しており、簡単に導入できる https://www.datadoghq.com/ja/product/apm より抜粋
• 2ステップで完了 ◦ 1. Datadog Agent (datadogにデータを送信するdaemon)を動かす ◦ 2. Laravel
を動かしている環境にdatadog-php-tracer (いい感じにデータを 収集する php拡張)をいれる • 動作環境に合わせてセットアップ手順がかなり丁寧に記載してある → 詳しくは https://docs.datadoghq.com/ja/tracing/setup_overview/setup/php を参照 Datadog APM の導入
Datadog APM ダッシュボード
Datadog APM ダッシュボード 時間ごとの秒間のリクエスト数が見 れる
Datadog APM ダッシュボード 時間ごとのエラーの数が見れる
Datadog APM ダッシュボード 時間ごとのLatencyが見れる
Datadog APM ダッシュボード service(phpかdbアクセスか、など) の割合
Datadog APM ダッシュボード Latencyの分布が見れる
Datadog APM ダッシュボード リリースバージョンごとのパフォーマ ンスが見れる
Datadog APM ダッシュボード エンドポイントごとのパフォーマンスがみれる (latencyなどでソート・検索できる)
Datadog APM ダッシュボード 単純な平均だけでなく、パーセンタイル統計(全 体のN%のリクエストはX秒以内みたいなデー タ)も見れる
Datadog APM ダッシュボード エンドポイントごとのダッシュボード も用意されている
Datadog APM ダッシュボード 各リクエストのパフォーマンスが一 覧でみれる
Datadog APM ダッシュボード どのタイミングでどういう処理が呼 ばれているかがみれる
Datadog APM ダッシュボード 実行時間や呼ばれた回数などが見 える
Datadog APM ダッシュボード ログやメトリクスとの紐付けも可能
この章のまとめ • APM を入れるとAPIのパフォーマンスやボトルネックを確認できるようにな る • Datadog APM は多機能で簡単に導入可能 •
Datadog APM のダッシュボードでは問題の発見・特定を行うための様々 な情報を確認できる
DROBEでの活用事例
Datadog APM を使ってチューニングしてみる hogehoge api のパフォーマンス悪 いからよろしく〜 • チューニングの具体的なやり方の紹介
Datadog APM を使ってチューニングしてみる
Datadog APM を使ってチューニングしてみる
Datadog APM を使ってチューニングしてみる 緑はDB, 濃い紫がPHP
Datadog APM を使ってチューニングしてみる DBアクセスに問題がありそう ..?
Datadog APM を使ってチューニングしてみる スパンが 999 回以上も呼ばれている
Datadog APM を使ってチューニングしてみる
Datadog APM を使ってチューニングしてみる 同じクエリが大量に呼ばれ、呼び出し間隔も 短そう(N+1っぽい!)
Datadog APM を使ってチューニングしてみる
Datadog APM を使ってチューニングしてみる やたら時間のかかっているクエリはなさそうなので、 スロークエリは無さそう
Datadog APM を使ってチューニングしてみる • 該当APIが遅いのは N+1 によるものである可能性が高いというこ とがわかる → 本件に関しては、eager
loading されていないところを見つけ修正 & deploy
Datadog APM を使ってチューニングしてみる • 結果の確認 新バージョン 旧バージョン
Datadog APM を使ってチューニングしてみる • 結果の確認 P50で2倍くらいはやくなった 新バージョン 旧バージョン
Datadog APM を使ってチューニングしてみる • 結果の確認
Datadog APM を使ってチューニングしてみる • 結果の確認 明らかに N+1 っぽいものもなく なった
DROBEでの改善の流れ • チームで行なっている問題の発見〜修正完了までの流れの紹介
DROBEでの改善の流れ 1. チームで APMを眺める会 2. スプリント プランニング 3. コード修正 4.
リリース ダッシュボードで時間が かかっている処理を見 つける
DROBEでの改善の流れ 1. チームで APMを眺める会 2. スプリント プランニング 3. コード修正 4.
リリース 優先度を相談してアサイン
DROBEでの改善の流れ 1. チームで APMを眺める会 2. スプリント プランニング 3. コード修正 4.
リリース 詳細に確認して修正
DROBEでの改善の流れ 1. チームで APMを眺める会 2. スプリント プランニング 3. コード修正 4.
リリース deploy
DROBEでの改善の流れ 1. チームで APMを眺める会 2. スプリント プランニング 3. コード修正 4.
リリース 結果を確認しつつ新しい課 題がないかチェック
DROBEでの改善結果 4ヶ月前、計測を始めた時(全 APIの平均)
DROBEでの改善結果 4ヶ月前、計測を始めた時(全 APIの平均) 現在(全APIの平均) 2倍以上早くなった!!
まとめ • Laravel で開発してるとどうしても低パフォーマンスなAPIをリリースしてしま うことは避けられない • ただし、APMを使うことで、低パフォーマンスなAPIの存在の確認や問題の 特定が容易に行える • 問題さえわかれば修正自体も容易(なことが多い)
• DatadogAPM、導入簡単で効果大なのでまずは入れてみましょう!
ご清聴ありがとうございました
We are hiring !! 少しでもご興味ある方 お気軽にご連絡ください! 採用情報 https://info.drobe.co.jp/jobs エンジニアリング資料 https://info.drobe.co.jp/engineering