tutu-ru/lib-metrics

Metrics

3.0.2 2019-08-09 11:14 UTC

README

Версии 3.0.* мертвы - используйте 2ю мажорную версию!

Отправка метрик в statsd_exporter

use TutuRu\Metrics\StatsdExporterClientFactory;

$statsdExporterClient = StatsdExporterClientFactory::create($config, $psrLogger);

$statsdExporterClient->count('counter', 10);
$statsdExporterClient->gauge('gauge', 50);

// в этот момент происходит реальная отправка данных
$statsdExporterClient->save();

MetricCollector

Объект позволяющей инкапсулировать логику замеров в одном месте.

use TutuRu\Metrics\StatsdExporterClientFactory;
use TutuRu\Metrics\MetricCollector;

$statsdExporterClient = StatsdExporterClientFactory::create($config, $psrLogger);

class MyDataCollector extends MetricCollector
{
    protected function getTimersMetricName(): string
    {
        return 'my_metrics';
    }


    protected function getTimersMetricTags(): array
    {
        return ['env' => 'test'];
    }


    protected function onSave(): void
    {
        $this->increment('additional_data');
    }
}

$collector = new MyDataCollector();
$collector->startTiming();
// code
$collector->endTiming();
$collector->sendToStatsdExporter($statsdExporterClient);

$statsdExporterClient->save();

Передача клиента другим объектам

Для того, чтобы клиент декларировал возможность передать ему stats_exporter клиент нужен интерфейс MetricAwareInterface.

Пример:

use TutuRu\Metrics\StatsdExporterClientFactory;
use TutuRu\Metrics\StatsdExporterAwareInterface;
use TutuRu\Metrics\StatsdExporterAwareTrait;

$statsdExporterClient = StatsdExporterClientFactory::create($config, $psrLogger);

class MyObject implements StatsdExporterAwareInterface
{
    use StatsdExporterAwareTrait;

    public function doSomething()
    {
        if (!is_null($this->statsdExporterClient)) {
            $this->statsdExporterClient->summary('summary_metric', 500);
        }
    }
}

$object = new MyObject();
$object->setStatsdExporterClient($statsdExporterClient);
$object->doSomething();

$statsdExporterClient->save();

Использование в тестах других библиотек

use PHPUnit\Framework\TestCase;
use TutuRu\Tests\Metrics\MemoryStatsdExporter\MemoryStatsdExporterClient;

class MyTest extends TestCase
{
    public function testMetrics()
    {
        $statsdExporterClient = new MemoryStatsdExporterClient($appName);

        $testObject = new TestObject();
        $testObject->setStatsdExporterClient($statsdExporterClient);
        $testObject->someCode();

        $statsdExporterClient->save();

        $metrics = $statsdExporterClient->getExportedMetrics();

        $firstMetric = current($metrics);
        $firstMetric->getName();
        $firstMetric->getUnit();
        $firstMetric->getValue();
        $firstMetric->getTags();
    }
}