Monitoreo en la Nube con Datadog en Apache APISIX
API7.ai
November 12, 2021
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
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étrica | Tipo StatsD | Descripción |
---|---|---|
Contador de solicitudes | Contador | Número de solicitudes recibidas. |
Latencia de solicitud | Histograma | Tiempo que toma procesar la solicitud (en milisegundos). |
Latencia del upstream | Histograma | Tiempo que toma desde que se envía la solicitud al servidor upstream hasta que se recibe una respuesta (en milisegundos). |
Latencia de APISIX | Histograma | Tiempo que toma al agente de APISIX procesar la solicitud (en milisegundos). |
Tamaño de entrada | Temporizador | Tamaño del cuerpo de la solicitud en bytes. |
Tamaño de salida | Temporizador | Tamañ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étrica | Descripción |
---|---|
route_name | Nombre especificado en la definición del esquema de la ruta. Si no está presente, se usará el ID de la ruta. |
service_id | Si una ruta se ha creado con la abstracción de servicio, se usará el ID de servicio específico. |
consumer | Si la ruta tiene un consumidor vinculado, se agregará el nombre de usuario del consumidor como etiqueta. |
balancer_ip | IP del balanceador de carga upstream que ha procesado la solicitud actual. |
response_status | Código de estado de la respuesta HTTP. |
scheme | Esquema 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
- 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í.
- Si es nuevo en Datadog
- Primero cree una cuenta visitando www.datadoghq.com.
- Genere una clave API.
- 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 independientedatadog/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 imagendatadog/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
Nombre | Tipo | Requerido | Predeterminado | Descripción |
---|---|---|---|---|
hosts | string | opcional | "127.0.0.1" | Dirección del servidor DogStatsD |
port | integer | opcional | 8125 | Puerto del servidor DogStatsD |
namespace | string | opcional | "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_tags | array | opcional | ["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.
Nombre | Tipo | Requerido | Predeterminado | Válido | Descripción |
---|---|---|---|---|---|
batch_max_size | integer | opcional | 5000 | [1,...] | Tamaño máximo del búfer de cada lote |
inactive_timeout | integer | opcional | 5 | [1,...] | Tiempo máximo en segundos antes de que el búfer se vacíe si está inactivo |
buffer_duration | integer | opcional | 60 | [1,...] | Tiempo máximo en segundos de la entrada más antigua en un lote antes de que se procese |
max_retry_count | integer | opcional | 1 | [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
}
}
}'