Vereinfachte Protokollsammlung mit dem http-logger-Plugin von APISIX
April 11, 2024
Einführung
In der modernen Softwareentwicklung ist die Protokollierung von API-Aufrufen ein unverzichtbarer Bestandteil, der detaillierte Informationen für jeden API-Aufruf einer Anwendung aufzeichnet. Eine effektive Protokollverwaltung ermöglicht es Entwicklungsteams, API-Aufrufaktivitäten in Echtzeit zu überwachen, was die schnelle Erkennung und Lösung von Problemen erleichtert. Während es in Unternehmen ausgereifte Lösungen für Protokollierungssysteme gibt, können Entwickler aufgrund von Berechtigungseinschränkungen und Genehmigungsprozessen Schwierigkeiten haben, Protokolle von frühen Testdiensten in interne Protokollierungssysteme zu integrieren, was ihre Entwicklungseffizienz beeinträchtigt.
Das http-logger
-Plugin, das von Apache APISIX bereitgestellt wird, erleichtert die Integration mit HTTP-Servern und verwendet das weit verbreitete HTTP-Protokoll für die Protokollaufnahme. Dies ermöglicht es Entwicklern, API-Protokolle direkt einzusehen und so die Entwicklungseffizienz zu steigern. Im Folgenden werden wir erläutern, wie es funktioniert und wie man es verwendet.
Prinzipien des http-logger
-Plugins
Das http-logger
-Plugin in APISIX unterstützt das Pushen von Protokolldaten an HTTP- oder HTTPS-Server. Sein Kernprinzip besteht darin, dass APISIX Anfragen bei der Initiierung durch den Client verarbeitet, Zugriffsprotokolle generiert und asynchron Kontextinformationen der Anfrage, formatiert nach spezifizierten Protokollformaten, über POST-Anfragen als JSON-Objekte an konfigurierte HTTP- oder HTTPS-Server sendet. Dies ermöglicht es, API-Protokollinformationen auf unseren eigenen HTTP- oder HTTPS-Diensten einzusehen, was die Entwicklungseffizienz erheblich verbessert. Ein Flussdiagramm wird unten bereitgestellt, um den Datenfluss zu veranschaulichen.
Erstellen eines einfachen HTTP-Dienstes zur Protokollaufnahme
Obwohl es auf dem Markt zahlreiche SaaS-Produkte und Open-Source-Lösungen für die Protokollverwaltung und -analyse gibt, wie Loggly, Splunk und ELK Stack, kann der Zugriff auf externe Netzwerke innerhalb von Unternehmensnetzwerken eingeschränkt sein, was während der Entwicklungs- und Testphasen Herausforderungen darstellt. Daher kann ein einfacher HTTP-Dienst schnell entwickelt werden, um Protokolle zu sammeln. Nachfolgend ein Beispiel mit Node.js:
// httpserver.js
const http = require('http');
http.createServer((req, res) => {
let data = '';
req.on('data', chunk => {
data += chunk;
});
req.on('end', () => {
console.log('APISIX Log:', data);
});
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(`Hello World\n`);
}).listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
Das Skript lauscht auf dem lokalen Port 3000
und gibt den Anfragekörper von Anfragen an diesen Dienstendpunkt aus. Sie können die folgenden Schritte befolgen, um es auszuführen und zu testen:
-
Führen Sie
node httpserver.js
aus, um den Dienst zu starten. -
Verwenden Sie den Befehl
curl -i http://127.0.0.1:3000/ -d '{"name": "Jack"}'
, um auf diesen Endpunkt zuzugreifen. -
Sie sollten eine ähnliche Ausgabe sehen:
Server running at http://localhost:3000/
APISIX Log: {"name": "Jack"}
Aktivieren des Http-logger-Plugins in APISIX
Als Nächstes besprechen wir, wie das http-logger
-Plugin in APISIX aktiviert wird und Protokolle an den im vorherigen Schritt erstellten HTTP-Dienst gesendet werden.
- Verwenden Sie die APISIX Admin API, um eine Route zu erstellen und das
http-logger
-Plugin zu aktivieren:
curl "http://127.0.0.1:9080/apisix/admin/routes/1" \
-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"uri": "/get",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
},
"plugins": {
"http-logger": {
"uri": "http://127.0.0.1:3000/"
}
}
}'
-
Verwenden Sie den curl-Befehl, um Anfragen an APISIX zu senden:
curl -i http://127.0.0.1:9080/get
-
Sie sollten dann eine ähnliche Protokollausgabe in Ihrem Terminal sehen.
Es ist zu beobachten, dass wir erfolgreich Protokolle gesammelt haben, die von APISIX gesendet wurden.
Anpassen von Protokollformaten
Das http-logger
-Plugin ermöglicht es Entwicklern, Protokollformate anzupassen, um verschiedenen Anforderungen gerecht zu werden. Wenn nur bestimmte Felder in den Protokolldaten von Interesse sind, unterstützt APISIX die Deklaration von Protokollformaten und -inhalten. Dies kann durch die Einstellung von Plugin-Metadaten, die von APISIX bereitgestellt werden, erreicht werden.
1. Konfigurieren Sie Plugin-Metadaten über die Admin API:
curl http://127.0.0.1:9180/apisix/admin/plugin_metadata/http-logger \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"log_format": {
"host": "$host",
"@timestamp": "$time_iso8601",
"client_ip": "$remote_addr"
}
}'
- Wenn Sie den curl-Befehl erneut ausführen, sollten Sie eine ähnliche Protokollausgabe sehen:
APISIX Log: [{"service_id":"a869a037-27df-4278-ab50-4e66d212cfc0","client_ip":"192.168.65.1","host":"127.0.0.1","route_id":"4f499953-9504-4737-9f3d-facaeda4b841","@timestamp":"2024-04-10T00:10:31+00:00"}]
Fazit
Durch die Nutzung des http-logger
-Plugins vereinfachen Entwickler nicht nur den Prozess der Protokollanzeige, sondern steigern auch die tägliche Entwicklungseffizienz. Dieses Plugin, das von APISIX bereitgestellt wird, ist das einfachste und benutzerfreundlichste Protokollierungs-Plugin, das auf dem allgemein akzeptierten HTTP-Protokoll für die Netzwerkübertragung basiert. Es ermöglicht Entwicklern, sich nahtlos mit jedem HTTP-Dienst zu integrieren und flexibel Protokollempfangsdienste auszuwählen.
Darüber hinaus unterstützt APISIX Dutzende von Protokollierungs-Plugins, um unterschiedliche Anforderungen in verschiedenen Szenarien zu erfüllen. Ob für einfache HTTP-Protokollsammlung, komplexe Protokollanalyse und Überwachung oder hohe Anforderungen an Leistung und Stabilität, APISIX bietet umfassende Unterstützung und schafft so bequemere und effizientere Systeme für Benutzer.