finatto/telemetry

Wide-event telemetry dispatcher for Laravel 13 applications.

Maintainers

Package info

github.com/finattogroup/laravel-telemetry

pkg:composer/finatto/telemetry

Statistics

Installs: 8

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-master 2026-05-06 00:15 UTC

This package is not auto-updated.

Last update: 2026-05-06 00:16:45 UTC


README

Wide-event telemetry para aplicações Laravel. Captura um evento por request via middleware, despacha para uma fila Redis dedicada, e um worker envia em batch para a API de logging.

  • Um wide event por request. Sem Log::info() espalhados.
  • Contexto, não strings. Campos nomeados.
  • Tail sampling. 5xx e exceptions sempre. Sucesso por amostragem.
  • Falha silenciosa. Telemetria nunca derruba a aplicação.

Instalação

composer require finatto/telemetry
php artisan vendor:publish --tag=telemetry-config

Auto-discovery registra o TelemetryServiceProvider e a Facade Telemetry automaticamente.

Configuração mínima (.env)

TELEMETRY_SERVICE_NAME=finatto-admin
TELEMETRY_API_URL=http://telemetry-api:8080
TELEMETRY_API_KEY=sua-api-key
TELEMETRY_SAMPLE_RATE=0.1

Registrar middleware (bootstrap/app.php)

use Finatto\Telemetry\WideEventContext;
use Finatto\Telemetry\WideEventMiddleware;

->withMiddleware(function (Middleware $middleware): void {
    $middleware->api(append: [WideEventMiddleware::class]);
    $middleware->web(append: [WideEventMiddleware::class]);
})
->withExceptions(function (Exceptions $exceptions): void {
    $exceptions->report(function (\Throwable $e): void {
        app(WideEventContext::class)->markException($e);
    });
})

Queue connection dedicada (config/queue.php)

'connections' => [
    'telemetry-redis' => [
        'driver'      => 'redis',
        'connection'  => 'default',
        'queue'       => env('TELEMETRY_QUEUE_NAME', 'telemetry'),
        'retry_after' => 30,
    ],
],

E rode um worker isolado:

php artisan queue:work telemetry-redis --queue=telemetry

Adicionando contexto de negócio

Em qualquer ponto do ciclo da request:

use Finatto\Telemetry\Facades\Telemetry;

Telemetry::enrich([
    'tenant_id' => $tenant->id,
    'module'    => 'fleet',
    'plan'      => $tenant->plan,
]);

Os campos são mesclados recursivamente no payload e despachados no terminate() do middleware.

Exemplo de evento gerado

{
  "event_id": "01925f3a-7c2d-...",
  "service": "finatto-admin",
  "environment": "production",
  "version": "1.4.2",
  "timestamp": "2026-05-04T14:22:31.847291Z",
  "payload": {
    "http":     { "method": "POST", "path": "/api/modules", "status_code": 201, "duration_ms": 138 },
    "auth":     { "user_id": "usr_456" },
    "business": { "tenant_id": "ten_789", "module": "fleet", "plan": "pro" }
  }
}

Sanitização

PayloadSanitizer redige automaticamente chaves contendo qualquer substring de: password, secret, token, authorization, credit_card, api_key (case-insensitive, recursivo).

Testes

composer install
vendor/bin/pest
vendor/bin/phpstan analyse

Licença

MIT