Monitoreo en la Nube con Datadog en Apache APISIX

API7.ai

November 12, 2021

Ecosystem

Imagen de portada

A medida que aumenta la complejidad de los productos de TI y el desarrollo de aplicaciones orientadas al consumidor, la monitorización se convierte en una parte integral de cualquier entrega de aplicaciones. Además, para satisfacer la demanda interminable de ciclos de actualización rápidos mientras se garantiza la estabilidad, un rendimiento optimizado y se mantiene un equilibrio perfecto entre los indicadores de nivel de servicio (SLI) con los objetivos de nivel de servicio (SLO) y los acuerdos de nivel de servicio (SLA), una monitorización efectiva es extremadamente importante.

Como un producto de gestión de API en la nube, Apache APISIX desacopla las preocupaciones de observabilidad de la aplicación, lo que brinda a los desarrolladores la ventaja de construir aplicaciones centrándose únicamente en la lógica del negocio, mientras que Apache APISIX se encarga de la observabilidad para la plataforma de su elección.

Apache APISIX recientemente lanzó un nuevo plugin: APISIX-Datadog, para proporcionar una integración más profunda con Datadog. Este artículo presenta el plugin APISIX-Datadog y sus capacidades.

Cómo funciona el plugin APISIX-Datadog

Arquitectura del plugin APISIX-Datadog

El plugin APISIX-Datadog envía sus métricas personalizadas al servidor DogStatsD, que viene incluido con el agente de Datadog a través de una conexión UDP. DogStatsD es básicamente una implementación del protocolo StatsD. Recopila las métricas personalizadas para el agente de Apache APISIX, las agrega en un solo punto de datos y las envía al servidor Datadog configurado. Para obtener más información sobre DogStatsD, visite la documentación de DogStatsD.

Cuando APISIX-Datadog está activado, el agente de Apache APISIX exporta las siguientes métricas al servidor DogStatsD para cada ciclo de solicitud-respuesta:

Nombre de la métricaTipo StatsDDescripción
Contador de solicitudesContadorNúmero de solicitudes recibidas.
Latencia de solicitudHistogramaTiempo que toma procesar la solicitud (en milisegundos).
Latencia del upstreamHistogramaTiempo que toma desde que se envía la solicitud al servidor upstream hasta que se recibe una respuesta (en milisegundos).
Latencia de APISIXHistogramaTiempo que toma al agente de APISIX procesar la solicitud (en milisegundos).
Tamaño de entradaTemporizadorTamaño del cuerpo de la solicitud en bytes.
Tamaño de salidaTemporizadorTamaño del cuerpo de la respuesta en bytes.

Las métricas se enviarán al agente DogStatsD con las siguientes etiquetas. Si no hay un valor adecuado para alguna etiqueta en particular, simplemente se omitirá.

Nombre de la métricaDescripción
route_nameNombre especificado en la definición del esquema de la ruta. Si no está presente, se usará el ID de la ruta.
service_idSi una ruta se ha creado con la abstracción de servicio, se usará el ID de servicio específico.
consumerSi la ruta tiene un consumidor vinculado, se agregará el nombre de usuario del consumidor como etiqueta.
balancer_ipIP del balanceador de carga upstream que ha procesado la solicitud actual.
response_statusCódigo de estado de la respuesta HTTP.
schemeEsquema que se ha utilizado para hacer las solicitudes, como HTTP, gRPC, gRPCs, etc.

El plugin mantiene un búfer con un temporizador. Cuando el temporizador expira, el plugin APISIX-Datadog envía las métricas almacenadas en el búfer como un lote al servidor dogstatsd que se ejecuta localmente. Este enfoque consume menos recursos (aunque puede ser insignificante ya que los sockets UDP son muy livianos) al reutilizar el mismo socket UDP y no sobrecarga la red todo el tiempo, ya que el temporizador se puede configurar.

Pasos para ejecutar el agente de Datadog

  1. Si ya está utilizando Datadog dentro de su infraestructura, debe tener un agente de Datadog instalado en sus sistemas. Puede ser un contenedor Docker, un pod o un binario para un gestor de paquetes respectivo. En este caso, está listo para continuar. Solo asegúrese de que el puerto 8125/udp esté permitido a través del firewall (si lo hay), es decir, más específicamente, que el agente de Apache APISIX pueda alcanzar el puerto 8125 del agente de Datadog. Puede omitir esta subsección.

