Laravel Pulse
はじめに
Laravel Pulse は、アプリケーションのパフォーマンスや使用状況に関する一目でわかる洞察を提供します。Pulseを使用すると、遅いジョブやエンドポイントなどのボトルネックを特定したり、最もアクティブなユーザーを見つけたりすることができます。
個々のイベントの詳細なデバッグには、Laravel Telescope をご覧ください。
インストール
Pulseの第一パーティのストレージ実装は現在、MySQL、MariaDB、またはPostgreSQLデータベースが必要です。異なるデータベースエンジンを使用している場合は、Pulseデータ用に別個のMySQL、MariaDB、またはPostgreSQLデータベースが必要です。
Composerパッケージマネージャを使用してPulse をインストールできます:
composer require laravel/pulse
次に、vendor:publish
Artisanコマンドを使用してPulseの設定とマイグレーションファイルを公開する必要があります:
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
最後に、Pulseのデータを保存するために必要なテーブルを作成するためにmigrate
コマンドを実行する必要があります:
php artisan migrate
Pulseのデータベースマイグレーションが完了したら、/pulse
ルート経由でPulseダッシュボードにアクセスできます。
アプリケーションの主要データベースにPulseデータを保存したくない場合は、専用のデータベース接続を指定 することができます。
設定
Pulseの多くの設定オプションは環境変数を使用して制御できます。利用可能なオプションを確認したり、新しいレコーダーを登録したり、高度なオプションを構成したりするには、config/pulse.php
設定ファイルを公開する必要があります:
php artisan vendor:publish --tag=pulse-config
ダッシュボード
認証
Pulseダッシュボードは /pulse
ルート経由でアクセスできます。デフォルトでは、このダッシュボードには local
環境でのみアクセスできますので、本番環境での認証を構成するには、'viewPulse'
認証ゲートをカスタマイズする必要があります。これは、アプリケーションの app/Providers/AppServiceProvider.php
ファイル内で行うことができます:
use App\Models\User;
use Illuminate\Support\Facades\Gate;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Gate::define('viewPulse', function (User $user) {
return $user->isAdmin();
});
// ...
}
カスタマイズ
Pulseダッシュボードのカードとレイアウトは、ダッシュボードビューを公開することで構成できます。ダッシュボードビューは resources/views/vendor/pulse/dashboard.blade.php
に公開されます:
php artisan vendor:publish --tag=pulse-dashboard
ダッシュボードは Livewire で動作し、JavaScriptアセットを再構築する必要なく、カードとレイアウトをカスタマイズできます。
このファイルでは、<x-pulse>
コンポーネントがダッシュボードをレンダリングし、カードのためのグリッドレイアウトを提供します。ダッシュボードを画面全体に広げたい場合は、コンポーネントに full-width
プロパティを指定できます:
<x-pulse full-width>
...
</x-pulse>
デフォルトでは、<x-pulse>
コンポーネントは12列のグリッドを作成しますが、cols
プロパティを使用してこれをカスタマイズできます:
<x-pulse cols="16">
...
</x-pulse>
各カードは、スペースと配置を制御するための cols
および rows
プロパティを受け入れます:
<livewire:pulse.usage cols="4" rows="2" />
ほとんどのカードは、スクロールせずにフルカードを表示するための expand
プロパティも受け入れます:
<livewire:pulse.slow-queries expand />
ユーザーの解決
ユーザーに関する情報を表示するカード(例:アプリケーション使用状況カード)では、PulseはユーザーのIDのみを記録します。ダッシュボードをレンダリングする際、Pulseはデフォルトの Authenticatable
モデルから name
と email
フィールドを解決し、Gravatarウェブサービスを使用してアバターを表示します。
アプリケーションの App\Providers\AppServiceProvider
クラス内で Pulse::user
メソッドを呼び出すことで、フィールドやアバターをカスタマイズすることができます。
user
メソッドは、name
、extra
、avatar
情報を含む配列を返すべき Authenticatable
モデルを受け取るクロージャを受け入れます:
use Laravel\Pulse\Facades\Pulse;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Pulse::user(fn ($user) => [
'name' => $user->name,
'extra' => $user->email,
'avatar' => $user->avatar_url,
]);
// ...
}
認証されたユーザーの取得方法を完全にカスタマイズするには、Laravel\Pulse\Contracts\ResolvesUsers
コントラクトを実装し、Laravel の サービスコンテナ にバインドしてください。
カード
サーバー
<livewire:pulse.servers />
カードは、pulse:check
コマンドを実行しているすべてのサーバーのシステムリソース使用状況を表示します。システムリソースのレポートに関する詳細は、servers recorder のドキュメントを参照してください。
インフラストラクチャ内のサーバーを置き換える場合、非アクティブなサーバーを一定期間後に Pulse ダッシュボードから削除したい場合があります。これは、ignore-after
プロパティを使用して行うことができます。このプロパティは、非アクティブなサーバーを Pulse ダッシュボードから削除する秒数を受け入れます。または、1 hour
や 3 days and 1 hour
などの相対時間形式の文字列を指定することもできます:
<livewire:pulse.servers ignore-after="3 hours" />
ア プリケーションの使用状況
<livewire:pulse.usage />
カードは、アプリケーションにリクエストを送信し、ジョブをディスパッチし、遅いリクエストを経験している上位 10 ユーザーを表示します。
画面上ですべての使用状況メトリクスを表示したい場合は、カードを複数回含め、type
属性を指定することができます:
<livewire:pulse.usage type="requests" />
<livewire:pulse.usage type="slow_requests" />
<livewire:pulse.usage type="jobs" />
Pulse がユーザー情報を取得して表示する方法をカスタマイズする方法について学ぶには、ユーザーの解決 のドキュメントを参照してください。
アプリケーションが多くのリクエストを受信したり、多くのジョブをディスパッチする場合は、サンプリング を有効にすることを検討してください。詳細については、user requests recorder、user jobs recorder、slow jobs recorder のドキュメントを参照してください。
例外
<livewire:pulse.exceptions />
カードは、アプリケーションで発生している例外の頻度と最近の状況を表示します。デフォルトで は、例外は例外クラスと発生した場所に基づいてグループ化されます。詳細については、例外レコーダー のドキュメントを参照してください。
キュー
<livewire:pulse.queues />
カードは、アプリケーションのキューのスループットを表示します。これには、キューに入れられたジョブの数、処理中のジョブ、処理されたジョブ、リリースされたジョブ、失敗したジョブが含まれます。詳細については、キューレコーダー のドキュメントを参照してください。
遅いリクエスト
<livewire:pulse.slow-requests />
カードは、設定された閾値を超えるアプリケーションへの着信リクエストを表示します。デフォルトでは、閾値は 1,000ms です。詳細については、遅いリクエストレコーダー のドキュメントを参照してください。
遅いジョブ
<livewire:pulse.slow-jobs />
カードは、設定 された閾値を超えるアプリケーション内のジョブを表示します。デフォルトでは、閾値は 1,000ms です。詳細については、遅いジョブレコーダー のドキュメントを参照してください。
遅いクエリ
<livewire:pulse.slow-queries />
カードは、設定された閾値を超えるアプリケーション内のデータベースクエリを表示します。デフォルトでは、閾値は 1,000ms です。
デフォルトでは、遅いクエリは SQL クエリ(バインディングなし)と発生した場所に基づいてグループ化されますが、SQL クエリのみをグループ化する場合は、場所をキャプチャしないように選択することができます。
非常に大きな SQL クエリによるレンダリングパフォーマンスの問題が発生した場合は、without-highlighting
プロパティを追加してハイライトを無効にすることができます:
<livewire:pulse.slow-queries without-highlighting />
詳細については、遅いクエリレコーダー のドキュメントを参照してください。
遅い送信リクエスト
<livewire:pulse.slow-outgoing-requests />
カードは、デフォルトで 1,000ms を超える Laravel の HTTP クライアント を使用して行われた送信リクエストを表示します。
デフォルトでは、エントリは完全なURLでグループ化されます。ただし、正規表現を使用して出力リクエストを正規化またはグループ化することができます。詳細については、遅い出力リクエストレコーダーのドキュメントを参照してください。
キャッシュ
<livewire:pulse.cache />
カードは、アプリケーションのキャッシュヒットとミスの統計を表示します。グローバルおよび個々のキーに対して。
デフォルトでは、エントリはキーでグループ化されます。ただし、類似のキーを正規表現を使用して正規化またはグループ化することができます。詳細については、キャッシュインタラクションレコーダーのドキュメントを参照してください。
エントリのキャプチャ
ほとんどのPulseレコーダーは、Laravelによってディスパッチされるフレームワークイベントに基づいてエントリを自動的にキャプチャします。ただし、サーバーレコーダーや一部のサードパーティーカードは定期的に情報をポーリングする必要があります。これらのカードを使用するには、すべての個々のアプリケーションサーバーで pulse:check
デーモンを実行する必要があります:
php artisan pulse:check
pulse:check
プロセスをバックグラウンドで永続的に実行するためには、コマンドが停止しないようにするために Supervisor などのプロセスモニターを使用する必要があります。
pulse:check
コマンドは長寿命のプロセスであるため、コードベースの変更を再起動せずに見逃すことはできません。アプリケーションの展開プロセス中に pulse:restart
コマンドを呼び出すことで、コマンドを優雅に再起動する必要があります:
php artisan pulse:restart
Pulse は再起動シグナルを保存するために cache を使用するため、この機能を使用する前にアプリケーションに適切に構成されたキャッシュドライバがあることを確認する必要があります。
レコーダー
レコーダーは、アプリケーションからエントリをキャプチャして Pulse データベースに記録する責任があります。レコーダーは、Pulse構成ファイルの recorders
セクションに登録および構成されます。
キャッシュインタラクション
CacheInteractions
レコーダーは、アプリケーション内で発生する cache ヒットとミスに関する情報を収集し、Cache カードに表示します。
サンプリング および無視されるキーパターンを任意で調整できます。
また、類似したキーを単一のエントリとしてグループ化するようにキーグルーピングを構成することもできます。たとえば、同じタイプの情報をキャッシュするキーから一意の ID を削除したい場合があります。グループは、キーの一部を "検索して置換" するための正規表現を使用して構成されます。構成ファイルには例が含まれています:
Recorders\CacheInteractions::class => [
// ...
'groups' => [
// '/:\d+/' => ':*',
],
],
最初に一致するパターンが使用されます。パターンが一致しない場合、キーはそのままキャプチャされます。
例外
Exceptions
レコーダーは、アプリケーション内で発生する報告可能な例外に関する情報を収集し、Exceptions カードに表示します。
サンプリング および無視される例外パターンを任意で調整できます。また、例外の発生元をキャプチャするかどうかを構成することもできます。キャプチャされた場所は Pulse ダッシュボードに表示され、例外の発生元を特定するのに役立ちます。ただし、同じ例外が複数の場所で発生する場合は、ユニークな場所ごとに複数回表示されます。