Laravel mit InfluxDB verbinden – Praxisleitfaden

Laravel unterstützt viele Datenbank-Provider out-of-the-box, jedoch ist InfluxDB nicht direkt integriert. In diesem Beitrag zeige ich, wie Sie InfluxDB – sowohl lokal als auch in der Cloud – mit Laravel verbinden, Metriken schreiben und lesen, typische Fehler vermeiden und die Performance optimieren.

Paket installieren

Wir nutzen das Paket tray-labs/laravel-influxdb, getestet in der Version v1.2.0.

bashcomposer require tray-labs/laravel-influxdb:^1.2

Stellen Sie vor der Installation sicher, dass die Laravel- und PHP-Version mit dem Paket kompatibel sind. Für InfluxDB v2 (Cloud) benötigen Sie zusätzlich einen gültigen Token.

Umgebungsvariablen (.env)

Für InfluxDB 1.x (lokal oder On-Premise)

INFLUXDB_HOST=localhost
INFLUXDB_PORT=8086
INFLUXDB_USER=some_user
INFLUXDB_PASSWORD=some_password
INFLUXDB_SSL=false
INFLUXDB_VERIFYSSL=false
INFLUXDB_TIMEOUT=0
INFLUXDB_DBNAME=some_database
INFLUXDB_UDP_ENABLED=false
INFLUXDB_UDP_PORT=4444

Für InfluxDB 2.x (Cloud)

INFLUXDB_URL=https://eu-central-1-1.aws.cloud2.influxdata.com
INFLUXDB_TOKEN=your_token
INFLUXDB_ORG=your_org
INFLUXDB_BUCKET=your_bucket
INFLUXDB_SSL=true
INFLUXDB_VERIFYSSL=true

Hinweis: Das tray-labs-Paket unterstützt standardmäßig v1-Variablen. Für v2 müssen Sie ggf. die Verbindung über eine angepasste config/influxdb.php herstellen oder auf einen v2-kompatiblen Client setzen.

Provider konfigurieren

Nach der Installation veröffentlichen wir die Konfiguration:

php artisan vendor:publish --provider="TrayLabs\InfluxDB\InfluxDBServiceProvider"

Passen Sie die Datei config/influxdb.php entsprechend Ihrer .env-Werte an.

Beispiel: Schreiben von Messwerten

Im Controller oder Service können wir Messwerte direkt an InfluxDB senden:

use Illuminate\Http\Request;

public function storeMetrics(Request $request)
{
$influx = app('influxdb'); // alternativ via Dependency Injection
$point = [
'measurement' => 'cpu',
'tags' => ['host' => 'server1'],
'fields' => ['usage' => 0.56],
'time' => now()->toIso8601String()
];
$influx->write($point, env('INFLUXDB_DBNAME', 'some_database'));
return response()->json(['status' => 'ok']);
}

Beispiel: Abfragen von Messwerten

$results = app('influxdb')->query(
"SELECT mean(usage) FROM cpu WHERE time > now() - 1h GROUP BY time(5m)"
);

Bei v2-Clouddatenmodellen müssen Sie die bucket– und org-Parameter des Clients mitgeben.

Praxisfall: 100k Metriken pro Tag

In einem internen Projekt nutzen wir InfluxDB zur Speicherung von ca. 100.000 Metriken/Tag.
Tipps aus der Praxis:

  • Batch Writes verwenden, um die Latenz zu senken
  • Retention Policies konfigurieren, um alte Daten automatisch zu löschen
  • Indexierung über Tags optimieren
  • Zeitpräzision auf ms setzen, um unnötige Genauigkeit zu vermeiden

Troubleshooting

Verbindungsfehler: Prüfen Sie Host, Port und Firewall-Regeln.
Auth-Fehler: Für v2-Cloud muss der Token anstelle von User/Password genutzt werden.
SSL-Fehler: INFLUXDB_VERIFYSSL=false zum Testen verwenden (Produktiv: immer true).
Zeitformat-Fehler: Nutzen Sie ISO8601 für bessere Kompatibilität.
UDP-Verbindungsprobleme: UDP in der .env aktivieren und Port freigeben.

Typische Logs für Auth-Fehler in v2:

401 Unauthorized - Invalid token

Für persönliche Beratung oder Projekte im Bereich Laravel und Datenbankintegration besuchen Sie unsere Webseite oder nehmen Sie direkt Kontakt auf.