cosmastech/statsd-client-adapter

A StatsD client adapter for use with DataDog or PHPLeague's statsd clients

0.4.0 2024-07-21 13:21 UTC

README

Latest Stable Version Total Downloads License PHP Version Require

StatsD Client Adapter

This package was originally designed to solve the problem of:

  • I use DataDog on production, but
  • I don't want to push stats to DataDog on my dev or test environments

Where might I want to push those precious stats? Maybe to a log? Maybe to a locally running StatsD server? What if in my unit tests, I want to confirm that logs are being pushed, but not go through the hassle of an integration test set up that configures the StatsD server?

While PHP League's statsd package is great, it doesn't allow for sending DataDog specific stats (such as histogram or distribution). Nor does the DataDog client allow for pushing to another StatsD implementation easily.

The aim here is to allow for a single interface that can wrap around both, and be easily extended for different implementations.

If you would like to use this library in Laravel, check out laravel-statsd-adapter.

Adapters

InMemoryClientAdapter

This adapter simply records your stats in an object in memory. This is best served as a way to verify stats are recorded in your unit tests.

See examples/in_memory.php for how you might implement this.

DataDogStatsDClientAdapter

This is a wrapper around DataDog's php-datadogstatsd client.

If you wish to use this adapter, please make sure you install the php-datadogstatsd client.

composer require datadog/php-datadogstatsd

For specifics on their configuration, see the official DogStatsD documentation.

See examples/datadog.php for how you might implement this.

DatadogLoggingClient

Envisioned as a client for local development, this adapter writes to a class which implements the psr-logger interface. You can find a list of packages that implement the interface on packagist. If you are using a framework like Symfony or Laravel, then you already have one of the most popular and reliable implementations installed: monolog/monolog.

For a local development setup, you could just write the stats to a log. This writes the format exactly as it would be sent to DataDog.

See examples/log_datadog.php for how you might implement this.

LeagueStatsDClientAdapter

You can also write to an arbitrary statsd server by leveraging PHP League's statsd package.

First ensure that the package has been installed.

composer require league/statsd

For information on how to configure Client, read their documentation.

Note the histogram() and distribution() methods are both no-op by default, as they are not available on statsd.

See examples/league.php for how you might implement this.

Gotchas

  1. Only increment/decrement on DataDog's implementation allow for including the sample rate. If you are using a sample rate with other calls, their sample rate will not be included as part of the stat.
  2. There are histogram() and distribution() methods on LeagueStatsDClientAdapter, but they will not be sent to statsd.

Testing

composer test