Surveillance du cloud avec Datadog dans Apache APISIX

API7.ai

November 12, 2021

Ecosystem

image de couverture

À mesure que la complexité des produits informatiques et du développement d'applications destinées aux consommateurs augmente, la surveillance devient une partie intégrante de toute livraison d'application. De plus, pour répondre à la demande incessante de cycles de mise à niveau rapides tout en assurant la stabilité, une performance optimisée et en maintenant un équilibre parfait entre les indicateurs de niveau de service (SLI), les objectifs de niveau de service (SLO) et les accords de niveau de service (SLA) - une surveillance efficace est extrêmement importante.

En tant que produit de gestion d'API Cloud, Apache APISIX découple les préoccupations d'observabilité de l'application, ce qui donne aux développeurs l'avantage de construire des applications en se concentrant uniquement sur la logique métier, tandis qu'Apache APISIX s'occupe de l'observabilité pour la plateforme de leur choix.

Apache APISIX a récemment publié un nouveau plugin : APISIX-Datadog, pour fournir une intégration plus profonde avec Datadog. Cet article présente le plugin APISIX-Datadog et ses fonctionnalités.

Fonctionnement du plugin APISIX-Datadog

Architecture du plugin APISIX-Datadog

Le plugin APISIX-Datadog envoie ses métriques personnalisées au serveur DogStatsD, qui est fourni avec l'agent Datadog via une connexion UDP. DogStatsD est essentiellement une implémentation du protocole StatsD. Il collecte les métriques personnalisées pour l'agent Apache APISIX, les agrège en un seul point de données et les envoie au serveur Datadog configuré. Pour en savoir plus sur DogStatsD, veuillez consulter la documentation de DogStatsD.

Lorsque APISIX-Datadog est activé, l'agent Apache APISIX exporte les métriques suivantes vers le serveur DogStatsD pour chaque cycle de réponse à une requête :

Nom de la métriqueType StatsDDescription
Compteur de requêtesCompteurNombre de requêtes reçues.
Latence des requêtesHistogrammeTemps pris pour traiter la requête (en millisecondes).
Latence en amontHistogrammeTemps pris depuis le proxy de la requête vers le serveur en amont jusqu'à la réception d'une réponse (en millisecondes).
Latence APISIXHistogrammeTemps pris par l'agent APISIX pour traiter la requête (en millisecondes).
Taille d'entréeMinuterieTaille du corps de la requête en octets.
Taille de sortieMinuterieTaille du corps de la réponse en octets.

Les métriques seront envoyées à l'agent DogStatsD avec les étiquettes suivantes. Si aucune valeur appropriée n'est disponible pour une étiquette particulière, l'étiquette sera simplement omise.

Nom de la métriqueDescription
nom_routeNom spécifié dans la définition du schéma de route. Si absent, il reviendra à la valeur de l'identifiant de route.
id_serviceSi une route a été créée avec l'abstraction de service, l'identifiant de service spécifique sera utilisé.
consommateurSi la route a un consommateur lié, le nom d'utilisateur du consommateur sera ajouté comme étiquette.
ip_balancerIP du répartiteur en amont qui a traité la requête actuelle.
statut_réponseCode de statut HTTP de la réponse.
schémaSchéma utilisé pour faire les requêtes, comme HTTP, gRPC, gRPCs, etc.

Le plugin maintient un tampon avec une minuterie. Lorsque la minuterie expire, le plugin APISIX-Datadog envoie les métriques tamponnées par lots au serveur dogstatsd local. Cette approche est moins gourmande en ressources (bien que cela puisse être insignifiant car les sockets UDP sont très légers) en réutilisant le même socket UDP et ne surcharge pas le réseau en permanence car la minuterie peut être configurée.

Étapes pour exécuter l'agent Datadog

  1. Si vous utilisez déjà Datadog dans votre infrastructure, vous devez avoir un agent datadog installé dans vos systèmes. Il peut s'agir d'un conteneur Docker, d'un pod ou d'un binaire pour un gestionnaire de paquets respectif. Dans ce cas, vous êtes prêt. Assurez-vous simplement que le port 8125/udp est autorisé à travers le pare-feu (le cas échéant), c'est-à-dire plus spécifiquement, que l'agent Apache APISIX peut atteindre le port 8125 de l'agent datadog. Vous pouvez sauter cette sous-section.

