Infraestructura en la Nube AWS
Monitorear y analizar recursos de AWS usando Dynatrace Smartscape y DQL. Consultar servicios de AWS, optimizar costos, gestionar seguridad y planificar capacidad en toda su infraestructura AWS.
Cuándo Usar Este Skill
Utilice este skill cuando el usuario necesite trabajar con recursos de AWS en Dynatrace. Cargue el archivo de referencia para el tipo de tarea:
- Inventario: "Muéstrame todas las instancias EC2 en us-east-1"
- Redes: "Encuentra todos los recursos en la VPC vpc-abc123"
- Base de datos: "Lista todas las instancias RDS con Multi-AZ habilitado"
- Serverless: "Muestra funciones Lambda con acceso a VPC"
- Costos: "Encuentra volúmenes EBS no adjuntos para ahorrar costos"
- Seguridad: "Identifica bases de datos públicamente accesibles"
- Cumplimiento: "Encuentra recursos que faltan etiquetas Environment"
- Capacidad: "Analiza la utilización de IP en subnets"
- Solución de problemas: "Mapea el balanceador de carga a las instancias a través de grupos objetivo"
- Análisis de Problemas: "¿Qué cambió antes de este problema de AWS?" / "¿Qué eventos afectaron este recurso?"
- Contexto de Carga de Trabajo: "¿Está esta instancia detrás de un balanceador de carga, en un clúster EKS o gestionada por ECS?"
- Eventos: "¿Ha habido eventos recientes en AWS que afecten este recurso?"
Conceptos Clave
Tipos de Entidad
Los recursos de AWS usan el prefijo AWS_* y se pueden consultar usando la función smartscapeNodes. Todas las entidades de AWS se descubren y modelan automáticamente en Dynatrace Smartscape.
Cómputo: AWS_EC2_INSTANCE, AWS_LAMBDA_FUNCTION, AWS_ECS_CLUSTER, AWS_ECS_SERVICE, AWS_EKS_CLUSTER
Redes: AWS_EC2_VPC, AWS_EC2_SUBNET, AWS_EC2_SECURITYGROUP, AWS_EC2_NATGATEWAY, AWS_EC2_VPCENDPOINT
Base de datos: AWS_RDS_DBINSTANCE, AWS_RDS_DBCLUSTER, AWS_DYNAMODB_TABLE, AWS_ELASTICACHE_CACHECLUSTER
Almacenamiento: AWS_S3_BUCKET, AWS_EC2_VOLUME, AWS_EFS_FILESYSTEM
Balanceo de carga: AWS_ELASTICLOADBALANCINGV2_LOADBALANCER, AWS_ELASTICLOADBALANCINGV2_TARGETGROUP
Mensajería: AWS_SQS_QUEUE, AWS_SNS_TOPIC, AWS_EVENTS_EVENTBUS, AWS_MSK_CLUSTER
Campos Comunes de AWS
Todas las entidades de AWS incluyen:
aws.account.id- Identificador de cuenta AWSaws.region- Región AWS (ej., us-east-1)aws.resource.id- Identificador único del recursoaws.resource.name- Nombre del recursoaws.arn- Nombre de Recurso de Amazon (ARN)aws.vpc.id- Identificador de VPC (para recursos adjuntos a VPC)aws.subnet.id- Identificador de subnetaws.availability_zone- Zona de disponibilidadaws.security_group.id- IDs de grupos de seguridad (array)tags- Etiquetas del recurso (usartags[TagName])
Campos de AWS en Logs y Bizevents
Los logs (fetch logs) originados en AWS llevan estos campos, no se necesita exploración:
aws.region,aws.account.id,aws.service,aws.log_group,aws.log_stream- Más campos estándar de logs:
content,loglevel,timestamp,k8s.*,dt.smartscape.*
Los bizevents (fetch bizevents) originados en AWS llevan:
aws.region,aws.account.id,event.type,event.provider
Use filter isNotNull(aws.region) para limitar a registros originados en AWS.
Tipos de Relación
Las entidades de AWS usan estos tipos de relación:
is_attached_to- Adjunto exclusivo (ej., volumen a instancia)uses- Relación de dependencia (ej., instancia usa grupo de seguridad)runs_on- Relación vertical (ej., instancia se ejecuta en AZ)is_part_of- Composición (ej., instancia en clúster)belongs_to- Agregación (ej., servicio pertenece a clúster)balances- Balanceo de carga (ej., grupo objetivo balancea instancias)balanced_by- Relación inversa de balanceo (ej., balanceador de carga balanceado por grupo objetivo)
Convención de Nomenclatura de Claves de Métricas de AWS
Dynatrace ingiere métricas de AWS CloudWatch usando este patrón:
cloud.aws.<servicio>.<NombreMetrica>.By.<NombreDimension>
<servicio> es el nombre del servicio AWS en minúsculas, <NombreMetrica> es el nombre de la métrica de CloudWatch (se conserva mayúsculas/minúsculas), y <NombreDimension> es la dimensión de CloudWatch.
Ejemplos: cloud.aws.ec2.CPUUtilization.By.InstanceId, cloud.aws.lambda.Invocations.By.FunctionName, cloud.aws.rds.CPUUtilization.By.DBInstanceIdentifier
Use timeseries, no fetch, para estas métricas. Agrupe por dt.smartscape_source.id para dividir por entidad.
→ Consulte references/metrics-performance.md para el catálogo completo de métricas por servicio con plantillas de consulta DQL.
Flujos de Trabajo Clave
1. Descubrimiento de Recursos AWS
Obtener todos los recursos de AWS por tipo:
smartscapeNodes "AWS_*"
| summarize count = count(), by: {type}
| sort count desc
Filtrar por cuenta y región:
smartscapeNodes "AWS_*"
| filter aws.account.id == "123456789012" and aws.region == "us-east-1"
| fields type, name, aws.resource.id
Usando etiquetas para filtrar:
smartscapeNodes "AWS_*"
| filter tags[Environment] == "production"
| summarize count = count(), by: {type, aws.region}
→ Para patrones completos de inventario de recursos, consulte references/resource-management.md
2. Análisis de Redes VPC
Listar todas las VPC:
smartscapeNodes "AWS_EC2_VPC"
| fields name, aws.account.id, aws.region, aws.vpc.id
Encontrar recursos en una VPC:
smartscapeNodes "AWS_*"
| filter aws.vpc.id == "vpc-0be61db7c5d2d1bd1"
| summarize resource_count = count(), by: {type, aws.subnet.id}
| sort resource_count desc
Analizar uso de grupos de seguridad:
smartscapeNodes "AWS_EC2_INSTANCE"
| filter contains(aws.security_group.id, "sg-abc123")
| fields name, aws.resource.id, aws.vpc.id, aws.subnet.id
→ Para redes VPC, consulte references/vpc-networking-security.md
→ Para patrones de grupos de seguridad, consulte references/security-compliance.md
3. Monitorización de Bases de Datos
Listar todas las instancias RDS:
smartscapeNodes "AWS_RDS_DBINSTANCE"
| fields name, aws.account.id, aws.region, aws.vpc.id, aws.availability_zone
Encontrar bases de datos 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
Agrupar por tipo de motor:
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
→ Para monitorización de bases de datos, consulte references/database-monitoring.md
4. Cargas de Trabajo Serverless y en Contenedores
Listar funciones Lambda:
smartscapeNodes "AWS_LAMBDA_FUNCTION"
| fields name, aws.account.id, aws.region, aws.vpc.id
Encontrar servicios ECS en un clúster:
smartscapeNodes "AWS_ECS_SERVICE"
| traverse "belongs_to", "AWS_ECS_CLUSTER"
| fields name, aws.resource.id, aws.region
Listar clústeres EKS:
smartscapeNodes "AWS_EKS_CLUSTER"
| fields name, aws.account.id, aws.region, aws.vpc.id
→ Para serverless, consulte references/serverless-containers.md
→ Para contenedores, consulte references/serverless-containers.md
5. Topología de Balanceadores de Carga
Mapeo completo de balanceador de carga a instancias:
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]
→ Para balanceo de carga, consulte references/load-balancing-api.md
6. Optimización de Costos
Encontrar volúmenes EBS no adjuntos:
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
Analizar costos de EBS por tipo:
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
→ Para optimización de costos, consulte references/cost-optimization.md
7. Seguridad y Cumplimiento
Encontrar bases de datos públicamente accesibles:
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
Radio de explosión de grupos de seguridad:
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
→ Para seguridad, consulte references/security-compliance.md
8. Propiedad de Recursos y Etiquetado
Encontrar recursos sin etiquetar:
smartscapeNodes "AWS_*"
| filter isNull(tags)
| fields type, name, aws.resource.id, aws.account.id, aws.region
Asignación de costos por centro de costos:
smartscapeNodes "AWS_*"
| filter isNotNull(tags[CostCenter])
| summarize resource_count = count(), by: {tags[CostCenter], type}
| sort resource_count desc
→ Para propiedad de recursos, consulte references/resource-ownership.md
Patrones de Consulta Comunes
| Patrón | Plantilla |
|---|---|
| Descubrimiento | smartscapeNodes "AWS_*" | fieldsAdd <attrs> | filter <cond> | summarize <agg> |
| Análisis de configuración | smartscapeNodes "AWS_<T>" | parse aws.object, "JSON:awsjson" | fieldsAdd f = awsjson[configuration][field] |
| Recorrido | smartscapeNodes "AWS_<SRC>" | traverse "<rel>", "AWS_<TGT>" |
| Multi-tipo | smartscapeNodes "AWS_T1", "AWS_T2" | filter <cond> | summarize count(), by: {type} |
Mejores Prácticas
Optimización de Consultas
- Filtrar temprano por cuenta y región
- Usar tipos de entidad específicos (evitar comodines
"AWS_*"cuando sea posible) - Limitar resultados con
| limit Npara exploración - Usar verificaciones
isNotNull()antes de acceder a campos anidados
Análisis de Configuración
- Siempre analizar
aws.objectcon el analizador JSON:parse aws.object, "JSON:awsjson" - Usar nomenclatura de campos consistente:
fieldsAdd configField = awsjson[configuration][field] - Verificar valores nulos después del análisis
- Usar
toString()para objetos anidados complejos
Campos de Seguridad
- Los IDs de grupos de seguridad son arrays - usar
contains()oexpand - Analizar
aws.objectpara contexto de seguridad detallado - Verificar
publiclyAccessible,storageEncryptedy banderas similares - Validar suposiciones de roles IAM
Estrategia de Etiquetado
- Usar
tags[TagName]para filtrar por valor de etiqueta específico tagses un objeto JSON, no un array — usarisNull(tags)para recursos no etiquetados, nuncaarraySize(tags)- Usar
isNull(tags[TagName])para encontrar recursos que faltan una etiqueta específica - Implementar convenciones de nomenclatura de etiquetas consistentes
- Rastrear la cobertura de etiquetas con operaciones de resumen
Limitaciones y Notas
Limitaciones de Smartscape
- La configuración del objeto AWS requiere análisis con
parse aws.object, "JSON:awsjson" - Las métricas de AWS están disponibles como métricas de Dynatrace usando la convención de nomenclatura
cloud.aws.*(consulte Convención de Nomenclatura de Métricas AWS) - El descubrimiento de recursos depende de la configuración de la integración de AWS
- La sincronización de etiquetas puede tener pequeños retrasos
Recorrido de Relaciones
- Usar
direction:backwardpara relaciones inversas (ej., grupo objetivo → balanceador de carga) - Usar
fieldsKeeppara mantener campos importantes a través del recorrido - Acceder al historial de recorrido con
dt.traverse.history[-N] - Las topologías complejas pueden requerir múltiples operaciones de recorrido
Consejos Generales
- Usar
getNodeName()para nombres de recursos legibles - Manejar valores nulos con elegancia usando
isNotNull()eisNull() - Combinar filtros de región y cuenta para entornos grandes
- Usar
countDistinct()para recuentos únicos de recursos
Cuándo Cargar Referencias
Este skill usa divulgación progresiva. Comience aquí para el 80% de los casos de uso. Cargue archivos de referencia para especificaciones detalladas cuando sea necesario.
Cargue vpc-networking-security.md cuando:
- Analice la topología y conectividad de VPC
- Investigue configuraciones de grupos de seguridad
- Encuentre recursos por grupo de seguridad
- Solucione problemas de interfaces de red
Cargue database-monitoring.md cuando:
- Gestione instancias y clústeres RDS
- Analice distribuciones de motores de base de datos
- Verifique configuraciones Multi-AZ
- Monitoree clústeres de caché
Cargue serverless-containers.md cuando:
- Trabaje con funciones Lambda
- Analice despliegues ECS/EKS
- Investigue redes de contenedores
- Planifique migraciones serverless
Cargue load-balancing-api.md cuando:
- Mapee topologías de balanceadores de carga
- Analice la salud de grupos objetivo
- Trabaje con API Gateway
- Configure CloudFront
Cargue messaging-event-streaming.md cuando:
- Gestione colas SQS y temas SNS
- Analice buses de eventos de EventBridge
- Trabaje con Kinesis o MSK
- Monitoree Step Functions
Cargue resource-management.md cuando:
- Realice auditorías de recursos
- Analice el cumplimiento de etiquetas
- Encuentre recursos no adjuntos
- Planifique la distribución regional
Cargue cost-optimization.md cuando:
- Identifique oportunidades de ahorro de costos
- Analice costos de almacenamiento
- Encuentre recursos no utilizados
- Optimice tipos de instancia
Cargue capacity-planning.md cuando:
- Planifique expansiones de capacidad
- Analice la utilización de recursos
- Monitoree el uso de IP de subred
- Dimensione cargas de trabajo