Coleta de Logs Simplificada com o Plugin http-logger do APISIX
April 11, 2024
Introdução
No desenvolvimento moderno de software, o registro de chamadas de API é uma parte indispensável, registrando informações detalhadas para cada chamada de API de uma aplicação. O gerenciamento eficaz de logs permite que as equipes de desenvolvimento monitorem as atividades de chamadas de API em tempo real, facilitando a detecção e resolução rápida de problemas. Embora existam soluções maduras de sistemas de registro em empresas, os desenvolvedores podem enfrentar desafios ao integrar logs de serviços de teste em estágio inicial em sistemas de registro internos devido a restrições de permissão e processos de aprovação, prejudicando sua eficiência de desenvolvimento.
O plugin http-logger
fornecido pelo Apache APISIX facilita a integração com servidores HTTP, utilizando o amplamente adotado protocolo HTTP para recepção de logs. Isso permite que os desenvolvedores visualizem facilmente os logs de chamadas de API diretamente, aumentando assim a eficiência de desenvolvimento. Abaixo, apresentaremos como ele funciona e como utilizá-lo.
Princípios do Plugin http-logger
O plugin http-logger
no APISIX suporta o envio de dados de log para servidores HTTP ou HTTPS. Seu princípio central envolve o processamento de solicitações pelo APISIX após a iniciação pelo cliente, gerando logs de acesso e enviando de forma assíncrona as informações de contexto da solicitação, formatadas de acordo com os formatos de log especificados, via solicitações POST como objetos JSON para configurar servidores HTTP ou HTTPS. Isso permite visualizar informações de log de API em nossos próprios serviços HTTP ou HTTPS, melhorando significativamente a eficiência de desenvolvimento. Um fluxograma é fornecido abaixo para ilustrar o fluxo de dados.
Criando um Serviço HTTP Simples para Recepção de Logs
Embora existam inúmeros produtos SaaS e soluções de código aberto no mercado para gerenciamento e análise de logs, como Loggly, Splunk e ELK Stack, o acesso a redes externas pode ser restrito dentro de redes corporativas, apresentando desafios durante as fases de desenvolvimento e teste. Portanto, um serviço HTTP simples pode ser rapidamente desenvolvido para coletar logs. Abaixo está um exemplo usando 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/');
});
O script escuta na porta local 3000
e imprime o corpo da solicitação de requisições para este endpoint de serviço. Você pode seguir estas etapas para executá-lo e testá-lo:
-
Execute
node httpserver.js
para iniciar o serviço. -
Use o comando
curl -i http://127.0.0.1:3000/ -d '{"name": "Jack"}'
para acessar este endpoint. -
Você deve ver uma saída semelhante:
Server running at http://localhost:3000/
APISIX Log: {"name": "Jack"}
Habilitando o Plugin Http-logger no APISIX
A seguir, vamos discutir como habilitar o plugin http-logger
no APISIX e enviar logs para o serviço HTTP criado na etapa anterior.
- Use a API Admin do APISIX para criar uma rota e habilitar o 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/"
}
}
}'
-
Use o comando curl para enviar solicitações ao APISIX:
curl -i http://127.0.0.1:9080/get
-
Você deve então ver uma saída de log semelhante no seu terminal.
Pode-se observar que conseguimos coletar com sucesso os logs enviados pelo APISIX.
Personalizando Formatos de Log
O plugin http-logger
permite que os desenvolvedores personalizem os formatos de log para atender a várias necessidades. Se apenas campos específicos nos dados de log forem de interesse, o APISIX suporta a declaração de formatos e conteúdos de log. Isso pode ser alcançado configurando metadados de plugin fornecidos pelo APISIX.
1. Configure metadados de plugin via 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"
}
}'
- Ao emitir o comando curl novamente, você deve ver uma saída de log semelhante:
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"}]
Conclusão
Através da utilização do plugin http-logger
, os desenvolvedores não apenas simplificam o processo de visualização de logs, mas também aumentam a eficiência diária de desenvolvimento. Este plugin, fornecido pelo APISIX, é o mais simples e fácil de usar, operando no protocolo HTTP universalmente aceito para transmissão de rede. Ele permite que os desenvolvedores integrem-se perfeitamente a qualquer serviço HTTP e escolham de forma flexível serviços de recepção de logs.
Além disso, o APISIX suporta dezenas de plugins de log para atender a diversas necessidades em diferentes cenários. Seja para coleta simples de logs HTTP, análise de logs e monitoramento complexos, ou demandas de alta performance e estabilidade, o APISIX fornece suporte abrangente, criando sistemas mais convenientes e eficientes para os usuários.