Pour en savoir plus sur l'installation d'un agent datadog complet, visitez ici.

  1. Si vous êtes nouveau sur Datadog
    1. Créez d'abord un compte en visitant www.datadoghq.com.
    2. Générez une clé API. Générer une clé API
  2. Le plugin APISIX-Datadog nécessite uniquement le composant dogstatsd de datadog/agent car le plugin envoie de manière asynchrone les métriques au serveur dogstatsd suivant le protocole statsd via un socket UDP standard. C'est pourquoi APISIX recommande d'utiliser l'image autonome datadog/dogstatsd au lieu d'utiliser l'agent complet. Elle est extrêmement légère (seulement ~11 Mo) par rapport à ~2,8 Go de l'image datadog/agent.

Pour l'exécuter en tant que conteneur :

# pull the latest image
docker pull datadog/dogstatsd:latest
# run a detached container
docker run -d --name dogstatsd-agent -e DD_API_KEY=<Votre clé API de l'étape 2> -p 8125:8125/udp  datadog/dogstatsd

Si vous utilisez Kubernetes dans votre environnement de production, vous pouvez déployer dogstatsd en tant que Daemonset ou en tant que Pod Multi-Conteneur aux côtés de l'agent Apache APISIX.

Comment utiliser Datadog avec Apache APISIX

Activer le plugin APISIX-Datadog

Voici un exemple sur la façon d'activer le plugin datadog pour une route spécifique. Nous supposons que votre agent dogstatsd est déjà en cours d'exécution.

# enable plugin for a specific route
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"
}'

Maintenant, toute requête à l'URI de point de terminaison /hello générera les métriques ci-dessus et les enverra au serveur DogStatsD local de l'agent datadog.

Configuration personnalisée

Dans la configuration par défaut, le plugin s'attend à ce que le service dogstatsd soit disponible à 127.0.0.1:8125. Si vous souhaitez mettre à jour la configuration, veuillez mettre à jour les métadonnées du plugin :

Schéma des métadonnées

NomTypeRequisPar défautDescription
hôteschaîneoptionnel"127.0.0.1"Adresse hôte du serveur DogStatsD
portentieroptionnel8125Port hôte du serveur DogStatsD
espace de nomschaîneoptionnel"apisix"Préfixe pour toutes les métriques personnalisées envoyées par l'agent APISIX. Utile pour trouver des entités pour le graphique de métriques. par exemple (apisix.request.counter)
étiquettes_constantestableauoptionnel["source
"]
Étiquettes statiques intégrées dans les métriques générées. Utile pour regrouper les métriques sur certains signaux.

Pour en savoir plus sur la manière d'écrire efficacement des étiquettes, veuillez visiter ici

Faites une requête au point de terminaison /apisix/admin/plugin_metadata avec les métadonnées mises à jour comme suit :

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"
}'

Schéma du plugin

De même, il y a quelques attributs qui peuvent être ajustés lors de l'activation du plugin.

NomTypeRequisPar défautValideDescription
taille_max_lotentieroptionnel5000[1,...]Taille maximale du tampon de chaque lot
délai_inactivitéentieroptionnel5[1,...]Âge maximum en secondes lorsque le tampon sera vidé s'il est inactif
durée_tamponentieroptionnel60[1,...]Âge maximum en secondes de la plus ancienne entrée dans un lot avant que le lot ne doive être traité
nombre_max_essaisentieroptionnel1[1,...]Nombre maximum de tentatives si une entrée ne parvient pas à atteindre le serveur dogstatsd

Comme tous les champs sont optionnels et si aucun attribut n'est défini, le plugin datadog est instancié avec les valeurs par défaut. Pour mettre à jour un attribut, mettez simplement à jour la route, le service ou le consommateur requis avec la valeur de l'attribut mise à jour. Par exemple, le code ci-dessous modifie la taille maximale du tampon de chaque lot :

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

Désactiver le plugin APISIX-Datadog

Maintenant, pour désactiver le plugin, supprimez simplement la configuration json correspondante dans la configuration du plugin pour désactiver datadog. Les plugins APISIX sont rechargés à chaud, donc il n'est pas nécessaire de redémarrer APISIX.

# disable plugin for a route
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: