Упрощенный сбор логов с помощью плагина http-logger в APISIX

Qi Guo

Qi Guo

April 11, 2024

Technology

Введение

В современной разработке программного обеспечения логирование вызовов API является неотъемлемой частью, записывающей подробную информацию для каждого вызова API приложения. Эффективное управление логами позволяет командам разработчиков отслеживать активность вызовов API в реальном времени, что способствует своевременному обнаружению и устранению проблем. Хотя в предприятиях существуют зрелые решения для систем логирования, разработчики могут столкнуться с трудностями при интеграции логов из сервисов тестирования на ранних этапах во внутренние системы логирования из-за ограничений на доступ и процессов утверждения, что снижает их эффективность разработки.

Плагин http-logger, предоставляемый Apache APISIX, упрощает интеграцию с HTTP-серверами, используя широко распространенный протокол HTTP для приема логов. Это позволяет разработчикам легко просматривать логи вызовов API напрямую, тем самым повышая эффективность разработки. Ниже мы расскажем, как он работает и как его использовать.

Принцип работы плагина http-logger

Плагин http-logger в APISIX поддерживает отправку данных логов на HTTP или HTTPS серверы. Его основной принцип заключается в обработке запросов APISIX при их инициации клиентом, генерации логов доступа и асинхронной отправке информации о контексте запроса, отформатированной в соответствии с указанными форматами логов, через POST-запросы в виде JSON-объектов на настроенные HTTP или HTTPS серверы. Это позволяет просматривать информацию о логах API на наших собственных HTTP или HTTPS сервисах, значительно повышая эффективность разработки. Ниже приведена схема потока данных.

Схема потока данных

Создание простого HTTP-сервиса для приема логов

Хотя на рынке существует множество SaaS-продуктов и открытых решений для управления и анализа логов, таких как Loggly, Splunk и ELK Stack, доступ к внешним сетям может быть ограничен в корпоративных сетях, что создает трудности на этапах разработки и тестирования. Поэтому можно быстро разработать простой HTTP-сервис для сбора логов. Ниже приведен пример на 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/'); });

Скрипт слушает локальный порт 3000 и выводит тело запроса на этот сервис. Вы можете выполнить следующие шаги для запуска и тестирования:

  1. Запустите node httpserver.js, чтобы запустить сервис.

  2. Используйте команду curl -i http://127.0.0.1:3000/ -d '{"name": "Jack"}' для доступа к этому эндпоинту.

  3. Вы должны увидеть подобный вывод:

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

Включение плагина Http-logger в APISIX

Теперь обсудим, как включить плагин http-logger в APISIX и отправлять логи на HTTP-сервис, созданный на предыдущем шаге.

  1. Используйте API администратора APISIX для создания маршрута и включения плагина 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. Используйте команду curl для отправки запросов в APISIX: curl -i http://127.0.0.1:9080/get

  2. Затем вы должны увидеть подобный вывод логов в вашем терминале.

Вывод логов при включении плагина http-logger

Можно заметить, что мы успешно собрали логи, отправленные APISIX.

Настройка форматов логов

Плагин http-logger позволяет разработчикам настраивать форматы логов для удовлетворения различных требований. Если интерес представляют только определенные поля в данных логов, APISIX поддерживает объявление форматов и содержимого логов. Это можно достичь, настроив метаданные плагина, предоставляемые APISIX.

1. Настройка метаданных плагина через 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" } }'
  1. После повторного выполнения команды curl вы должны увидеть подобный вывод логов:
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"}]

Заключение

Используя плагин http-logger, разработчики не только упрощают процесс просмотра логов, но и повышают ежедневную эффективность разработки. Этот плагин, предоставляемый APISIX, является самым простым и удобным плагином для логирования, работающим на общепринятом протоколе HTTP для передачи данных по сети. Он позволяет разработчикам легко интегрироваться с любым HTTP-сервисом и гибко выбирать сервисы для приема логов.

Кроме того, APISIX поддерживает десятки плагинов для логирования, чтобы удовлетворить разнообразные требования в различных сценариях. Будь то простое HTTP-собирание логов, сложный анализ логов и мониторинг, или требования к высокой производительности и стабильности, APISIX предоставляет всестороннюю поддержку, создавая более удобные и эффективные системы для пользователей.

Tags: