📊
CloudWatch - Monitoreo y Observabilidad
Métricas, logs, alarmas y dashboards
⏱️ Tiempo estimado de lectura: 20 minutos
CloudWatch Metrics
CloudWatch Metrics proporciona métricas para monitorear recursos y aplicaciones de AWS.
Conceptos clave:
- Metric: Variable a monitorear (CPUUtilization, NetworkIn, etc.)
- Namespace: Contenedor para métricas (AWS/EC2, AWS/RDS, Custom)
- Dimension: Atributo de métrica (InstanceId, DBInstanceIdentifier)
- Timestamp: Momento de la métrica
- Statistic: Agregación (Average, Sum, Min, Max, SampleCount)
Métricas por defecto (Basic Monitoring):
- EC2: CPU, Disk, Network (cada 5 minutos, gratis)
- RDS: DatabaseConnections, CPU, FreeableMemory
- ELB: RequestCount, TargetResponseTime, HealthyHostCount
- Lambda: Invocations, Duration, Errors, Throttles
Detailed Monitoring:
- Métricas cada 1 minuto (tiene costo)
- Más granularidad para respuesta rápida
- Necesario para scaling rápido con Auto Scaling
Custom Metrics:
- Envía tus propias métricas usando PutMetricData API
- Ejemplos: memoria RAM, disk space usado, procesos activos
- Resolución: Standard (1 min) o High-Resolution (1 segundo)
Conceptos clave:
- Metric: Variable a monitorear (CPUUtilization, NetworkIn, etc.)
- Namespace: Contenedor para métricas (AWS/EC2, AWS/RDS, Custom)
- Dimension: Atributo de métrica (InstanceId, DBInstanceIdentifier)
- Timestamp: Momento de la métrica
- Statistic: Agregación (Average, Sum, Min, Max, SampleCount)
Métricas por defecto (Basic Monitoring):
- EC2: CPU, Disk, Network (cada 5 minutos, gratis)
- RDS: DatabaseConnections, CPU, FreeableMemory
- ELB: RequestCount, TargetResponseTime, HealthyHostCount
- Lambda: Invocations, Duration, Errors, Throttles
Detailed Monitoring:
- Métricas cada 1 minuto (tiene costo)
- Más granularidad para respuesta rápida
- Necesario para scaling rápido con Auto Scaling
Custom Metrics:
- Envía tus propias métricas usando PutMetricData API
- Ejemplos: memoria RAM, disk space usado, procesos activos
- Resolución: Standard (1 min) o High-Resolution (1 segundo)
Puntos Clave
- ✓ Métricas por defecto NO incluyen memoria RAM en EC2
- ✓ Custom metrics necesitan CloudWatch Agent o API calls
- ✓ Detailed monitoring (1 min) tiene costo adicional
- ✓ Métricas se retienen: 1s (3h), 1m (15d), 5m (63d), 1h (455d)
- ✓ High-resolution metrics permiten alarmas cada 10s o 30s
💻 Trabajar con métricas en CloudWatch
# Enviar custom metric
aws cloudwatch put-metric-data \n --namespace "MiApp/Backend" \n --metric-name "MemoriaUsada" \n --value 85 \n --unit Percent \n --dimensions Instance=i-0123456789abcdef0
# Obtener estadísticas de métrica
aws cloudwatch get-metric-statistics \n --namespace AWS/EC2 \n --metric-name CPUUtilization \n --dimensions Name=InstanceId,Value=i-0123456789abcdef0 \n --start-time 2024-01-01T00:00:00Z \n --end-time 2024-01-01T23:59:59Z \n --period 3600 \n --statistics Average CloudWatch Alarms
Las alarmas de CloudWatch permiten realizar acciones automáticas basadas en métricas.
Estados de alarma:
- OK: Métrica dentro del umbral definido
- ALARM: Métrica ha superado el umbral
- INSUFFICIENT_DATA: No hay suficientes datos para evaluar
Componentes de alarma:
- Metric: Qué métrica monitorear
- Threshold: Valor límite (ej: CPU > 80%)
- Evaluation Periods: Cuántos periodos consecutivos evaluar
- Datapoints to Alarm: Cuántos periodos deben estar en ALARM
- Actions: Qué hacer cuando cambia de estado
Acciones disponibles:
- SNS Notification: Enviar email, SMS, Lambda, etc.
- Auto Scaling Action: Escalar ASG
- EC2 Action: Stop, Terminate, Reboot, Recover instancia
- Systems Manager Action: Ejecutar automation runbook
Alarmas compuestas:
- Combinan múltiples alarmas con AND/OR
- Reduce alarm noise
- Ejemplo: CPU alta AND Memoria alta = ALARM
Estados de alarma:
- OK: Métrica dentro del umbral definido
- ALARM: Métrica ha superado el umbral
- INSUFFICIENT_DATA: No hay suficientes datos para evaluar
Componentes de alarma:
- Metric: Qué métrica monitorear
- Threshold: Valor límite (ej: CPU > 80%)
- Evaluation Periods: Cuántos periodos consecutivos evaluar
- Datapoints to Alarm: Cuántos periodos deben estar en ALARM
- Actions: Qué hacer cuando cambia de estado
Acciones disponibles:
- SNS Notification: Enviar email, SMS, Lambda, etc.
- Auto Scaling Action: Escalar ASG
- EC2 Action: Stop, Terminate, Reboot, Recover instancia
- Systems Manager Action: Ejecutar automation runbook
Alarmas compuestas:
- Combinan múltiples alarmas con AND/OR
- Reduce alarm noise
- Ejemplo: CPU alta AND Memoria alta = ALARM
Puntos Clave
- ✓ Alarmas actúan en cambios de estado (OK → ALARM → OK)
- ✓ Evaluation periods y datapoints permiten evitar false positives
- ✓ Billing alarms solo en us-east-1 (métricas globales)
- ✓ Test alarmas con set-alarm-state para verificar acciones
- ✓ Alarmas compuestas reducen notificaciones innecesarias
CloudWatch Logs
CloudWatch Logs permite centralizar logs de aplicaciones, sistemas y servicios AWS.
Jerarquía:
- Log Groups: Contenedor de logs (ej: /aws/lambda/mi-funcion)
- Log Streams: Secuencia de eventos de una fuente (ej: instancia específica)
- Log Events: Registro individual con timestamp y mensaje
Fuentes de logs:
- SDK/Agent: Aplicaciones envían logs con SDK o CloudWatch Agent
- Elastic Beanstalk: Logs de aplicación automáticos
- ECS/Fargate: Logs de containers
- Lambda: Automático (console.log, print, etc.)
- VPC Flow Logs: Tráfico de red
- API Gateway, CloudTrail, Route53
Retención:
- Por defecto: indefinida (para siempre)
- Configurable: 1 día a 10 años
- Costo por GB almacenado y GB ingested
Exportación:
- S3: Batch export (hasta 12 horas de delay)
- Kinesis Data Firehose: Near real-time streaming
- Lambda subscriptions: Procesamiento en tiempo real
Jerarquía:
- Log Groups: Contenedor de logs (ej: /aws/lambda/mi-funcion)
- Log Streams: Secuencia de eventos de una fuente (ej: instancia específica)
- Log Events: Registro individual con timestamp y mensaje
Fuentes de logs:
- SDK/Agent: Aplicaciones envían logs con SDK o CloudWatch Agent
- Elastic Beanstalk: Logs de aplicación automáticos
- ECS/Fargate: Logs de containers
- Lambda: Automático (console.log, print, etc.)
- VPC Flow Logs: Tráfico de red
- API Gateway, CloudTrail, Route53
Retención:
- Por defecto: indefinida (para siempre)
- Configurable: 1 día a 10 años
- Costo por GB almacenado y GB ingested
Exportación:
- S3: Batch export (hasta 12 horas de delay)
- Kinesis Data Firehose: Near real-time streaming
- Lambda subscriptions: Procesamiento en tiempo real
Puntos Clave
- ✓ CloudWatch Logs Insights permite queries SQL-like
- ✓ Metric filters convierten logs en métricas de CloudWatch
- ✓ Subscription filters envían logs a Kinesis/Lambda/Firehose
- ✓ Log groups pueden tener KMS encryption
- ✓ CloudWatch Agent unifica métricas custom y logs
💻 Gestión de CloudWatch Logs
# Crear log group
aws logs create-log-group --log-group-name /mi-app/produccion
# Configurar retención (7 días)
aws logs put-retention-policy \n --log-group-name /mi-app/produccion \n --retention-in-days 7
# Crear metric filter
aws logs put-metric-filter \n --log-group-name /mi-app/produccion \n --filter-name ErrorCount \n --filter-pattern "[ERROR]" \n --metric-transformations \n metricName=AppErrors,metricNamespace=MiApp,metricValue=1 CloudWatch Logs Insights
CloudWatch Logs Insights es un servicio de análisis de logs totalmente integrado que permite buscar y analizar datos de logs.
Características:
- Query language: SQL-like para búsquedas complejas
- Visualizaciones: Gráficos de series temporales y barras
- Queries guardadas: Reutilizar queries frecuentes
- Múltiples log groups: Query en varios grupos simultáneamente
- Pago por uso: Por GB de datos escaneados
Comandos comunes:
- fields: Selecciona campos a mostrar
- filter: Filtra logs por condición
- stats: Agregaciones (count, avg, sum, min, max)
- sort: Ordena resultados
- limit: Limita número de resultados
Ejemplos de queries:
- Buscar errores:
- Top IPs:
- Latencia promedio:
- Logs de usuario:
Características:
- Query language: SQL-like para búsquedas complejas
- Visualizaciones: Gráficos de series temporales y barras
- Queries guardadas: Reutilizar queries frecuentes
- Múltiples log groups: Query en varios grupos simultáneamente
- Pago por uso: Por GB de datos escaneados
Comandos comunes:
- fields: Selecciona campos a mostrar
- filter: Filtra logs por condición
- stats: Agregaciones (count, avg, sum, min, max)
- sort: Ordena resultados
- limit: Limita número de resultados
Ejemplos de queries:
- Buscar errores:
filter @message like /ERROR/- Top IPs:
stats count() by sourceIP | sort count desc- Latencia promedio:
stats avg(duration) by bin(5m)- Logs de usuario:
filter userId = "user123" | fields @timestamp, @messagePuntos Clave
- ✓ Logs Insights cobra por GB escaneado, no por tiempo
- ✓ Queries pueden abarcar hasta 20 log groups
- ✓ Resultados limitados a 10,000 filas
- ✓ Autodetecta campos JSON en logs
- ✓ Ideal para troubleshooting y análisis ad-hoc
Amazon EventBridge (CloudWatch Events)
EventBridge es un bus de eventos serverless que conecta datos de aplicaciones con AWS services.
Conceptos clave:
- Event: Cambio de estado en sistema (ej: EC2 instance terminated)
- Event Bus: Canal que recibe eventos (default, custom, partner)
- Rule: Filtra eventos y los enruta a targets
- Target: Destino del evento (Lambda, SNS, SQS, Step Functions)
Fuentes de eventos:
- AWS Services: EC2, Auto Scaling, CodePipeline, 90+ servicios
- Schedule: Cron expressions o rate expressions
- Custom Applications: Tu aplicación envía eventos
- SaaS Partners: Datadog, Auth0, Shopify, etc.
Patrones de eventos:
- Filtros basados en contenido JSON del evento
- Soporta prefix matching, numeric matching, exists checks
- Ejemplo:
Casos de uso:
- Reaccionar a cambios en infraestructura
- Scheduled tasks (cron jobs en cloud)
- Integración entre microservicios
- Recibir eventos SaaS y procesarlos
Conceptos clave:
- Event: Cambio de estado en sistema (ej: EC2 instance terminated)
- Event Bus: Canal que recibe eventos (default, custom, partner)
- Rule: Filtra eventos y los enruta a targets
- Target: Destino del evento (Lambda, SNS, SQS, Step Functions)
Fuentes de eventos:
- AWS Services: EC2, Auto Scaling, CodePipeline, 90+ servicios
- Schedule: Cron expressions o rate expressions
- Custom Applications: Tu aplicación envía eventos
- SaaS Partners: Datadog, Auth0, Shopify, etc.
Patrones de eventos:
- Filtros basados en contenido JSON del evento
- Soporta prefix matching, numeric matching, exists checks
- Ejemplo:
{"source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change"]}Casos de uso:
- Reaccionar a cambios en infraestructura
- Scheduled tasks (cron jobs en cloud)
- Integración entre microservicios
- Recibir eventos SaaS y procesarlos
Puntos Clave
- ✓ EventBridge es evolución de CloudWatch Events (más features)
- ✓ Puede filtrar eventos antes de invocar targets (ahorro costo)
- ✓ Un rule puede tener hasta 5 targets
- ✓ Schema Registry descubre estructura de eventos automáticamente
- ✓ Archive y Replay permiten debugging y reprocessing
💻 Crear reglas de EventBridge
# Crear rule para detectar terminación de EC2
aws events put-rule \n --name DetectEC2Termination \n --event-pattern '{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {"state": ["terminated"]}
}'
# Agregar Lambda como target
aws events put-targets \n --rule DetectEC2Termination \n --targets "Id"="1","Arn"="arn:aws:lambda:us-east-1:123456789012:function:NotifyTermination"
# Crear scheduled rule (cada día a las 9am UTC)
aws events put-rule \n --name DailyBackup \n --schedule-expression "cron(0 9 * * ? *)" CloudWatch Agent
El CloudWatch Agent es un agente unificado que recopila métricas y logs del sistema operativo y aplicaciones.
Métricas del sistema recopiladas:
- Memoria: Utilización, disponible, usado
- Disco: Espacio usado, inodos
- CPU: Por core, estados (user, system, idle)
- Procesos: Conteos, estados
- Network: Conexiones, errores
- Swap: Utilización
Configuración:
- Archivo JSON define qué recopilar
- Wizard interactivo o manual
- Almacenado en Systems Manager Parameter Store
- Puede enviarse a múltiples instancias con Systems Manager
Dos versiones:
- CloudWatch Logs Agent: Solo logs (legacy)
- CloudWatch Agent: Métricas + Logs (recomendado)
Permisos necesarios:
- IAM role con CloudWatchAgentServerPolicy
- Attachado a instancia EC2 o ECS task
- No usar access keys (security best practice)
Métricas del sistema recopiladas:
- Memoria: Utilización, disponible, usado
- Disco: Espacio usado, inodos
- CPU: Por core, estados (user, system, idle)
- Procesos: Conteos, estados
- Network: Conexiones, errores
- Swap: Utilización
Configuración:
- Archivo JSON define qué recopilar
- Wizard interactivo o manual
- Almacenado en Systems Manager Parameter Store
- Puede enviarse a múltiples instancias con Systems Manager
Dos versiones:
- CloudWatch Logs Agent: Solo logs (legacy)
- CloudWatch Agent: Métricas + Logs (recomendado)
Permisos necesarios:
- IAM role con CloudWatchAgentServerPolicy
- Attachado a instancia EC2 o ECS task
- No usar access keys (security best practice)
Puntos Clave
- ✓ Agent necesario para métricas de memoria y disco en EC2
- ✓ StatsD y collectd protocols soportados
- ✓ Puede agregar métricas antes de enviar (ahorro costo)
- ✓ Logs automáticamente parseados si son JSON
- ✓ Usa Systems Manager para deployment a escala