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 AWSaws.region- Région AWS (ex. : us-east-1)aws.resource.id- Identifiant unique de la ressourceaws.resource.name- Nom de la ressourceaws.arn- Amazon Resource Nameaws.vpc.id- Identifiant VPC (pour les ressources attachées à un VPC)aws.subnet.id- Identifiant de sous-réseauaws.availability_zone- Zone de disponibilitéaws.security_group.id- ID des groupes de sécurité (tableau)tags- Balises de ressource (utiliseztags[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èle | Gabarit |
|---|---|
| Découverte | smartscapeNodes "AWS_*" | fieldsAdd <attrs> | filter <cond> | summarize <agg> |
| Analyse de configuration | smartscapeNodes "AWS_<T>" | parse aws.object, "JSON:awsjson" | fieldsAdd f = awsjson[configuration][field] |
| Traversée | smartscapeNodes "AWS_<SRC>" | traverse "<rel>", "AWS_<TGT>" |
| Multi-types | smartscapeNodes "AWS_T1", "AWS_T2" | filter <cond> | summarize count(), by: {type} |
Bonnes pratiques
Optimisation des requêtes
- Filtrez tôt par compte et région
- Utilisez des types d'entités spécifiques (évitez les jokers
"AWS_*"quand c'est possible) - Limitez les résultats avec
| limit Npour l'exploration - Utilisez des vérifications
isNotNull()avant d'accéder à des champs imbriqués
Analyse de configuration
- Analysez toujours
aws.objectavec l'analyseur JSON :parse aws.object, "JSON:awsjson" - Utilisez une dénomination cohérente des champs :
fieldsAdd configField = awsjson[configuration][field] - Vérifiez les valeurs nulles après l'analyse
- Utilisez
toString()pour les objets imbriqués complexes
Champs de sécurité
- Les ID de groupes de sécurité sont des tableaux - utilisez
contains()ouexpand - Analysez
aws.objectpour un contexte de sécurité détaillé - Vérifiez
publiclyAccessible,storageEncryptedet les indicateurs similaires - Validez les hypothèses de rôles IAM
Stratégie de balisage
- Utilisez
tags[TagName]pour filtrer par une valeur de balise spécifique tagsest un objet JSON, pas un tableau — utilisezisNull(tags)pour les ressources non balisées, jamaisarraySize(tags)- Utilisez
isNull(tags[TagName])pour trouver les ressources manquant d'une balise spécifique - Implémentez des conventions de nommage cohérentes pour les balises
- 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:backwardpour les relations inverses (ex. : groupe cible → équilibreur de charge) - Utilisez
fieldsKeeppour 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()etisNull() - 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