Ichizokuは日本唯一のSentry公認販売業者です。
日本語のドキュメント、動画、サポート窓口で日本のお客様のSentry活用を支援します。

そのままで動くLaravel パフォーマンスモニタリングも同様

Article by: Will McMullen

 

Laravel アプリを初めて立ち上げたときのことを覚えていますか?ルーティング、認証、ORM、キューがすべてスムーズにつながり、ほとんど手間がかからなくなったはずです。これこそ、Laravel が「最初から生産的に感じられる」理由のひとつです。

しかし、アプリの動作が遅くなり始めたとき、Eloquent クエリが重くなる、ジョブがいつまでも終わらない、キャッシュミスが増えていく。その原因を見つけるのは簡単ではありません。Laravel には多くのツールが備わっていますが、それらをつなぎ合わせて全体像を把握するのは、これまで開発者の手に委ねられていました。

Sentry の新機能「Laravel Insights」を使えば、アプリ内部で何が起きているのかを、より明確に把握できます。エラー、遅いジョブ、データベースクエリ、キャッシュの利用状況、ルートごとのパフォーマンスなどを可視化し、既に追跡している課題と関連づけて表示します。さらに、それらがユーザー体験に実際どのような影響を与えているのかも確認できます。

すべてがつながっています。特定のルートから発生した遅いジョブをたどり、その原因となったクエリを特定し、キャッシュが改善に寄与したのか、それとも逆効果だったのかまで把握できるのです。

  

Laravel を先回りして最適化

これは新しい製品でも、新しいタブでもありません。Laravel アプリで基本的な Sentry のインストルメンテーション(エラーおよびトレーシング)が設定されていれば、Insights → Backend の中で Laravel プロジェクトを開くだけで次の情報を確認できます。

  • Recommended Issues:本番環境で新たに発生した、または深刻化している課題を表示

  • Requests & Duration:リリースごとの負荷の変化やアプリのパフォーマンスを追跡し、リグレッションが発生していないか確認

  • Jobs:バックエンドジョブの実行時間や失敗率の傾向を監視し、SendWelcomeEmail::dispatch($user); が常に時間通りに動作しているか確認

  • Queries:コストの高いデータベース呼び出しを特定し、トランザクションを最適化

  • Caches:キャッシュミスが多発している箇所を特定し、無効化の問題を修正

  • Routes:リクエスト数、ユーザー数、総処理時間、pXX 指標ごとにソートし、早期にパフォーマンス低下を検知

 

一人で開発している場合でも、スタートアップのスケールアップ段階にあっても、これらのインサイトによりアプリの挙動を簡単に把握でき、ユーザーが気づく前に問題を修正できるようになります。

 

 

さらに深く掘り下げ、アラートを作成

たとえばキャッシュミスの急増、データベース時間を食い尽くす暴走クエリ、異常に滞留しているキューなど、もし何かおかしな兆候を見つけたら、クリックひとつで詳細を掘り下げることができます。

Laravel Insights の各ウィジェットには Open in Explore(Exploreで開く)ボタンがあり、ドロップダウンをクリックすると Sentry のクエリビルダーに直接移動できます。そこで次のようなことが可能です。

  • 特定のサービス、ルート、ユーザー、または環境に絞り込んでクエリをカスタマイズ

  • ブラウザの種類、ユーザーアカウントの状態、リクエスト元など、Sentry に送信している任意のタグ(デフォルト・カスタム問わず)でグループ化

  • 高レベルなグラフでは見えないパターンを発見

  • 任意の条件に基づいてアラートを作成(例:プレミアムユーザーによる遅いクエリ、デプロイ地域ごとに発生するジョブ失敗など)

 

これにより、顧客からの苦情を受けてから対応するのではなく、あらかじめ正しいチームにアラートを振り分けたり、閾値を超えた際に Slack や Discord へ自動通知を送信したりと、先回りした対応が可能になります。

 

高速で柔軟。その哲学は Laravel と同じで、しっかりとした出発点を提供しつつ、ツールに縛られることなく、望むだけ深く掘り下げられるようにすることです。

 

 

Laravel スタックを超えて

「自分のアプリは Laravel だけじゃない場合は?」

そんな声が聞こえてきそうです。Laravel はバックエンドの煩雑な処理を効率化するために広く使われていますが、多くのアプリはそれだけでは終わりません。


フロントエンドが Vanilla JS、React、Next、Inertia、あるいは昔ながらの Blade テンプレートで構築されていても、Sentry がすべてをつなぎます。つまり、異なる監視ツールを行き来したり、「フロントの不具合がバックエンドのジョブ失敗を引き起こしたのか?」と推測したりする必要はもうありません。

フルスタック分散トレーシングを使えば、次のようなことが可能になります。

  • ブラウザでのクリックから、それによって発生した正確なデータベースクエリやキャッシュまで、ユーザーセッション全体を追跡

  • Vue の遅い API レスポンスを Laravel 内の失敗したジョブと関連づけ、原因となったコード行を特定

  • フロントエンドエラー、ページ読み込みの遅延、レイアウトシフトが最も多いルートを特定

 

すでに Sentry をフロントエンドとバックエンドの両方に導入している場合は、基本的なトレーシング設定を行うだけで、これらの関連付けが自動で行われます。
そのため、パフォーマンスが低下したときに「原因はフロントか、バックエンドか」と悩む必要はなく、すぐに分かるようになります。

 

 

Laravel によくある課題を解決

たとえば、チェックアウトジョブ用のキューがあり、レシートの送信・トランザクションの記録・支払いフローの実行を処理しているとします。すべて順調に動いていたのに、ある日突然、ジョブの実行時間が急増し、それと同時に売上が落ち始めた。そんな状況を想像してください。

もう推測に頼る必要はありません。

Laravel Insights の Jobs パネルを開き、「Open in Explore」をクリックしてクエリをカスタマイズします。

  • span.op = queue
  • span.description = checkout.process
  • Group by: payment_provider

 

これで、プロバイダーごとのジョブ実行時間が一目でわかります。すると、FastPay 経由のジョブだけが他のプロバイダーの 3 倍も時間がかかっていることに気づくでしょう。そこから次のような対応が取れます。

  • `payment_provider:FastPay` タグ付きの `checkout.process` ジョブが 2000ms を超えた場合にアラートを作成
    そのアラートをチームの Slack チャンネルや課題管理ツールに自動送信
  • カスタムダッシュボードにこのビューを追加し、時間経過とともに監視

 

追加のロギングも不要。新しいダッシュボードを一から構築する必要もありません。わずか数クリックで、「なんかおかしい」から「原因はこれだ」までたどり着くことができます。

注意:これらの属性(例:`payment_provider` など)を利用するには、コード内で span 属性として追加しておく必要があります。

 

 

 

すぐに使えるフレームワークのための、すぐに使える可視化

これは、Sentry が掲げるより大きな使命である「テレメトリーの計測、理解、そして活用を容易にすること」に合致しています。本番環境でアプリの不調の原因を突き止めるために、5つのダッシュボードやホワイトボード、そして勘に頼る必要があってはなりません。

Laravel Insights は、あなたがそのアプリを構築するために書いたコードと同様に、アプリの挙動を透明かつ理解しやすくするための、さらなる一歩です。

Laravel Insights を実際に体験してみませんか?Discord に参加して他の開発者と情報交換をしたり、Laravel SDK エンジニアへの Q&A に参加することができます。また、ドキュメントを参照してセットアップを始めることも、無料トライアルを利用してユーザーが気づく前にパフォーマンスの問題を検出することも可能です。

 

 

Original Page: Laravel just works. Now your performance monitoring does too.

 




IchizokuはSentryと提携し、日本でSentry製品の導入支援、テクニカルサポート、ベストプラクティスの共有を行なっています。Ichizokuが提供するSentryの日本語サイトについてはこちらをご覧ください。またご導入についての相談はこちらのフォームからお気軽にお問い合わせください。

 

シェアする

Recent Posts