Personnaliser les métriques dans Laravel Pulse

Pour créer des tableaux de bord de surveillance sur mesure avec Laravel Pulse, il est essenteil de comprendre son architecture extensible. Ce guide explique comment développer des composants personnalisés pour collecter et visualiser des données spécifiques à votre application.

Structure fondamentale de Laravel Pulse

Le système repose sur quatre concepts principaux :

  • Cartes : Composants Livewire qui rendent les données sur le tableau de bord.
  • Enregistreurs : Classes qui écoutent les événements ou collectent les données de l'application.
  • Stockage : Mécanisme de persistence pour les données de monitoring.
  • Entrées : Les points d'entrée individuels pour les données collectées.

Création d'une carte de métriques personnalisée

Une carte étend la classe de base Laravel\Pulse\Livewire\Card. La classe suivante définit une carte pour afficher une moyenne agrégée d'une métrique personnalisée.

<?php

namespace App\Cartes;

use Laravel\Pulse\Livewire\Card;
use Laravel\Pulse\Support\Css;

class CarteTempsReponse extends Card
{
    public int|string|null $colonnes = 6;
    public int|string|null $lignes = 4;
    public string $classe = Css::background();

    public function calculer(): mixed
    {
        return $this->extraireDonnees(
            type: 'temps_reponse',
            aggregation: 'moyenne',
            limite: 15
        );
    }

    protected function extraireDonnees(string $type, string $aggregation, int $limite)
    {
        // Logique pour agréger et retourner les données
        return pulse()->aggregate($type, $aggregation, $limite);
    }

    public function render()
    {
        return view('cartes.temps-reponse', [
            'valeurs' => $this->calculer(),
        ]);
    }
}

Développer un enregistreur de données

Un enregistreur capture les événements système. L'exemple ci-dessous enregistre la durée des requêtes HTTP.

<?php

namespace App\Enregistreurs;

use Illuminate\Support\Facades\Route;
use Laravel\Pulse\Concerns\Seuils;
use Laravel\Pulse\Concerns\Regulation;

class EnregistreurRequete
{
    use Seuils, Regulation;

    public function enregistrer(): void
    {
        app()->terminating(function () {
            $this->capturerTempsRequete();
        });
    }

    protected function capturerTempsRequete(): void
    {
        $duree = (microtime(true) - LARAVEL_START) * 1000;
        
        pulse()->record('temps_reponse', [
            'valeur' => $duree,
            'requete' => Route::currentRouteName() ?? 'inconnue',
        ]);
    }
}

Configuration et anregistrement

Les composants personnalisés doivent être déclarés dans un service provider.

// Dans une classe App\Providers\PulseServiceProvider

use App\Cartes\CarteTempsReponse;
use App\Enregistreurs\EnregistreurRequete;
use Laravel\Pulse\Facades\Pulse;

public function boot(): void
{
    Pulse::carte(CarteTempsReponse::class)
        ->label('Temps de réponse')
        ->colonnes(8)
        ->lignes(5);

    Pulse::utilise(new EnregistreurRequete);
}

Optimisations et bonnes pratiques

Pour les requêtes coûteuses, utilisez le système de cache intégré :

use Laravel\Pulse\Concerns\RequetesEnCache;

class CarteTempsReponse extends Card
{
    use RequetesEnCache;

    public function calculer(): mixed
    {
        return $this->mettreEnCache(
            cle: 'donnees-temps-reponse',
            fonction: fn () => $this->extraireDonnees(...),
            duree: 120
        );
    }
}

Ajoutez des seuils dans le fichier de configuration config/pulse.php pour déclencher des alertes.

return [
    // ...autres configurations
    'seuils' => [
        'temps_reponse' => [
            'moyenne' => 500, // ms
            'p95' => 1000,
        ],
    ],
];

Pour tester, lancez le worker Pulse et vérifiez l'apparition de votre carte sur le tableau de bord après avoir généré le trafic correspondant.

Étiquettes: Laravel Pulse Livewire Métriques Monitoring

Publié le 4 juillet à 03h47