Cette page guide les partenaires technologiques dans la création d’une intégration basée sur l’Agent Datadog, que vous pouvez publier comme intégration prête à l’emploi sur la page des intégrations ou, moyennant paiement, sur la page du Marketplace.
Une intégration basée sur l’Agent utilise l’Agent Datadog pour transmettre des données via des checks personnalisés écrits par les développeurs. Ces checks peuvent émettre des métriques, des événements et des service checks dans le compte Datadog d’un client. Bien que l’Agent puisse également transmettre des logs, cette configuration se fait en dehors du check.
Quand utiliser une intégration basée sur l’Agent
Les intégrations basées sur l’Agent sont idéales pour collecter des données à partir de systèmes ou d’applications exécutés dans un :
réseau local (LAN)
Virtual Private Cloud (VPC)
Les intégrations basées sur l’Agent doivent être publiées et déployées sous forme de package Python au format wheel (.whl).
Processus de développement
Le processus de création d’une intégration basée sur l’Agent est le suivant :
Rejoindre le réseau de partenaires Datadog
Faites une demande pour rejoindre le réseau de partenaires Datadog. Une fois la demande acceptée, un appel de présentation sera planifié avec l’équipe Technology Partner de Datadog.
Configurer votre environnement de développement
Demandez un compte sandbox Datadog via le portail du réseau de partenaires Datadog.
Installez les outils de développement nécessaires.
Créer votre intégration
Dans votre sandbox Datadog, accédez à Developer Platform > add a new listing.
Renseignez les informations décrivant votre intégration.
Créer votre check de l’Agent et tester votre intégration
Créez votre check de l’Agent en suivant ces étapes.
Soumettre pour examen
Soumettez le contenu de votre intégration via la plateforme de développement.
Ouvrez une pull request GitHub contenant le code de votre check de l’Agent.
L’équipe Datadog planifiera une démonstration finale pour valider votre intégration.
Prérequis
Les outils requis pour développer une intégration avec l’Agent Datadog incluent les éléments suivants :
Sélectionnez un onglet pour afficher les instructions de création d'une intégration basée sur l'Agent, à publier sur la page des intégrations ou sur la page du Marketplace.
Pour créer une intégration prête à l’emploi :
Créez un répertoire dd :
mkdir $HOME/dd &&cd$HOME/dd
Le kit de développement Datadog suppose que vous travaillez dans le répertoire $HOME/dd/. Ce n’est pas obligatoire, mais utiliser un autre répertoire nécessite des étapes de configuration supplémentaires.
L’outil de développement d’intégrations avec l’Agent permet de créer l’ossature de votre intégration en générant les ressources et les métadonnées de la tuile. Pour consulter des instructions d’installation, consultez la section Installer l’outil de développement d’intégrations avec l’Agent.
Pour configurer l’outil pour le référentiel integrations-extras :
Si votre référentiel integrations-extras se trouve ailleurs que dans $HOME/dd/, vous pouvez modifier le fichier de configuration de ddev en conséquence :
ddev config set repos.extras "/path/to/integrations-extras"
Définissez integrations-extras comme référentiel de travail par défaut :
mkdir $HOME/dd```La commande du kit de développement Datadog s'attend à ce que vous travailliez dans le répertoire `$HOME/dd/`. Ce n'est pas obligatoire, mais travailler dans un répertoire différent nécessite de suivre d'autres étapes de configuration.
Une fois l’accès accordé au référentiel Marketplace, créez le répertoire dd et clonez le référentiel marketplace :
Installer et configurer le kit de développement Datadog
L’outil de développement d’intégrations avec l’Agent permet de créer l’ossature de votre intégration en générant les ressources et les métadonnées de la tuile. Pour consulter des instructions d’installation, consultez la section Installer l’outil de développement d’intégrations avec l’Agent.
Une fois l’outil installé, configurez-le pour le référentiel Marketplace.
Définissez marketplace comme référentiel de travail par défaut :
ddev config set repos.marketplace $HOME/dd/marketplace
ddev config set repo marketplace
Si vous avez utilisé un répertoire autre que $HOME/dd pour dupliquer le répertoire marketplace, utilisez la commande suivante pour définir votre référentiel de travail :
ddev config set repos.marketplace <PATH/TO/MARKETPLACE>
ddev config set repo marketplace
Créer votre intégration
Après avoir téléchargé Docker, installé une version appropriée de Python et préparé votre environnement de développement, vous pouvez commencer à créer une intégration basée sur l’Agent.
Les instructions suivantes utilisent un exemple d’intégration appelé Awesome. Vous pouvez suivre l’exemple en vous appuyant sur le code de Awesome, ou remplacer Awesome par votre propre nom d’intégration dans les commandes. Par exemple, utilisez ddev create <your-integration-name> à la place de ddev create Awesome
Créer une architecture pour votre intégration
La commande ddev create exécute un outil interactif qui crée la structure de fichiers et de chemins générale (ou architecture) nécessaire pour toute intégration basée sur l’Agent.
Avant de créer le premier répertoire de votre intégration, effectuez un test d’exécution en appliquant le flag -n/--dry-run afin de ne rien écrire sur le disque :
ddev create -n Awesome
Cette commande affiche le chemin où les fichiers auraient été écrits, ainsi que la structure. Vérifiez que le chemin dans la première ligne de la sortie correspond à l’emplacement de votre référentiel.
Exécutez la commande sans le flag -n. L’outil vous demande de fournir un e-mail et un nom, avant de créer les fichiers dont vous avez besoin pour commencer à développer une intégration.
Si vous créez une intégration pour le Marketplace, assurez-vous que votre répertoire suit le format {nom du partenaire}_{nom de l integration}.
ddev create Awesome
Écrire un check de l’Agent
Au cœur de chaque intégration basée sur l’Agent se trouve un check de l’Agent qui collecte régulièrement des informations et les envoie à Datadog.
Les checks héritent de la classe de base AgentCheck et doivent respecter les conditions suivantes :
Les intégrations exécutées sur l’Agent Datadog v7 ou version ultérieure doivent être compatibles avec Python 3. Celles exécutées sur les Agents v5 et v6 utilisent toujours Python 2.7
Les checks doivent être dérivés de AgentCheck.
Les checks doivent fournir une méthode avec la signature check(self, instance).
Les checks se présentent sous la forme de packages Python classiques stockés dans l’espace de nommage datadog_checks. Par exemple, le code pour Awesome se trouve dans le répertoire awesome/datadog_checks/awesome/.
Le nom du package doit être le même que celui du check.
Aucune restriction n’est appliquée quant au nom des modules Python dans ce package, ni quant au nom de la classe qui implémente le check.
Implémenter la logique du check
Dans l’exemple Awesome, le check de l’Agent comprend un check de service appelé awesome.search qui recherche une chaîne de caractères sur une page web. Le résultat est OK si la chaîne est trouvée, WARNING si la page est accessible mais la chaîne absente, et CRITICAL si la page est inaccessible.
Pour apprendre à envoyer des métriques avec votre check de l’Agent, consultez la section check custom d’Agent.
Le code contenu dans awesome/datadog_checks/awesome/check.py ressemble à ceci :
check.py
demandesd'importationfromdatadog_checks.baseimportAgentCheck,ConfigurationErrorclassAwesomeCheck(AgentCheck):"""AwesomeCheck est dérivé d'AgentCheck et fournit la méthode de check requise."""defcheck(self,instance):url=instance.get('url')search_string=instance.get('search_string')# Il convient de réaliser quelques contrôles d'intégrité basiques.# Soyez aussi précis que possible avec les exceptions.ifnoturlornotsearch_string:raiseConfigurationError('Configuration error, please fix awesome.yaml')try:response=requests.get(url)response.raise_for_status()# En cas de problème sérieuxexceptExceptionase:# Un message plus spécifique serait préférable.self.service_check('awesome.search',self.CRITICAL,message=str(e))# La page est accessibleelse:# La chaîne recherchée est présenteifsearch_stringinresponse.text:self.service_check('awesome.search',self.OK)# La chaîne recherchée est introuvableelse:self.service_check('awesome.search',self.WARNING)
Pour en savoir plus sur la classe Python de base, consultez la section Anatomie d’un check Python (en anglais).
pytest et hatch sont utilisés pour exécuter les tests. Des tests sont requis pour pouvoir publier votre intégration.
Écrire un test d’unité
La première partie de la méthode check de l’intégration Awesome récupère et vérifie deux éléments dans le fichier de configuration. C’est un bon candidat pour un test d’unité.
Ouvrez le fichier awesome/tests/test_awesome.py et remplacez son contenu par ce qui suit :
test_awesome.py
importpytest# N'oubliez pas d'importer votre intégrationfromdatadog_checks.awesomeimportAwesomeCheckfromdatadog_checks.baseimportConfigurationError@pytest.mark.unitdeftest_config():instance={}c=AwesomeCheck('awesome',{},[instance])# instance videwithpytest.raises(ConfigurationError):c.check(instance)# url uniquementwithpytest.raises(ConfigurationError):c.check({'url':'http://foobar'})# chaîne de recherche uniquementwithpytest.raises(ConfigurationError):c.check({'search_string':'foo'})# aucune erreur ne devrait survenirc.check({'url':'http://foobar','search_string':'foo'})
pytest permet d’utiliser ce que l’on appelle des marqueurs, qui servent à regrouper les tests par catégorie. Notez que le marqueur unit a été appliqué à test_config.
L’architecture du projet est conçue pour exécuter tous les tests situés dans awesome/tests. Pour lancer les tests, exécutez la commande suivante :
Le kit utilise docker pour lancer un conteneur NGINX et permet au check de récupérer la page d’accueil.
Pour créer un environnement pour le test d’intégration, créez un fichier docker-compose à l’emplacement awesome/tests/docker-compose.yml avec le contenu suivant :
Ouvrez ensuite le fichier awesome/tests/conftest.py et remplacez le contenu par ce qui suit :
conftest.py
importosimportpytestfromdatadog_checks.devimportdocker_run,get_docker_hostname,get_hereURL='http://{}:8000'.format(get_docker_hostname())SEARCH_STRING='Thank you for using nginx.'INSTANCE={'url':URL,'search_string':SEARCH_STRING}@pytest.fixture(scope='session')defdd_environment():compose_file=os.path.join(get_here(),'docker-compose.yml')# On accomplit ici 3 choses :## 1. Lancer les services définis dans le fichier compose# 2. Attendre que l'URL soit disponible avant de lancer les tests# 3. Démonter les services lorsque les tests sont terminéswithdocker_run(compose_file,endpoints=[URL]):yieldINSTANCE@pytest.fixturedefinstance():returnINSTANCE.copy()
Ajouter un test d’intégration
Après avoir configuré un environnement pour le test d’intégration, ajoutez un test d’intégration au fichier awesome/tests/test_awesome.py :
test_awesome.py
@pytest.mark.integration@pytest.mark.usefixtures('dd_environment')deftest_service_check(aggregator,instance):c=AwesomeCheck('awesome',{},[instance])# le check doit renvoyer OKc.check(instance)aggregator.assert_service_check('awesome.search',AwesomeCheck.OK)# le check doit renvoyer WARNINGinstance['search_string']='Apache'c.check(instance)aggregator.assert_service_check('awesome.search',AwesomeCheck.WARNING)
Pour un développement plus rapide, lancez les tests d’intégration uniquement avec l’option -m/--marker :
ddev test -m integration awesome
Votre intégration est presque terminée. Retournez dans la plateforme de développement de votre sandbox pour finaliser votre soumission.
Créer le wheel
Le fichier pyproject.toml fournit les métadonnées servant à compiler le package et créer le wheel. Le wheel contient tous les fichiers nécessaires au bon fonctionnement de l’intégration. Il s’agit notamment du check de l’Agent, de l’exemple de fichier de configuration et de certains artefacts générés durant la compilation du wheel.
Tous les éléments supplémentaires, comme les fichiers de métadonnées, ne sont pas destinés à être inclus dans la wheel. Ils sont utilisés ailleurs dans la plateforme Datadog et son écosystème.
Une fois votre fichier pyproject.toml prêt, créez une wheel en utilisant l’une des options suivantes :
Avec l’outil ddev (conseillé) : ddev release build <NOM_INTÉGRATION>.
Sans l’outil ddev : cd <RÉPERTOIRE_INTÉGRATION> && pip wheel . --no-deps --wheel-dir dist.
Installer le wheel
La wheel s’installe à l’aide de la commande integration de l’Agent, disponible à partir de la version 6.10.0 de l’Agent. Selon votre environnement, vous devrez peut-être exécuter cette commande avec un utilisateur spécifique ou des privilèges particuliers :
Suivez les étapes décrites dans la plateforme de développement pour soumettre le code de votre check de l’Agent à une relecture sur GitHub. La pull request sera publiée avec votre intégration une fois approuvée.
Mettre à jour votre intégration
Si vous modifiez ou ajoutez du code d’intégration, une mise à jour de version est requise.
Si vous modifiez ou ajoutez du contenu dans le fichier README, des informations dans le manifeste ou des ressources comme des dashboards ou des modèles de monitor, aucune mise à jour de version n’est nécessaire.
Mettre à jour la version d’une intégration
En plus des modifications de code, les éléments suivants sont requis lors d’une mise à jour de version :
Mettre à jour le fichier __about__.py pour refléter le nouveau numéro de version. Ce fichier se trouve dans le répertoire de votre intégration sous /datadog_checks/<your_check_name>/__about__.py.
Ajouter une entrée aux notes de version dans la plateforme de développement, en suivant le format requis :
## Version Number / Date in YYYY-MM-DD
***Added***:
* New feature
* New feature
***Fixed***:
* Bug fix
* Bug fix
***Changed***:
* Feature update
* Feature update
***Removed***:
* Feature removal
* Feature removal
Mettre à jour toutes les occurrences du numéro de version mentionnées dans les instructions d’installation et ailleurs. Les instructions d’installation incluent souvent le numéro de version, qui doit donc être actualisé.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: