Dynatrace/dynatrace-for-ai

Compétences, invites et instructions pour construire des agents IA exploitant le contexte de production Dynatrace.

Qu'est-ce que dynatrace-for-ai ?

Cette compétence fournit un ensemble complet de directives, de modèles de requêtes DQL et de workflows optimisés pour permettre aux agents IA (comme Claude Code, Cursor ou Codex) d'interagir efficacement avec les ressources AWS via la plateforme Dynatrace. Elle couvre la découverte d'inventaire, l'analyse de réseau VPC, la surveillance de bases de données, l'optimisation des coûts, la sécurité et la conformité, la gestion des ressources serverless et conteneurisées, ainsi que la topologie des équilibreurs de charge. Le contenu est structuré en sections claires avec des exemples de requêtes prêts à l'emploi, des champs communs détaillés et des règles de nommage des métriques. L'utilisateur peut charger des fichiers de référence spécialisés (répertoire `references/`) pour des cas d'usage avancés comme la planification de capacité, la sécurité ou la surveillance de bases de données. Conçue pour une divulgation progressive, elle permet à l'agent de résoudre 80% des cas courants avec les seules instructions de base, et d'approfondir si nécessaire. Supportée par Dynatrace Smartscape et DQL, elle s'applique à tous les types d'entités AWS (`AWS_EC2_INSTANCE`, `AWS_RDS_DBINSTANCE`, etc.) et expose les relations entre elles via des traversées de graphe.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add Dynatrace/dynatrace-for-ai

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Infrastructure Cloud AWS

Surveillez et analysez les ressources AWS à l'aide de Smartscape Dynatrace et de DQL. Interrogez les services AWS, optimisez les coûts, gérez la sécurité et planifiez la capacité de votre infrastructure AWS.

Quand utiliser cette compétence

Utilisez cette compétence lorsque l'utilisateur doit travailler avec des ressources AWS dans Dynatrace. Chargez le fichier de référence correspondant au type de tâche :

  • Inventaire : "Affiche-moi toutes les instances EC2 dans us-east-1"
  • Réseau : "Trouve toutes les ressources dans le VPC vpc-abc123"
  • Base de données : "Liste toutes les instances RDS avec Multi-AZ activé"
  • Serverless : "Affiche les fonctions Lambda avec accès VPC"
  • Coût : "Trouve les volumes EBS non attachés pour réduire les coûts"
  • Sécurité : "Identifie les bases de données accessibles publiquement"
  • Conformité : "Trouve les ressources manquant de balise Environment"
  • Capacité : "Analyse l'utilisation des IP de sous-réseau"
  • Dépannage : "Cartographie l'équilibreur de charge vers les instances via les groupes cibles"
  • Analyse de problème : "Qu'est-ce qui a changé avant ce problème AWS ?" / "Quels événements ont affecté cette ressource ?"
  • Contexte de charge de travail : "Cette instance est-elle derrière un équilibreur de charge, dans un cluster EKS ou gérée par ECS ?"
  • Événements : "Y a-t-il eu des événements récents dans AWS affectant cette ressource ?"

Concepts clés

Types d'entités

Les ressources AWS utilisent le préfixe AWS_* et peuvent être interrogées via la fonction smartscapeNodes. Toutes les entités AWS sont automatiquement découvertes et modélisées dans Smartscape Dynatrace.

Calcul : AWS_EC2_INSTANCE, AWS_LAMBDA_FUNCTION, AWS_ECS_CLUSTER, AWS_ECS_SERVICE, AWS_EKS_CLUSTER Réseau : AWS_EC2_VPC, AWS_EC2_SUBNET, AWS_EC2_SECURITYGROUP, AWS_EC2_NATGATEWAY, AWS_EC2_VPCENDPOINT Base de données : AWS_RDS_DBINSTANCE, AWS_RDS_DBCLUSTER, AWS_DYNAMODB_TABLE, AWS_ELASTICACHE_CACHECLUSTER Stockage : AWS_S3_BUCKET, AWS_EC2_VOLUME, AWS_EFS_FILESYSTEM Équilibrage de charge : AWS_ELASTICLOADBALANCINGV2_LOADBALANCER, AWS_ELASTICLOADBALANCINGV2_TARGETGROUP Messagerie : AWS_SQS_QUEUE, AWS_SNS_TOPIC, AWS_EVENTS_EVENTBUS, AWS_MSK_CLUSTER

Champs AWS courants

Toutes les entités AWS incluent :

  • aws.account.id - Identifiant du compte AWS
  • aws.region - Région AWS (ex. : us-east-1)
  • aws.resource.id - Identifiant unique de la ressource
  • aws.resource.name - Nom de la ressource
  • aws.arn - Amazon Resource Name
  • aws.vpc.id - Identifiant VPC (pour les ressources attachées à un VPC)
  • aws.subnet.id - Identifiant de sous-réseau
  • aws.availability_zone - Zone de disponibilité
  • aws.security_group.id - ID des groupes de sécurité (tableau)
  • tags - Balises de ressource (utilisez tags[TagName])

Champs AWS sur les logs et bizevents

Les logs d'origine AWS (fetch logs) portent ces champs — aucune exploration nécessaire :

  • aws.region, aws.account.id, aws.service, aws.log_group, aws.log_stream
  • Plus les champs de log standard : content, loglevel, timestamp, k8s.*, dt.smartscape.*

Les bizevents d'origine AWS (fetch bizevents) portent :

  • aws.region, aws.account.id, event.type, event.provider

Utilisez filter isNotNull(aws.region) pour filtrer les enregistrements AWS.

Types de relations

Les entités AWS utilisent ces types de relations :

  • is_attached_to - Attachement exclusif (ex. : volume vers instance)
  • uses - Relation de dépendance (ex. : instance utilise un groupe de sécurité)
  • runs_on - Relation verticale (ex. : instance s'exécute sur une AZ)
  • is_part_of - Composition (ex. : instance dans un cluster)
  • belongs_to - Agrégation (ex. : service appartient à un cluster)
  • balances - Équilibrage de charge (ex. : groupe cible équilibre les instances)
  • balanced_by - Relation d'équilibrage inverse (ex. : équilibreur de charge équilibré par un groupe cible)

Convention de nommage des métriques AWS

Dynatrace ingère les métriques AWS CloudWatch selon ce modèle :

cloud.aws.<service>.<MetricName>.By.<DimensionName>

<service> est le nom du service AWS en minuscules, <MetricName> est le nom de la métrique CloudWatch (casse conservée), et <DimensionName> est la dimension CloudWatch.

Exemples : cloud.aws.ec2.CPUUtilization.By.InstanceId, cloud.aws.lambda.Invocations.By.FunctionName, cloud.aws.rds.CPUUtilization.By.DBInstanceIdentifier

Utilisez timeseries, pas fetch, pour ces métriques. Groupez par dt.smartscape_source.id pour diviser par entité.

→ Voir references/metrics-performance.md pour le catalogue complet des métriques par service avec des modèles de requêtes DQL.


Workflows clés

1. Découverte des ressources AWS

Obtenez toutes les ressources AWS par type :

smartscapeNodes "AWS_*"
| summarize count = count(), by: {type}
| sort count desc

Filtrez par compte et région :

smartscapeNodes "AWS_*"
| filter aws.account.id == "123456789012" and aws.region == "us-east-1"
| fields type, name, aws.resource.id

Utilisation des balises pour filtrer :

smartscapeNodes "AWS_*"
| filter tags[Environment] == "production"
| summarize count = count(), by: {type, aws.region}

→ Pour les modèles d'inventaire complets, voir references/resource-management.md

2. Analyse réseau VPC

Listez tous les VPC :

smartscapeNodes "AWS_EC2_VPC"
| fields name, aws.account.id, aws.region, aws.vpc.id

Trouvez les ressources dans un VPC :

smartscapeNodes "AWS_*"
| filter aws.vpc.id == "vpc-0be61db7c5d2d1bd1"
| summarize resource_count = count(), by: {type, aws.subnet.id}
| sort resource_count desc

Analysez l'utilisation des groupes de sécurité :

smartscapeNodes "AWS_EC2_INSTANCE"
| filter contains(aws.security_group.id, "sg-abc123")
| fields name, aws.resource.id, aws.vpc.id, aws.subnet.id

→ Pour le réseau VPC, voir references/vpc-networking-security.md → Pour les modèles de groupes de sécurité, voir references/security-compliance.md

3. Surveillance des bases de données

Listez toutes les instances RDS :

smartscapeNodes "AWS_RDS_DBINSTANCE"
| fields name, aws.account.id, aws.region, aws.vpc.id, aws.availability_zone

Trouvez les bases de données Multi-AZ :

smartscapeNodes "AWS_RDS_DBINSTANCE"
| parse aws.object, "JSON:awsjson"
| fieldsAdd multiAZ = awsjson[configuration][multiAZ]
| filter multiAZ == true
| fields name, aws.resource.id, aws.region

Groupez par type de moteur :

smartscapeNodes "AWS_RDS_DBINSTANCE"
| parse aws.object, "JSON:awsjson"
| fieldsAdd engine = awsjson[configuration][engine]
| summarize db_count = count(), by: {engine, aws.region}
| sort db_count desc

→ Pour la surveillance des bases de données, voir references/database-monitoring.md

4. Charges de travail serverless et conteneurisées

Listez les fonctions Lambda :

smartscapeNodes "AWS_LAMBDA_FUNCTION"
| fields name, aws.account.id, aws.region, aws.vpc.id

Trouvez les services ECS dans un cluster :

smartscapeNodes "AWS_ECS_SERVICE"
| traverse "belongs_to", "AWS_ECS_CLUSTER"
| fields name, aws.resource.id, aws.region

Listez les clusters EKS :

smartscapeNodes "AWS_EKS_CLUSTER"
| fields name, aws.account.id, aws.region, aws.vpc.id

→ Pour le serverless, voir references/serverless-containers.md → Pour les conteneurs, voir references/serverless-containers.md

5. Topologie de l'équilibreur de charge

Cartographie complète de l'équilibreur de charge vers les instances :

smartscapeNodes "AWS_ELASTICLOADBALANCINGV2_LOADBALANCER"
| parse aws.object, "JSON:awsjson"
| fieldsAdd dnsName = awsjson[configuration][dnsName], scheme = awsjson[configuration][scheme]
| filter scheme == "internet-facing"
| traverse "balanced_by", "AWS_ELASTICLOADBALANCINGV2_TARGETGROUP", direction:backward, fieldsKeep:{dnsName, id}
| fieldsAdd targetGroupName = aws.resource.name
| traverse "balances", "AWS_EC2_INSTANCE", fieldsKeep: {targetGroupName, id}
| fieldsAdd loadBalancerDnsName = dt.traverse.history[-2][dnsName],
            loadBalancerId = dt.traverse.history[-2][id],
            targetGroupId = dt.traverse.history[-1][id]

→ Pour l'équilibrage de charge, voir references/load-balancing-api.md

6. Optimisation des coûts

Trouvez les volumes EBS non attachés :

smartscapeNodes "AWS_EC2_VOLUME"
| parse aws.object, "JSON:awsjson"
| fieldsAdd state = awsjson[configuration][state]
| filter state == "available"
| fields name, aws.resource.id, aws.availability_zone, aws.account.id

Analysez les coûts EBS par type :

smartscapeNodes "AWS_EC2_VOLUME"
| parse aws.object, "JSON:awsjson"
| fieldsAdd volumeType = awsjson[configuration][volumeType],
            size = awsjson[configuration][size],
            state = awsjson[configuration][state]
| summarize total_volumes = count(), total_size_gb = sum(size), by: {volumeType, state}
| sort total_size_gb desc

→ Pour l'optimisation des coûts, voir references/cost-optimization.md

7. Sécurité et conformité

Trouvez les bases de données accessibles publiquement :

smartscapeNodes "AWS_RDS_DBINSTANCE"
| parse aws.object, "JSON:awsjson"
| fieldsAdd publiclyAccessible = awsjson[configuration][publiclyAccessible]
| filter publiclyAccessible == true
| fields name, aws.resource.id, aws.vpc.id, aws.account.id

Rayon d'impact d'un groupe de sécurité :

smartscapeNodes "AWS_EC2_INSTANCE"
| traverse "uses", "AWS_EC2_SECURITYGROUP"
| summarize instance_count = count(), by: {aws.resource.name, aws.vpc.id}
| sort instance_count desc
| limit 20

→ Pour la sécurité, voir references/security-compliance.md

8. Propriété des ressources et balisage

Trouvez les ressources non balisées :

smartscapeNodes "AWS_*"
| filter isNull(tags)
| fields type, name, aws.resource.id, aws.account.id, aws.region

Répartition des coûts par centre de coûts :

smartscapeNodes "AWS_*"
| filter isNotNull(tags[CostCenter])
| summarize resource_count = count(), by: {tags[CostCenter], type}
| sort resource_count desc

→ Pour la propriété des ressources, voir references/resource-ownership.md


Modèles de requêtes courants

ModèleGabarit
DécouvertesmartscapeNodes "AWS_*" | fieldsAdd <attrs> | filter <cond> | summarize <agg>
Analyse de configurationsmartscapeNodes "AWS_<T>" | parse aws.object, "JSON:awsjson" | fieldsAdd f = awsjson[configuration][field]
TraverséesmartscapeNodes "AWS_<SRC>" | traverse "<rel>", "AWS_<TGT>"
Multi-typessmartscapeNodes "AWS_T1", "AWS_T2" | filter <cond> | summarize count(), by: {type}

Bonnes pratiques

Optimisation des requêtes

  1. Filtrez tôt par compte et région
  2. Utilisez des types d'entités spécifiques (évitez les jokers "AWS_*" quand c'est possible)
  3. Limitez les résultats avec | limit N pour l'exploration
  4. Utilisez des vérifications isNotNull() avant d'accéder à des champs imbriqués

Analyse de configuration

  1. Analysez toujours aws.object avec l'analyseur JSON : parse aws.object, "JSON:awsjson"
  2. Utilisez une dénomination cohérente des champs : fieldsAdd configField = awsjson[configuration][field]
  3. Vérifiez les valeurs nulles après l'analyse
  4. Utilisez toString() pour les objets imbriqués complexes

Champs de sécurité

  1. Les ID de groupes de sécurité sont des tableaux - utilisez contains() ou expand
  2. Analysez aws.object pour un contexte de sécurité détaillé
  3. Vérifiez publiclyAccessible, storageEncrypted et les indicateurs similaires
  4. Validez les hypothèses de rôles IAM

Stratégie de balisage

  1. Utilisez tags[TagName] pour filtrer par une valeur de balise spécifique
  2. tags est un objet JSON, pas un tableau — utilisez isNull(tags) pour les ressources non balisées, jamais arraySize(tags)
  3. Utilisez isNull(tags[TagName]) pour trouver les ressources manquant d'une balise spécifique
  4. Implémentez des conventions de nommage cohérentes pour les balises
  5. Suivez la couverture des balises avec des opérations summarize

Limitations et remarques

Limitations de Smartscape

  • La configuration des objets AWS nécessite une analyse avec parse aws.object, "JSON:awsjson"
  • Les métriques AWS sont disponibles sous forme de métriques Dynatrace utilisant la convention de nommage cloud.aws.* (voir Convention de nommage des métriques AWS)
  • La découverte des ressources dépend de la configuration de l'intégration AWS
  • La synchronisation des balises peut présenter de légers délais

Traversée des relations

  • Utilisez direction:backward pour les relations inverses (ex. : groupe cible → équilibreur de charge)
  • Utilisez fieldsKeep pour conserver des champs importants pendant la traversée
  • Accédez à l'historique de traversée avec dt.traverse.history[-N]
  • Les topologies complexes peuvent nécessiter plusieurs opérations de traversée

Conseils généraux

  • Utilisez getNodeName() pour les noms de ressources lisibles
  • Gérez les valeurs nulles avec élégance via isNotNull() et isNull()
  • Combinez les filtres de région et de compte pour les grands environnements
  • Utilisez countDistinct() pour les comptages uniques de ressources

Quand charger les références

Cette compétence utilise la divulgation progressive. Commencez ici pour 80 % des cas d'utilisation. Chargez les fichiers de référence pour des spécifications détaillées si nécessaire.

Charger vpc-networking-security.md quand :

  • Vous analysez la topologie et la connectivité VPC
  • Vous examinez les configurations de groupes de sécurité
  • Vous recherchez des ressources par groupe de sécurité
  • Vous dépannez des problèmes d'interface réseau

Charger database-monitoring.md quand :

  • Vous gérez des instances et clusters RDS
  • Vous analysez les distributions de moteurs de base de données
  • Vous vérifiez les configurations Multi-AZ
  • Vous surveillez des clusters de cache

Charger serverless-containers.md quand :

  • Vous travaillez avec des fonctions Lambda
  • Vous analysez des déploiements ECS/EKS
  • Vous étudiez la mise en réseau des conteneurs
  • Vous planifiez des migrations serverless

Charger load-balancing-api.md quand :

  • Vous cartographiez des topologies d'équilibreurs de charge
  • Vous analysez la santé des groupes cibles
  • Vous travaillez avec API Gateway
  • Vous configurez CloudFront

Charger messaging-event-streaming.md quand :

  • Vous gérez des files d'attente SQS et des sujets SNS
  • Vous analysez les bus d'événements EventBridge
  • Vous travaillez avec Kinesis ou MSK
  • Vous surveillez Step Functions

Charger resource-management.md quand :

  • Vous réalisez des audits de ressources
  • Vous analysez la conformité des balises
  • Vous recherchez des ressources non attachées
  • Vous planifiez la distribution régionale

Charger cost-optimization.md quand :

  • Vous identifiez des opportunités d'économies
  • Vous analysez les coûts de stockage
  • Vous recherchez des ressources inutilisées
  • Vous optimisez les types d'instances

Charger capacity-planning.md quand :

  • Vous planifiez des extensions de capacité
  • Vous analysez l'utilisation des ressources
  • Vous surveillez l'utilisation des IP de sous-réseau
  • Vous dimensionnez les ressources

Charger security-compliance.md quand :

  • Vous auditez la posture de sécurité
  • Vous vérifiez la conformité aux normes
  • Vous analysez les accès aux bases de données
  • Vous examinez les configurations de sécurité réseau

Charger resource-ownership.md quand :

  • Vous attribuez des propriétaires de ressources
  • Vous analysez la couverture des balises
  • Vous cartographiez les centres de coûts
  • Vous automatisez la gestion des balises

Skills associés