Setting Up APM — Application Performance Monitoring
APM (Application Performance Monitoring) tracks performance at code level: slow requests, database bottlenecks, function execution time, distributed traces across microservices.
What APM Provides
Traces — full request path: HTTP → router → controller → ORM → SQL → Redis → HTTP response. Each step has measured time. Slow SQL query is visible immediately without log analysis.
Profiling — flamegraph by functions: where CPU time goes.
SLO Metrics — apdex (share of requests faster than threshold), p50/p95/p99 latency, error rate.
OpenTelemetry: Standard for APM
OpenTelemetry — vendor-neutral standard. One SDK → data to any backend: Jaeger, Zipkin, Datadog, New Relic, Grafana Tempo.
// composer.json requires
// "open-telemetry/sdk": "^1.0"
// "open-telemetry/exporter-otlp": "^1.0"
// app/Providers/OpenTelemetryProvider.php
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\Exporter\Otlp\OtlpHttpTransport;
use OpenTelemetry\Exporter\Otlp\SpanExporter;
$transport = new OtlpHttpTransport(env('OTEL_EXPORTER_OTLP_ENDPOINT'));
$exporter = new SpanExporter($transport);
// Register tracer globally
Jaeger: Open Source APM
Docker Compose:
services:
jaeger:
image: jaegertracing/all-in-one:latest
ports:
- "6831:6831/udp" # Jaeger agent
- "16686:16686" # UI
Send traces from Laravel to Jaeger port 6831.
Timeline
Basic OpenTelemetry setup: 1-2 days. Distributed tracing across multiple services: 2-3 days.







