Monitoramento na Nuvem com Datadog no Apache APISIX
API7.ai
November 12, 2021
À medida que a complexidade dos produtos de TI e do desenvolvimento de aplicativos voltados para o consumidor aumenta, o monitoramento se torna uma parte integrante de qualquer entrega de aplicativo. Além disso, para atender à demanda interminável de ciclos de atualização rápidos, garantindo estabilidade, desempenho otimizado e mantendo um equilíbrio perfeito entre indicadores de nível de serviço (SLI) com objetivos de nível de serviço (SLO) e acordos de nível de serviço (SLA) - o monitoramento eficaz é extremamente importante.
Como um produto de gerenciamento de API em nuvem, o Apache APISIX desacopla as preocupações de observabilidade da aplicação, o que dá aos desenvolvedores a vantagem de construir aplicações focando apenas na lógica de negócios, enquanto o Apache APISIX cuida da observabilidade para a plataforma de sua escolha.
O Apache APISIX recentemente lançou um novo plugin: APISIX-Datadog, para fornecer uma integração mais profunda com o Datadog. Este artigo apresenta o Plugin APISIX-Datadog e suas capacidades.
Como o plugin APISIX-Datadog funciona
O plugin APISIX-Datadog envia suas métricas personalizadas para o servidor DogStatsD, que vem integrado com o agente Datadog por meio de uma conexão UDP. O DogStatsD é basicamente uma implementação do protocolo StatsD. Ele coleta as métricas personalizadas para o agente Apache APISIX, agrega-as em um único ponto de dados e as envia para o servidor Datadog configurado. Para saber mais sobre o DogStatsD, visite a documentação do DogStatsD.
Quando o APISIX-Datadog é ativado, o agente Apache APISIX exporta as seguintes métricas para o servidor DogStatsD a cada ciclo de resposta de solicitação:
Nome da Métrica | Tipo StatsD | Descrição |
---|---|---|
Contador de Solicitações | Contador | Número de solicitações recebidas. |
Latência da Solicitação | Histograma | Tempo necessário para processar a solicitação (em milissegundos). |
Latência do Upstream | Histograma | Tempo decorrido desde o envio da solicitação para o servidor upstream até a recepção de uma resposta (em milissegundos). |
Latência do APISIX | Histograma | Tempo necessário para o agente APISIX processar a solicitação (em milissegundos). |
Tamanho do Ingresso | Timer | Tamanho do corpo da solicitação em bytes. |
Tamanho do Egresso | Timer | Tamanho do corpo da resposta em bytes. |
As métricas serão enviadas ao agente DogStatsD com as seguintes tags. Se não houver um valor adequado para qualquer tag específica, a tag será simplesmente omitida.
Nome da Métrica | Descrição |
---|---|
nome_da_rota | Nome especificado na definição do esquema da rota. Se não estiver presente, ele voltará ao valor do ID da rota. |
id_do_serviço | Se uma rota foi criada com a abstração de serviço, o ID do serviço específico será usado. |
consumidor | Se a rota tiver um consumidor vinculado, o nome de usuário do consumidor será adicionado como uma tag. |
ip_do_balanceador | IP do balanceador de upstream que processou a solicitação atual. |
status_da_resposta | Código de status da resposta HTTP. |
esquema | Esquema usado para fazer as solicitações, como HTTP, gRPC, gRPCs, etc. |
O plugin mantém um buffer com um temporizador. Quando o temporizador expira, o plugin APISIX-Datadog envia as métricas armazenadas no buffer como um lote para o servidor dogstatsd local. Essa abordagem é menos exigente em recursos (embora possa ser insignificante, já que os sockets UDP são muito leves) ao reutilizar o mesmo socket UDP e não sobrecarrega a rede o tempo todo, pois o temporizador pode ser configurado.
Passos para Executar o Agente Datadog
- Se você já está usando o Datadog em sua infraestrutura, deve ter um agente datadog instalado em seus sistemas. Pode ser um contêiner Docker, um pod ou um binário para um gerenciador de pacotes específico. Nesse caso, você está pronto para prosseguir. Apenas certifique-se de que a porta 8125/udp esteja permitida pelo firewall (se houver), ou seja, mais especificamente, o agente Apache APISIX pode alcançar a porta 8125 do agente datadog. Você pode pular esta subseção.
Para saber mais sobre como instalar um agente datadog completo, visite aqui.
- Se você é novo no Datadog
- Primeiro, crie uma conta visitando www.datadoghq.com.
- Gere uma chave de API.
- O plugin APISIX-Datadog requer apenas o componente dogstatsd do
datadog/agent
, pois o plugin envia métricas de forma assíncrona para o servidor dogstatsd seguindo o protocolo statsd por meio de um socket UDP padrão. Por isso, o APISIX recomenda usar a imagem standalonedatadog/dogstatsd
em vez de usar o agente completo. É extremamente leve (apenas ~11 MB de tamanho) em comparação com ~2,8 GB da imagemdatadog/agent
.
Para executá-lo como um contêiner:
# puxe a imagem mais recente
docker pull datadog/dogstatsd:latest
# execute um contêiner em segundo plano
docker run -d --name dogstatsd-agent -e DD_API_KEY=<Sua Chave de API da etapa 2> -p 8125:8125/udp datadog/dogstatsd
Se você estiver usando Kubernetes em seu ambiente de produção, pode implantar o dogstatsd
como um Daemonset
ou como um Pod de Múltiplos Contêineres
ao lado do agente Apache APISIX.
Como Usar o Datadog com o Apache APISIX
Ativar o plugin APISIX-Datadog
A seguir está um exemplo de como ativar o plugin datadog para uma rota específica. Estamos assumindo que seu agente dogstatsd
já está em execução.
# ativar o plugin para uma rota específica
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"datadog": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
},
"uri": "/hello"
}'
Agora, qualquer solicitação para o endpoint /hello
gerará as métricas acima e as enviará para o servidor DogStatsD local do agente datadog.
Configuração Personalizada
Na configuração padrão, o plugin espera que o serviço dogstatsd esteja disponível em 127.0.0.1:8125
. Se você deseja atualizar a configuração, atualize os metadados do plugin:
Esquema de Metadados
Nome | Tipo | Obrigatório | Padrão | Descrição |
---|---|---|---|---|
hosts | string | opcional | "127.0.0.1" | Endereço do host do servidor DogStatsD |
port | integer | opcional | 8125 | Porta do host do servidor DogStatsD |
namespace | string | opcional | "apisix" | Prefixo para todas as métricas personalizadas enviadas pelo agente APISIX. Útil para encontrar entidades para gráficos de métricas. Por exemplo, (apisix.request.counter) |
constant_tags | array | opcional | ["source"] | Tags estáticas incorporadas nas métricas geradas. Útil para agrupar métricas com base em certos sinais. |
Para saber mais sobre como escrever tags de forma eficaz, visite aqui
Faça uma solicitação para o endpoint /apisix/admin/plugin_metadata com os metadados atualizados da seguinte forma:
curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/datadog -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"host": "127.0.0.1",
"port": 8125,
"constant_tags": [
"source:apisix",
"service:custom"
],
"namespace": "apisix"
}'
Esquema do Plugin
Da mesma forma, existem alguns atributos que podem ser ajustados ao ativar o plugin.
Nome | Tipo | Obrigatório | Padrão | Valores Válidos | Descrição |
---|---|---|---|---|---|
batch_max_size | integer | opcional | 5000 | [1,...] | Tamanho máximo do buffer de cada lote |
inactive_timeout | integer | opcional | 5 | [1,...] | Idade máxima em segundos quando o buffer será liberado se inativo |
buffer_duration | integer | opcional | 60 | [1,...] | Idade máxima em segundos da entrada mais antiga em um lote antes que o lote deva ser processado |
max_retry_count | integer | opcional | 1 | [1,...] | Número máximo de tentativas se uma entrada falhar ao alcançar o servidor dogstatsd |
Como todos os campos são opcionais e se nenhum atributo for definido, o plugin datadog será instanciado com os valores padrão. Para atualizar qualquer atributo, basta atualizar a rota, serviço ou consumidor necessário com o valor do atributo atualizado. Por exemplo, o código abaixo modifica o tamanho máximo do buffer de cada lote:
'{
...
"plugins": {
"datadog": {
"batch_max_size": 10
}
}
... }'
Desativar o plugin APISIX-Datadog
Agora, para desativar o plugin, simplesmente remova a configuração JSON correspondente na configuração do plugin para desabilitar o datadog
. Os plugins do APISIX são recarregados em tempo real, portanto, não é necessário reiniciar o APISIX.
# desativar o plugin para uma rota
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/hello",
"plugins": {},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'