Elastic APM für Shopware: Performance-Monitoring richtig gemacht
So überwachen Sie Ihren Shopware 6 Shop mit Elastic APM (Application Performance Monitoring), finden Performance-Bottlenecks und verkürzen Ladezeiten messbar - mit Setup-Anleitungen und Praxisbeispielen aus laufenden Projekten.
Ihr Shopware-Shop ist live, die Verkäufe laufen, doch plötzlich häufen sich Beschwerden: „Der Checkout ist so langsam!", „Die Produktsuche hängt sich auf!". Ohne Monitoring fehlen Ihnen die Antworten: Welche Seiten sind betroffen? Liegt es am PHP-Code, der Datenbank oder an externen APIs? Diese Fragen beantwortet Elastic APM (Application Performance Monitoring). Das Tool ist Teil des Elastic Stack (früher ELK-Stack) und misst Ihre Shopware-Anwendung durchgehend: Backend-Transaktionen ebenso wie das Rendering im Browser. Bei CODING 9 gehört dieses Monitoring standardmäßig zu Shopware-Projekten. Dieser Guide zeigt Installation, Konfiguration und Auswertung, damit Sie Performance-Probleme sehen, bevor Kunden sich melden.
Was ist Elastic APM und warum für Shopware?
Elastic APM ist ein Open-Source-Tool für Application Performance Monitoring und Distributed Tracing. Als Performance-Monitoring-System misst es Ihre Anwendungen im laufenden Betrieb in Echtzeit und erfasst:
Backend-Transaktionen: eingehende HTTP-Requests, Database Queries, API-Calls
Frontend-Performance (RUM): Page Load, Core Web Vitals, JavaScript-Fehler
Fehler & Exceptions: Stack Traces, Error Rates, Impact-Analyse
Service Maps: Visualisierung der Abhängigkeiten zwischen Shopware, MySQL, Redis und Payment-Gateway
Die Messung übernehmen Agents. Sie hängen sich in die Laufzeit der Anwendung ein und instrumentieren eingehende Requests automatisch: Jeder HTTP-Request wird zu einer Transaktion, jede Database Query darunter zu einem Span. Was ein Agent von sich aus erkennt, ist agent-spezifisch. Der PHP-Agent kennt Symfony, Doctrine und Guzzle, der JavaScript-Agent kennt Navigation Timing und Fetch-Aufrufe im Browser. Eigener Code kommt über manuelle Spans dazu, dazu später mehr.
Warum sich das Tool speziell für Shopware 6 eignet
Native PHP-Integration: Elastic bietet einen offiziellen PHP-Agent, der Symfony/Shopware automatisch instrumentiert
Open Source & Self-Hosted: Volle Datenkontrolle (wichtig für DSGVO)
RUM für Storefront: Misst echte User-Erfahrung (nicht nur synthetische Tests)
Kosteneffizient: Free Tier für kleine Shops, ~€50-200/Monat für mittelgroße Shops (vs. €500+ bei New Relic/Datadog)
Setup Teil 1: Elastic APM Server installieren
Sie haben zwei Optionen: Self-Hosted oder Elastic Cloud.
Option 1: Self-Hosted (Docker Compose)
Ideal für volle Kontrolle und DSGVO-Compliance:
# docker-compose.yml
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ports:
- "9200:9200"
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
apm-server:
image: docker.elastic.co/apm/apm-server:8.11.0
ports:
- "8200:8200"
environment:
- output.elasticsearch.hosts=["elasticsearch:9200"]
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
volumes:
elasticsearch-data:docker compose up -d
# Kibana erreichbar unter: http://localhost:5601Option 2: Elastic Cloud (Managed)
Account erstellen auf cloud.elastic.co
Deployment erstellen (14-Tage Free Trial)
APM-Server aktivieren (unter "Integrations")
Secret Token & Server URL notieren
Setup Teil 2: PHP Agent für Shopware installieren
Der Elastic PHP Agent instrumentiert Ihre Shopware-Anwendung automatisch:
Schritt 1: Agent-Installation
# Download & Installation (Debian/Ubuntu)
curl -L -O https://github.com/elastic/apm-agent-php/releases/download/v1.10.0/apm-agent-php_1.10.0_all.deb
sudo dpkg -i apm-agent-php_1.10.0_all.deb
# PHP-Extension aktivieren
sudo phpenmod elastic_apm
# PHP-FPM neustarten
sudo systemctl restart php8.2-fpmSchritt 2: Konfiguration (.env)
Fügen Sie zu Ihrer Shopware .env hinzu:
# Elastic APM Configuration
ELASTIC_APM_SERVER_URL=http://localhost:8200
ELASTIC_APM_SECRET_TOKEN=your-secret-token
ELASTIC_APM_SERVICE_NAME=shopware-production
ELASTIC_APM_ENVIRONMENT=production
ELASTIC_APM_LOG_LEVEL=info
ELASTIC_APM_ENABLED=trueSchritt 3: Symfony Integration (optional aber empfohlen)
Für bessere Transaction-Namen und Custom Spans:
composer require elastic/apm-agent-php// config/packages/elastic_apm.yaml
elastic_apm:
app_name: '%env(ELASTIC_APM_SERVICE_NAME)%'
server_url: '%env(ELASTIC_APM_SERVER_URL)%'
secret_token: '%env(ELASTIC_APM_SECRET_TOKEN)%'
environment: '%env(ELASTIC_APM_ENVIRONMENT)%'
enabled: '%env(bool:ELASTIC_APM_ENABLED)%'Nach Deploy sehen Sie bereits erste Transaktionen in Kibana APM!
Setup Teil 3: RUM (Real User Monitoring) für Storefront
RUM trackt Frontend-Performance direkt im Browser Ihrer Kunden:
JavaScript-Agent einbinden
Erstellen Sie ein Shopware-Plugin oder nutzen Sie ein Theme-Override:
{# Resources/views/storefront/layout/meta.html.twig #}
{% sw_extends '@Storefront/storefront/layout/meta.html.twig' %}
{% block layout_head_javascript_tracking %}
{{ parent() }}
<script src="https://unpkg.com/@elastic/[email protected]/dist/bundles/elastic-apm-rum.umd.min.js"></script>
<script>
elasticApm.init({
serviceName: 'shopware-storefront',
serverUrl: '{{ elasticApmServerUrl }}',
environment: '{{ app.environment }}',
distributedTracingOrigins: ['{{ app.request.host }}'],
// Performance Budgets
breakdownMetrics: true,
// Privacy: Keine sensiblen Daten tracken
ignoreTransactions: ['/account/login', '/checkout/payment'],
// Sampling für hohen Traffic (20% der Sessions)
transactionSampleRate: 0.2
});
</script>
{% endblock %}Custom Tracking für E-Commerce-Events
// Custom Transaction für Checkout
const checkoutTransaction = elasticApm.startTransaction('Checkout Flow', 'user-interaction');
// Span für Payment Gateway
const paymentSpan = checkoutTransaction.startSpan('PayPal Payment', 'external');
// ... PayPal API Call
paymentSpan.end();
checkoutTransaction.end();
// Error Tracking
try {
await addToCart(productId);
} catch (error) {
elasticApm.captureError(error);
}Daten analysieren: Kibana APM Dashboard
Öffnen Sie in Kibana den Bereich APM. Die wichtigsten Views:
1. Services Overview
Zeigt alle Services (shopware-production, shopware-storefront, mysql, redis)
Metriken: Durchschnittliche Response Time, Throughput (Requests/Min), Error Rate
2. Transactions
Filtern Sie nach langsamen Endpoints:
Beispiel:
POST /checkout/confirmbraucht im Schnitt 2.3s, deutlich zu langsamDrill-Down: Zeigt Spans (Sub-Operationen) an:
SQL Query: 850ms (BOTTLENECK!)
PayPal API: 400ms
Email Versand: 200ms
3. Errors
Stack Traces für jede Exception
Gruppierung nach Error-Type
Beispiel: "PDOException: SQLSTATE[HY000] Too many connections" → DB-Pool zu klein
4. Service Map
Visualisiert Abhängigkeiten:
[Browser] --> [Shopware Storefront] --> [Shopware Backend]
|
[MySQL] + [Redis] + [Elasticsearch]
|
[PayPal API]Performance-Optimierung: Praxis-Beispiele aus CODING 9-Projekten
Fall 1: Langsamer Checkout, von 2.3s auf 0.4s
Problem: APM zeigte 850ms für eine SQL-Query im Checkout
Lösung:
Query analysiert: N+1-Problem (lädt jedes Line Item einzeln)
Fix: Eager Loading mit Doctrine Associations
Resultat: 50ms statt 850ms, Checkout 82% schneller
Fall 2: Hohe Error Rate bei Product Listing, von 12% auf 0.3%
Problem: 12% aller Listing-Requests werfen Timeouts
Lösung:
APM Error-Details: Elasticsearch-Timeout bei komplexen Filtern
Fix: Elasticsearch Query-Optimierung + Index-Tuning
Resultat: Error Rate von 12% auf 0.3%
Fall 3: Schlechte Core Web Vitals, LCP von 4.2s auf 1.8s
Problem: RUM zeigte Largest Contentful Paint (LCP) von 4.2s
Lösung:
RUM Transaction-Details: Hero-Image (2MB) unkomprimiert
Fix: WebP-Conversion + CDN + Lazy Loading
Resultat: LCP von 4.2s auf 1.8s, im Google-Bereich „Good"
Best Practices & Tipps
1. Sampling für hohen Traffic
Bei >100.000 Requests/Tag samplen Sie nur 10-20% der Transaktionen, um Kosten zu senken:
ELASTIC_APM_TRANSACTION_SAMPLE_RATE=0.1 # 10%2. Alerts einrichten
In Kibana unter Alerts:
Error Rate über 5%: Benachrichtigung nach Slack oder per E-Mail
Avg. Response Time über 3s: Alert an das DevOps-Team
LCP über 2.5s: SEO-Team informieren
3. Custom Spans für Business-Logik
use Elastic\Apm\ElasticApm;
public function calculateShippingCost(Order $order): float
{
$transaction = ElasticApm::getCurrentTransaction();
$span = $transaction->beginCurrentSpan('Calculate Shipping', 'app.shipping');
// ... complex shipping logic
$span->end();
return $cost;
}4. DSGVO-Compliance
Anonymisieren Sie User-IDs in Custom Context
Filtern Sie sensitive URLs (
/account/login,/checkout/payment)Self-Hosting in EU für volle Datenkontrolle
Kosten & ROI
Self-Hosted (Docker)
Server: €30-80/Monat (2-4 vCPU, 8-16 GB RAM)
Wartung: ~4h/Monat (Updates, Backups)
Elastic Cloud
Standard: $95/Monat (bis 50GB Daten)
Enterprise: ab $175/Monat (unbegrenzt + Support)
ROI-Beispiel
Ein mittelgroßer Shopware-Shop (€500k/Monat Umsatz):
Investition: €100/Monat (Elastic Cloud)
Gewinn durch 1% Conversion-Steigerung (bessere Performance): €5.000/Monat
ROI: 5.000%
Was APM im laufenden Shopware-Betrieb bringt
In jedem Shopware-Projekt mit nennenswertem Umsatz gehört Elastic APM zur Grundausstattung, so wie Backups und Server-Monitoring. Für uns ist es ein Must-Have im Betrieb. Was es konkret einbringt:
Proaktive Fehlerbehebung senkt Downtime und die Zahl der Support-Tickets
Performance-Optimierung an den gemessenen Bottlenecks hebt die Conversion Rate
Datengetriebene Entscheidungen richten die Entwicklungszeit auf gemessene Probleme statt auf Vermutungen
Wir richten Elastic APM in neuen Shopware-Projekten ein und rüsten es in bestehenden Shops nach, inklusive RUM-Einbindung und Alerts. Kontaktieren Sie uns für ein kostenloses Performance-Audit Ihres Shops!
Nutzen Sie bereits ein APM-Tool in Ihrem E-Commerce-Projekt? Schreiben Sie uns, welche Erfahrungen Sie damit gemacht haben.