domnikl/statsd
PHP client library for StatsD, providing a simple API to send counters, timers, gauges and other metrics. Supports batching and multiple transports (UDP/TCP) to help instrument applications and report performance and usage data to StatsD-compatible servers.
domnikl/statsd package is a lightweight PHP client for StatsD, a popular metrics aggregation system. It fits well in architectures requiring real-time monitoring, performance tracking, or observability (e.g., microservices, APIs, or high-traffic applications).job:failed).DB::listen() to emit query metrics.Mockery or PHPUnit).| Risk Area | Mitigation Strategy |
|---|---|
| Network Latency | UDP is fast but unreliable; consider TCP fallback or local buffering for critical metrics. |
| StatsD Backend Health | Implement circuit breakers or local caching if the StatsD server is down. |
| Metric Cardinality | Avoid high-cardinality tags (e.g., user_id) to prevent StatsD backend overload. |
| Laravel Version Support | Test against Laravel 8+ (PHP 8.0+) for compatibility with newer features. |
| Performance Overhead | Benchmark metric collection impact; batch metrics where possible. |
service:api, environment:prod—impacts StatsD configuration.)laravel.http.response_time vs. api.response_time.)monolog handlers with StatsD.dispatch() hooks.response_time, status_code).DB::listen().prometheus/statsd_exporter), Datadog, Graphite, or custom backends.prometheus/client_php) for direct scraping.composer require domnikl/statsd./health) to emit a test metric.payment.processed, user.signup).service:checkout, environment:staging).| Component | Compatibility Notes |
|---|---|
| PHP 8.0+ | Tested; uses modern PHP features (e.g., named arguments). |
| Laravel 8+ | Works with Laravel’s service container and events. |
| StatsD v3+ | Supports modern StatsD protocols (UDP/TCP). |
| Monolog | Can replace or extend existing log handlers. |
| Queue Workers | Works with Laravel Queues (Supervisor, Redis, etc.). |
| Database | Requires manual instrumentation (no built-in Eloquent hooks). |
$this->app->singleton(Statsd::class, function () {
return new Statsd('statsd.example.com', 8125);
});
class StatsdMiddleware
{
public function handle($request, Closure $next)
{
$start = microtime(true);
$response = $next($request);
$duration = (microtime(true) - $start) * 1000; // ms
app(Statsd::class)->timing('laravel.http.response_time', $duration);
return $response;
}
}
use Domnikl\Statsd\Statsd;
class ProcessPayment implements ShouldQueue
{
public function handle()
{
Statsd::increment('payment.attempted');
// ... logic ...
Statsd::timing('payment.processing_time', $duration);
}
}
DB::listen(function ($query) {
Statsd::timing('db.query_time', $query->time);
});
.env.api.response_time vs. http.response_time).tcpdump or StatsD’s debug mode (-d flag).statsd --help).Statsd::debug() or wrap calls in try-catch.8125.user_id) to prevent backend overload.statsd.gauge('memory.usage', 1024)) sparingly.How can I help you explore Laravel packages today?