Para obtener más información sobre cómo instalar un agente de Datadog completo, visite aquí.

  1. Si es nuevo en Datadog
    1. Primero cree una cuenta visitando www.datadoghq.com.
    2. Genere una clave API. Generar una clave API
  2. El plugin APISIX-Datadog solo requiere el componente dogstatsd de datadog/agent, ya que el plugin envía métricas de forma asíncrona al servidor dogstatsd siguiendo el protocolo statsd a través de un socket UDP estándar. Por eso APISIX recomienda usar la imagen independiente datadog/dogstatsd en lugar de usar el agente completo. Es extremadamente liviano (solo ~11 MB de tamaño) en comparación con ~2.8 GB de la imagen datadog/agent.

Para ejecutarlo como un contenedor:

# descargar la imagen más reciente
docker pull datadog/dogstatsd:latest
# ejecutar un contenedor en segundo plano
docker run -d --name dogstatsd-agent -e DD_API_KEY=<Su clave API del paso 2> -p 8125:8125/udp  datadog/dogstatsd

Si está utilizando Kubernetes en su entorno de producción, puede implementar dogstatsd como un Daemonset o como un Pod de múltiples contenedores junto con el agente de Apache APISIX.

Cómo usar Datadog con Apache APISIX

Activar el plugin APISIX-Datadog

El siguiente es un ejemplo de cómo activar el plugin de datadog para una ruta específica. Suponemos que su agente dogstatsd ya está en funcionamiento.

# habilitar el plugin para una ruta 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"
}'

Ahora, cualquier solicitud al punto final /hello generará las métricas anteriores y las enviará al servidor DogStatsD local del agente de Datadog.

Configuración personalizada

En la configuración predeterminada, el plugin espera que el servicio dogstatsd esté disponible en 127.0.0.1:8125. Si desea actualizar la configuración, actualice los metadatos del plugin:

Esquema de metadatos

NombreTipoRequeridoPredeterminadoDescripción
hostsstringopcional"127.0.0.1"Dirección del servidor DogStatsD
portintegeropcional8125Puerto del servidor DogStatsD
namespacestringopcional"apisix"Prefijo para todas las métricas personalizadas enviadas por el agente de APISIX. Útil para encontrar entidades en el gráfico de métricas. Por ejemplo, (apisix.request.counter)
constant_tagsarrayopcional["source
"]
Etiquetas estáticas incrustadas en las métricas generadas. Útil para agrupar métricas sobre ciertas señales.

Para obtener más información sobre cómo escribir etiquetas de manera efectiva, visite aquí

Haga una solicitud al punto final /apisix/admin/plugin_metadata con los metadatos actualizados de la siguiente manera:

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 del plugin

De manera similar, hay algunos atributos que se pueden ajustar al habilitar el plugin.

NombreTipoRequeridoPredeterminadoVálidoDescripción
batch_max_sizeintegeropcional5000[1,...]Tamaño máximo del búfer de cada lote
inactive_timeoutintegeropcional5[1,...]Tiempo máximo en segundos antes de que el búfer se vacíe si está inactivo
buffer_durationintegeropcional60[1,...]Tiempo máximo en segundos de la entrada más antigua en un lote antes de que se procese
max_retry_countintegeropcional1[1,...]Número máximo de reintentos si una entrada no llega al servidor dogstatsd

Como todos los campos son opcionales y si no se establece ningún atributo, el plugin de datadog se instancia con los valores predeterminados. Para actualizar cualquier atributo, simplemente actualice la ruta, servicio o consumidor correspondiente con el valor del atributo actualizado. Por ejemplo, el siguiente código modifica el tamaño máximo del búfer de cada lote:

'{
...
"plugins": {
    "datadog": {
        "batch_max_size": 10
    }
}
... }'

Desactivar el plugin APISIX-Datadog

Ahora, para desactivar el plugin, simplemente elimine la configuración JSON correspondiente en la configuración del plugin para deshabilitar datadog. Los plugins de APISIX se recargan en caliente, por lo que no es necesario reiniciar APISIX.

# deshabilitar el plugin para una ruta
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: