Monitoramento na Nuvem com Datadog no Apache APISIX

API7.ai

November 12, 2021

Ecosystem

Imagem de capa

À 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

Arquitetura do plugin APISIX-Datadog

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étricaTipo StatsDDescrição
Contador de SolicitaçõesContadorNúmero de solicitações recebidas.
Latência da SolicitaçãoHistogramaTempo necessário para processar a solicitação (em milissegundos).
Latência do UpstreamHistogramaTempo decorrido desde o envio da solicitação para o servidor upstream até a recepção de uma resposta (em milissegundos).
Latência do APISIXHistogramaTempo necessário para o agente APISIX processar a solicitação (em milissegundos).
Tamanho do IngressoTimerTamanho do corpo da solicitação em bytes.
Tamanho do EgressoTimerTamanho 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étricaDescrição
nome_da_rotaNome especificado na definição do esquema da rota. Se não estiver presente, ele voltará ao valor do ID da rota.
id_do_serviçoSe uma rota foi criada com a abstração de serviço, o ID do serviço específico será usado.
consumidorSe a rota tiver um consumidor vinculado, o nome de usuário do consumidor será adicionado como uma tag.
ip_do_balanceadorIP do balanceador de upstream que processou a solicitação atual.
status_da_respostaCódigo de status da resposta HTTP.
esquemaEsquema 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

  1. 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.

  1. Se você é novo no Datadog
    1. Primeiro, crie uma conta visitando www.datadoghq.com.
    2. Gere uma chave de API. Gerar uma chave de API
  2. 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 standalone datadog/dogstatsd em vez de usar o agente completo. É extremamente leve (apenas ~11 MB de tamanho) em comparação com ~2,8 GB da imagem datadog/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

NomeTipoObrigatórioPadrãoDescrição
hostsstringopcional"127.0.0.1"Endereço do host do servidor DogStatsD
portintegeropcional8125Porta do host do servidor DogStatsD
namespacestringopcional"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_tagsarrayopcional["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.

NomeTipoObrigatórioPadrãoValores VálidosDescrição
batch_max_sizeintegeropcional5000[1,...]Tamanho máximo do buffer de cada lote
inactive_timeoutintegeropcional5[1,...]Idade máxima em segundos quando o buffer será liberado se inativo
buffer_durationintegeropcional60[1,...]Idade máxima em segundos da entrada mais antiga em um lote antes que o lote deva ser processado
max_retry_countintegeropcional1[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
        }
    }
}'
Tags: