1. Importance stratégique de l'Entity Selector
L'Entity Selector est la clé de voûte de la plateforme Dynatrace pour cibler et isoler des composants spécifiques de votre infrastructure dynamique.
Pourquoi est-ce indispensable ?
Que ce soit pour définir le périmètre d'une Management Zone, configurer des alertes ciblées, créer des tableaux de bord dynamiques ou interroger l'API REST v2, l'Entity Selector est incontournable. Il permet de passer d'une gestion statique (sélection manuelle d'hôtes ou de services) à une gestion dynamique basée sur les attributs réels de votre environnement. Il garantit ainsi une observabilité automatisée et résiliente face aux changements continus (déploiements, auto-scaling, etc.).
2. Rappel de la Syntaxe et des Opérateurs Clés
Un Entity Selector est une chaîne de caractères permettant de filtrer les entités. Les critères sont séparés par des virgules, qui font office d'opérateur logique ET (AND).
Les opérateurs fondamentaux
- type() : Filtre par type d'entité (ex:
HOST,SERVICE,APPLICATION,PROCESS_GROUP). - tag() : Filtre par étiquette associée à l'entité. Peut cibler une clé simple ou une paire clé:valeur (ex:
tag("ENV:PROD")). - entityName() : Filtre par le nom de l'entité.
- not() : L'opérateur de négation pour exclure explicitement certaines entités.
3. Règle d'or de conception (Passage à l'échelle)
Pour garantir des performances optimales et une maintenance simplifiée, une règle architecturale stricte doit être respectée dans vos configurations.
Bannir la rigidité des IDs
Règle d'or (Passage à l'échelle) : Pour chaque règle de sélection, vous devez impérativement définir soit unEntity ID(identifiant technique unique), soit unEntity type.
Bonne pratique pour la production : L'usage desEntity IDsfixes est à proscrire en production car cette approche est trop spécifique, rigide, et ne survit pas au redéploiement d'une ressource. Pour garantir une gestion à grande échelle, compatible avec le cycle de vie dynamique de vos infrastructures, utilisez exclusivement l'Entity type(ex:type("HOST")) combiné à des attributs ou des tags dynamiques.
Les critères secondaires
- type("ENTITE") : Spécifie le type d'élément (ex:
HOST,SERVICE,CONTAINER_GROUP_INSTANCE). - entityName(...) : Filtre selon le nom d'affichage de la ressource.
- tag(...) : Isole les éléments portant des clés/valeurs spécifiques.
- healthState(...) : Filtre par état de santé actuel (
HEALTHY,UNHEALTHY). - entityAttribute(...) : Évalue des propriétés système intrinsèques de l'entité.
Opérateurs textuels et sémantiques
Conseil de performance : Privilégiez l'utilisation des opérateurs dans cet ordre pour optimiser le temps de réponse : d'abordequalsouin(les plus rapides), ensuitestartsWithouendsWith. Utilisezcontainsuniquement en dernier recours, car il est très gourmand en ressources matérielles.
| Opérateur | Usage / Description | Exemple Typique |
|---|---|---|
| equals | Correspondance exacte et stricte de la chaîne. | entityName.equals("Frontend-API-01")osType("LINUX") |
| startsWith | Correspondance basée sur le préfixe textuel. | entityName.startsWith("prod-") |
| endsWith | Correspondance basée sur le suffixe textuel. | entityName.endsWith("-db") |
| contains | Correspondance partielle (contient la sous-chaîne). | entityName.contains("api") |
| in | Évaluation d'appartenance à une liste de valeurs. | type.in("HOST","CONTAINER_GROUP") |
| caseSensitive | Rend la correspondance textuelle sensible ou insensible à la casse. | entityName.equals("prod", caseSensitive:false) |
| exists | Filtre les entités possédant un tag ou un attribut spécifique. | tag.exists("ENV") |
| not | Négation logique permettant d'exclure les entités correspondant au critère. | not(tag("Status:Maintenance")) |
| healthState | Filtre selon l'état de santé actuel (HEALTHY, UNHEALTHY). | healthState("UNHEALTHY") |
| Relationships (from/to) | Navigue dans la topologie Smartscape. Un relationship (ex: runsOn, calls) est utilisé avec fromRelationships pour cibler les entités sources (ex: un service qui appelle un autre) ou avec toRelationships pour cibler les entités de destination (ex: un hôte sur lequel un service s'exécute). | fromRelationships.runsOn(type("HOST"))(Cible les services qui tournent sur un hôte) toRelationships.runsOn(type("SERVICE"))(Cible les hôtes qui exécutent un service) |
4. Exemples Pratiques : Scénarios de Combinaisons Avancées
Voici quelques cas d'usage fréquents illustrant la puissance de combinaison des sélecteurs.
Scénario A : Cibler la production, en excluant un sous-projet
Vous souhaitez sélectionner tous les hôtes de production, mais exclure ceux spécifiquement dédiés aux tests de charge :
type("HOST"),tag("ENV:PROD"),not(tag("PROJECT:LOADTEST"))
Scénario B : Regroupement de microservices
Vous souhaitez isoler l'ensemble des services liés au système de paiement, fonctionnant dans l'écosystème Kubernetes :
type("SERVICE"),entityName("EasytravelService")
Scénario C : Cibler les processus technologiques d'une équipe
Vous voulez lister tous les groupes de processus gérés par l'équipe Backend, qui exécutent du Java :
type("PROCESS_GROUP"),tag("Owner:Backend"),softwareTechnologies("Java")
Scénario D : Isoler les applications Web par région
Sélectionner les applications Web (RUM) déployées pour la région européenne :
type("APPLICATION"),property("Region:EMEA")
Scénario E : Cibler des bases de données spécifiques
Sélectionner tous les services de base de données Oracle en production :
type("SERVICE"),property("db_type:oracle"),tag("ENV:PROD")
Scénario F : Hôtes Cloud dans une région spécifique
Filtrer les machines virtuelles hébergées sur AWS dans la région 'eu-west-1'. L'utilisation de la propriété cloudType est plus robuste qu'un tag car elle est détectée automatiquement par Dynatrace.
type("HOST"),cloudType("EC2"),tag("Region:eu-west-1")
Scénario G : Noeuds Kubernetes Worker
Isoler uniquement les nœuds worker de votre cluster Kubernetes de production :
type("KUBERNETES_NODE"),tag("Role:worker"),tag("ENV:PROD")
Scénario H : Exclure des entités en maintenance
Sélectionner tous les services actifs de votre infrastructure en excluant explicitement ceux marqués avec un tag de maintenance :
type("SERVICE"),not(tag("Status:Maintenance"))
Scénario I : Filtrer au sein d'une Management Zone existante
Cibler uniquement les hôtes qui appartiennent déjà à une zone de gestion 'MZ_Finance' pour affiner une alerte :
type("HOST"),mzName("MZ_Finance")
Scénario J : Regrouper les applications Mobiles
Vous souhaitez isoler l'ensemble de vos applications mobiles fonctionnant sous iOS. La propriété osType est directement extraite par Dynatrace et est donc plus fiable qu'un tag manuel.
type("MOBILE_APPLICATION"),osType("IOS")
Scénario K : Cibler plusieurs types d'entités avec l'opérateur 'in'
Sélectionner à la fois les hôtes et les groupes de processus qui partagent le tag 'ENV:PROD' :
type.in("HOST","PROCESS_GROUP"),tag("ENV:PROD")
Scénario L : Recherche insensible à la casse avec 'caseSensitive'
Retrouver un service spécifique sans se soucier de la casse exacte de son nom :
type("SERVICE"),entityName.equals("frontend-api", caseSensitive:false)
Scénario M : Vérifier la présence d'un tag avec 'exists'
Isoler tous les hôtes sur lesquels le tag 'Owner' a été défini, quelle que soit sa valeur :
type("HOST"),tag.exists("Owner")
Scénario N : Isoler les entités en état d'alerte avec 'healthState'
Cibler uniquement les services de production qui rencontrent actuellement un problème (état non sain) :
type("SERVICE"),tag("ENV:PROD"),healthState("UNHEALTHY")
Scénario O : Topologie et dépendances avec 'toRelationships.calls'
Sélectionner tous les services qui effectuent des appels vers un service de base de données Oracle :
type("SERVICE"),toRelationships.calls(type("SERVICE"),tag("ENV:PROD"))
5. Guide d'Exécution : Validation de la Règle via cURL
Il est impératif de valider vos sélecteurs via l'API avant de les déployer dans des règles critiques de Management Zones ou d'alerting.
Requêter l'API Entities v2
L'endpoint /api/v2/entities est utilisé pour lister les entités répondant à un Entity Selector.
Conseil de l'expert : Encodage de l'URL
C'est une étape souvent oubliée qui provoque des erreurs HTTP 400. Votre sélecteur contient des caractères spéciaux (guillemets", virgules,, ou espaces) qui doivent être encodés dans l'URL. Par exemple, les guillemets"deviennent%22et les espaces deviennent%20. Utilisez des outils ou des commandes capables d'encoder la chaîne avant de l'envoyer à l'API.
Exemple de validation avec cURL
Voici la commande pour tester le sélecteur type("HOST"),tag("ENV:PROD") de manière sécurisée (URL encodée) :
curl -X GET "https://{VOTRE_ENV}.live.dynatrace.com/api/v2/entities?entitySelector=type(%22HOST%22),tag(%22ENV:PROD%22)" \
-H "accept: application/json" \
-H "Authorization: Api-Token dt0c01.VOTRE_TOKEN..."Analysez la section totalCount et le tableau entities du JSON retourné pour valider que le ciblage est correct.
6. Évaluation et Auto-Vérification
Prenez un instant pour valider votre compréhension globale des concepts abordés.
Mini-Quiz d'auto-évaluation
- Question 1 : Quelle est la condition minimale et impérative pour qu'un Entity Selector soit valide selon la règle d'or ?
- Question 2 : Comment lie-t-on plusieurs conditions pour former une requête logique de type 'AND' ?
- Question 3 : Quel caractère URL-encodé remplace le guillemet double (
") indispensable dans vos requêtes API REST ?
Réponses :
1. Contenir explicitement un type() ou un entityId().
2. En utilisant simplement une virgule (,) entre chaque condition.
3. Le code %22.