📊

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)

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

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

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: 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, @message

Puntos 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: {"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)

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