Collecte de logs simplifiée avec le plugin http-logger d'APISIX

Qi Guo

Qi Guo

April 11, 2024

Technology

Introduction

Dans le développement de logiciels modernes, la journalisation des appels d'API est une partie indispensable, enregistrant des informations détaillées pour chaque appel d'API d'une application. Une gestion efficace des journaux permet aux équipes de développement de surveiller les activités des appels d'API en temps réel, facilitant ainsi la détection et la résolution rapides des problèmes. Bien que des solutions de systèmes de journalisation matures existent dans les entreprises, les développeurs peuvent rencontrer des difficultés pour intégrer les journaux des services de test en phase initiale dans les systèmes de journalisation internes en raison de restrictions de permissions et de processus d'approbation, ce qui entrave leur efficacité de développement.

Le plugin http-logger fourni par Apache APISIX facilite l'intégration avec les serveurs HTTP, en utilisant le protocole HTTP largement adopté pour la réception des journaux. Cela permet aux développeurs de visualiser facilement les journaux d'appels d'API directement, améliorant ainsi leur efficacité de développement. Ci-dessous, nous expliquerons comment il fonctionne et comment l'utiliser.

Principes du plugin http-logger

Le plugin http-logger dans APISIX prend en charge l'envoi des données de journalisation vers des serveurs HTTP ou HTTPS. Son principe de base consiste à traiter les requêtes par APISIX lors de l'initiation d'une requête par le client, à générer des journaux d'accès, et à envoyer de manière asynchrone les informations de contexte de la requête, formatées selon des formats de journal spécifiés, via des requêtes POST sous forme d'objets JSON vers des serveurs HTTP ou HTTPS configurés. Cela permet de visualiser les informations de journalisation des API sur nos propres services HTTP ou HTTPS, améliorant ainsi considérablement l'efficacité de développement. Un diagramme de flux est fourni ci-dessous pour illustrer le flux de données.

Diagramme de flux de données

Création d'un service HTTP simple pour la réception des journaux

Bien qu'il existe de nombreux produits SaaS et solutions open source sur le marché pour la gestion et l'analyse des journaux, tels que Loggly, Splunk et ELK Stack, l'accès aux réseaux externes peut être restreint dans les réseaux d'entreprise, posant des défis lors des phases de développement et de test. Par conséquent, un service HTTP simple peut être rapidement développé pour collecter les journaux. Voici un exemple utilisant 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/');
});

Ce script écoute sur le port local 3000 et affiche le corps de la requête des requêtes envoyées à ce point de terminaison de service. Vous pouvez suivre ces étapes pour l'exécuter et le tester :

  1. Exécutez node httpserver.js pour démarrer le service.

  2. Utilisez la commande curl -i http://127.0.0.1:3000/ -d '{"name": "Jack"}' pour accéder à ce point de terminaison.

  3. Vous devriez voir une sortie similaire :

Server running at http://localhost:3000/
APISIX Log: {"name": "Jack"}

Activation du plugin Http-logger dans APISIX

Ensuite, discutons de la manière d'activer le plugin http-logger dans APISIX et d'envoyer les journaux au service HTTP créé à l'étape précédente.

  1. Utilisez l'API Admin d'APISIX pour créer une route et activer le plugin http-logger :
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/"
              }
        }
    }'
  1. Utilisez la commande curl pour envoyer des requêtes à APISIX : curl -i http://127.0.0.1:9080/get

  2. Vous devriez alors voir une sortie de journal similaire dans votre terminal.

Sortie de journal pour l'activation du plugin http-logger

On peut observer que nous avons réussi à collecter les journaux envoyés par APISIX.

Personnalisation des formats de journal

Le plugin http-logger permet aux développeurs de personnaliser les formats de journal pour répondre à diverses exigences. Si seuls certains champs des données de journal sont d'intérêt, APISIX prend en charge la déclaration des formats et contenus de journal. Cela peut être réalisé en configurant les métadonnées du plugin fournies par APISIX.

1. Configurez les métadonnées du plugin via l'API Admin :

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"
    }
}'
  1. Après avoir réémis la commande curl, vous devriez voir une sortie de journal similaire :
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"}]

Conclusion

Grâce à l'utilisation du plugin http-logger, les développeurs simplifient non seulement le processus de visualisation des journaux, mais améliorent également leur efficacité de développement quotidienne. Ce plugin, fourni par APISIX, est le plugin de journalisation le plus simple et le plus convivial, fonctionnant sur le protocole HTTP universellement accepté pour la transmission réseau. Il permet aux développeurs de s'intégrer de manière transparente à tout service HTTP et de choisir de manière flexible les services de réception des journaux.

De plus, APISIX prend en charge des dizaines de plugins de journalisation pour répondre à des exigences diverses dans différents scénarios. Que ce soit pour une collecte simple de journaux HTTP, une analyse de journaux et une surveillance complexes, ou des exigences de haute performance et de stabilité, APISIX offre un support complet, créant des systèmes plus pratiques et efficaces pour les utilisateurs.

Tags: