Collect numeric measurements with different instrument types.
Counters track totals, up-down counters track values that increase and decrease, histograms capture value distributions,
and gauges record point-in-time values.
UNIFIED DATA PROCESSING FRAMEWORK
composer require flow-php/etl ~0.32.0 Extracts
Read from various data sources.
Transforms
Shape and optimize for your needs.
Loads
Store and secure in one of many available data sinks.
Examples:
Description
Documentation
- Telemetry Library
- OTLP Bridge - Export telemetry data to OpenTelemetry Protocol backends
- PSR-18 Telemetry Bridge - HTTP client instrumentation for telemetry
- PSR-7 Telemetry Bridge - HTTP message telemetry formatting
- Monolog Telemetry Bridge - Integrate telemetry with Monolog logging
- Symfony HttpFoundation Telemetry - Telemetry events for Symfony HTTP requests
- Symfony Telemetry Bundle - Symfony bundle for telemetry integration
Code
<?php
declare(strict_types=1);
use Flow\Telemetry\Provider\Clock\SystemClock;
use function Flow\Telemetry\DSL\{
console_metric_exporter,
memory_metric_processor,
meter_provider,
resource_detector,
telemetry
};
use function Flow\ETL\DSL\clock;
require __DIR__ . '/vendor/autoload.php';
$telemetry = telemetry(
resource_detector()->detect(),
null,
meter_provider(
memory_metric_processor(console_metric_exporter(colors: false)),
clock(),
),
)->registerShutdownFunction();
$meter = $telemetry->meter('order-service');
$requestCounter = $meter->createCounter('http.requests', 'requests', 'Total HTTP requests');
$requestCounter->add(1, ['method' => 'GET', 'path' => '/api/users']);
$requestCounter->add(1, ['method' => 'POST', 'path' => '/api/orders']);
$durationHistogram = $meter->createHistogram('http.duration', 'ms', 'Request duration');
$durationHistogram->record(45.2, ['method' => 'GET', 'status' => 200]);
$durationHistogram->record(123.8, ['method' => 'POST', 'status' => 201]);
$queueSize = $meter->createUpDownCounter('queue.size', 'items', 'Queue size');
$queueSize->add(10);
$queueSize->add(-3);
$memoryGauge = $meter->createGauge('process.memory', 'bytes', 'Memory usage');
$memoryGauge->record(memory_get_usage());