Paneles

Ejemplo: alarmas de producción

Pon las alarmas de CloudWatch que te importan en un widget, con las que se están activando arriba, en tu pantalla de inicio y en la pantalla bloqueada. Créalo a mano, o deja que CloudFormation o Terraform lo mantengan sincronizado con las alarmas que implementas.

Actualizado el 19 de octubre de 2026

Qué vas a crear

Vas a crear un panel de CloudWatch llamado CloudPeek-Alarms con un widget de Estado de alarma que enumera tus alarmas de producción. Las alarmas en ALARM siempre aparecen primero, así que la que te necesita es la que ves. En CloudPeek se ve así:

Primero las que están en alarma, después las que no tienen datos suficientes y luego las que están en OK. Los widgets medianos y más grandes indican hace cuánto cambió cada una.

Se tarda unos cinco minutos si tus alarmas ya existen.

¿Quieres todas las alarmas, sin un panel? En CloudPeek, toca Crear widget, elige Plantilla y, después, Alarmas o Resumen de alarmas en Registros y supervisión. Alarmas enumera todas las alarmas de la región predeterminada de la cuenta, en el mismo orden, y puedes cambiarle el título con Editar, por ejemplo a «Alarmas de producción»; Resumen de alarmas las cuenta, como «2 en alarma, 20 OK». Para mostrar solo las alarmas cuyo nombre empieza por el mismo texto, como prod-, elige Nombres que empiezan por… en Mostrar en la vista previa (consulta Mostrar solo algunos). Con más de una cuenta añadida, elige Todas las cuentas en la vista previa para cubrir todas las cuentas y las regiones que marques, con una línea para cada cuenta, como «prod: 2 en alarma · staging: todo OK» (consulta Alarmas en todas las cuentas). Crea el panel siguiente para mostrar las alarmas que elijas una a una, o alarmas de varias regiones.

Antes de empezar

  • Alarmas de CloudWatch que vigilar: alarmas de métricas o alarmas compuestas, en cualquier región de una cuenta.
  • Acceso para CloudPeek. La política CloudPeek de Primeros pasos ya incluye cloudwatch:DescribeAlarms, que necesitan los widgets de alarmas. Si ya la has configurado, puedes empezar.
  • Un acceso que pueda crear paneles de CloudWatch, como el de un administrador.

Cuánto cuesta. La capa gratuita de CloudWatch incluye tres paneles; a partir de ahí, cada panel cuesta 3 USD al mes. Los widgets de alarmas se actualizan con DescribeAlarms en lugar de GetMetricData, así que no suman cargos por métricas: se factura por solicitud, y la capa gratuita de CloudWatch cubre el primer millón de solicitudes de una cuenta al mes. Consulta los precios de CloudWatch.

1. Crear el panel

Un panel enumera las alarmas por su ARN, como arn:aws:cloudwatch:us-east-1:123456789012:alarm:prod-api-5xx-errors, que indica la región, la cuenta y el nombre de la alarma.

  1. Abre CloudWatch › Alarmas › Todas las alarmas. Para cada alarma que quieras, ábrela y copia el ARN de sus Detalles.
  2. Elige Paneles › Crear panel. Asígnale el nombre CloudPeek-Alarms y elige Crear panel. Si se abre la ventana Agregar widget, ciérrala.
  3. Elige Acciones › Ver/editar origen, sustituye el origen por el JSON del panel de abajo, con tus ARN en lugar de los de ejemplo, y elige Actualizar.
  4. Elige Guardar.

También puedes elegir Agregar widget › Estado de alarma y marcar las alarmas en lugar de editar el origen. Después, añade "sortBy": "stateUpdatedTimestamp" en el origen para que los cambios más recientes aparezcan primero.

Enumera los ARN de todas las alarmas cuyo nombre empieza por prod-:

Shell
aws cloudwatch describe-alarms \
  --region us-east-1 \
  --alarm-name-prefix prod- \
  --query '[MetricAlarms[].AlarmArn, CompositeAlarms[].AlarmArn][]' \
  --output json

Ponlos en production-alarms.json (se muestra abajo) en lugar de los de ejemplo y ejecuta:

Shell
aws cloudwatch put-dashboard \
  --region us-east-1 \
  --dashboard-name CloudPeek-Alarms \
  --dashboard-body file://production-alarms.json

O, con jq, crea el panel a partir de esas alarmas de una vez:

Shell
aws cloudwatch describe-alarms \
  --region us-east-1 \
  --alarm-name-prefix prod- \
  --query '[MetricAlarms[].AlarmArn, CompositeAlarms[].AlarmArn][]' \
  --output json |
jq '{widgets: [{type: "alarm", x: 0, y: 0, width: 12, height: 6,
  properties: {title: "Production alarms", sortBy: "stateUpdatedTimestamp", alarms: .}}]}' \
  > production-alarms.json

aws cloudwatch put-dashboard \
  --region us-east-1 \
  --dashboard-name CloudPeek-Alarms \
  --dashboard-body file://production-alarms.json

Vuelve a ejecutarlo cada vez que añadas alarmas.

Si tus alarmas están en la misma plantilla, enuméralas con ${Alarm.Arn} dentro de !Sub, y el panel siempre coincidirá con las alarmas que implementes:

CloudFormation
  AlarmsDashboard:
    Type: AWS::CloudWatch::Dashboard
    Properties:
      DashboardName: CloudPeek-Alarms
      DashboardBody: !Sub |
        {
          "widgets": [
            {
              "type": "alarm", "x": 0, "y": 0, "width": 12, "height": 6,
              "properties": {
                "title": "Production alarms",
                "sortBy": "stateUpdatedTimestamp",
                "alarms": [
                  "${ApiErrorsAlarm.Arn}",
                  "${QueueDepthAlarm.Arn}"
                ]
              }
            }
          ]
        }

Aquí, ApiErrorsAlarm y QueueDepthAlarm son recursos AWS::CloudWatch::Alarm de la misma plantilla. Para alarmas definidas en otro lugar, implementa cloudpeek-alarms.yaml con sus ARN:

cloudpeek-alarms.yaml (recursos)Descargar
Resources:
  # sortBy puts the most recent change first within each state; CloudPeek always lists alarms in
  # ALARM first. The ARNs are joined into a JSON array of strings.
  Dashboard:
    Type: AWS::CloudWatch::Dashboard
    Properties:
      DashboardName: !Ref DashboardName
      DashboardBody: !Sub
        - |
          {
            "widgets": [
              {
                "type": "alarm",
                "x": 0,
                "y": 0,
                "width": 12,
                "height": 6,
                "properties": {
                  "title": "${WidgetTitle}",
                  "sortBy": "stateUpdatedTimestamp",
                  "alarms": [ "${Alarms}" ]
                }
              }
            ]
          }
        - Alarms: !Join ['", "', !Ref AlarmArns]
Shell
aws cloudformation deploy \
  --stack-name CloudPeek-Alarms \
  --template-file cloudpeek-alarms.yaml \
  --parameter-overrides 'AlarmArns=arn:aws:cloudwatch:us-east-1:123456789012:alarm:prod-api-5xx-errors,arn:aws:cloudwatch:us-east-1:123456789012:alarm:prod-worker-queue-depth'

Si tus alarmas están en la misma configuración, enumera sus atributos arn, y el panel siempre coincidirá con las alarmas que apliques:

Terraform
resource "aws_cloudwatch_dashboard" "alarms" {
  dashboard_name = "CloudPeek-Alarms"
  dashboard_body = jsonencode({
    widgets = [{
      type = "alarm", x = 0, y = 0, width = 12, height = 6
      properties = {
        title  = "Production alarms"
        sortBy = "stateUpdatedTimestamp"
        alarms = [
          aws_cloudwatch_metric_alarm.api_5xx.arn,
          aws_cloudwatch_metric_alarm.queue_depth.arn,
        ]
      }
    }]
  })
}

Aquí, api_5xx y queue_depth son recursos aws_cloudwatch_metric_alarm de la misma configuración. Si creas alarmas con for_each, enuméralas todas con [for alarm in aws_cloudwatch_metric_alarm.prod : alarm.arn]. Para alarmas definidas en otro lugar, aplica cloudpeek-alarms.tf con sus ARN:

cloudpeek-alarms.tf (panel)Descargar
variable "alarm_arns" {
  description = "The ARNs of the alarms to list. Each ARN names its own region, so one widget can list alarms from several regions."
  type        = list(string)

  validation {
    condition     = length(var.alarm_arns) > 0
    error_message = "List at least one alarm ARN."
  }
}

# sortBy puts the most recent change first within each state; CloudPeek always lists alarms in
# ALARM first.
resource "aws_cloudwatch_dashboard" "alarms" {
  dashboard_name = var.dashboard_name
  dashboard_body = jsonencode({
    widgets = [
      {
        type   = "alarm"
        x      = 0
        y      = 0
        width  = 12
        height = 6
        properties = {
          title  = var.widget_title
          sortBy = "stateUpdatedTimestamp"
          alarms = var.alarm_arns
        }
      },
    ]
  })
}
terraform.tfvars
alarm_arns = [
  "arn:aws:cloudwatch:us-east-1:123456789012:alarm:prod-api-5xx-errors",
  "arn:aws:cloudwatch:us-east-1:123456789012:alarm:prod-worker-queue-depth",
]
Shell
terraform init
terraform apply

2. Añadir la cuenta y fijar el widget

  1. Abre CloudPeek y añade la cuenta con tus alarmas en la pestaña Cuentas, con una clave de acceso o con IAM Identity Center. Consulta Primeros pasos, paso 2.
  2. En la pestaña Cuentas, abre la cuenta, después el panel CloudPeek-Alarms, y toca Fijar en Production alarms.
  3. Añade CloudPeek a tu pantalla de inicio (consulta Pantalla de inicio y pantalla bloqueada). Empieza mostrando Production alarms, el último widget que fijaste. El tamaño mediano muestra cuándo cambió cada alarma por última vez; el pequeño va bien para un recuento rápido.
  4. Toca el widget para ver cada alarma con el motivo de su estado según CloudWatch y desde cuándo está así, y para abrir cualquiera de ellas en la consola de AWS. En un widget mediano o grande, toca una alarma para ir directamente a ella en la consola.

Resultado: el widget enumera tus alarmas, con las que están en alarma arriba. En la pantalla bloqueada del iPhone y el iPad, muestra el resumen, como «1 en alarma» o «Todo OK».

El panel, explicado

Uses la herramienta que uses, el panel acaba así, con los ARN de tus propias alarmas:

production-alarms.jsonDescargar
{
  "widgets": [
    {
      "type": "alarm",
      "x": 0,
      "y": 0,
      "width": 12,
      "height": 6,
      "properties": {
        "title": "Production alarms",
        "sortBy": "stateUpdatedTimestamp",
        "alarms": [
          "arn:aws:cloudwatch:us-east-1:123456789012:alarm:prod-api-5xx-errors",
          "arn:aws:cloudwatch:us-east-1:123456789012:alarm:prod-worker-queue-depth",
          "arn:aws:cloudwatch:us-east-1:123456789012:alarm:prod-api-high-cpu"
        ]
      }
    }
  ]
}
  • Un widget alarm enumera alarmas por su ARN, tantas como quieras.
  • "sortBy": "stateUpdatedTimestamp" muestra primero el cambio más reciente dentro de cada estado, en CloudPeek y en la consola de CloudWatch.
  • Cada ARN indica su región, y CloudPeek busca cada alarma en su propia región, así que un widget puede enumerar alarmas de varias regiones.

Cómo se ordenan las alarmas

  • Las alarmas en ALARM siempre van primero en CloudPeek, después las alarmas sin datos suficientes, luego las que no encuentra y, por último, las que están en OK. Si tienes más alarmas de las que caben, se muestran las que te necesitan.
  • Sin sortBy, la consola ordena las alarmas por nombre, y CloudPeek mantiene el orden en que aparecen, siempre con las alarmas en ALARM primero.
  • Un widget pequeño muestra su resumen y las tres o cuatro primeras alarmas. Los widgets medianos y más grandes muestran tantas como quepan, aproximadamente una docena en uno grande, cada una con hace cuánto cambió de estado. Las demás se cuentan como +N más.
  • El resumen, en los widgets pequeños y en la pantalla bloqueada, dice N en alarma en rojo, Todo OK en verde cuando todas las alarmas están en OK, Sin datos cuando ninguna tiene aún datos suficientes, o N sin estado cuando algunas no tienen datos o no se encuentran.
  • El símbolo de cada alarma muestra su estado: consulta Listas de alarmas.

Recibir un aviso cuando se active una alarma

CloudPeek puede enviar una notificación cuando una de las alarmas de un widget de alarmas pasa a ALARM, con el nombre de la alarma y el motivo que da CloudWatch, como «Threshold Crossed: 1 datapoint [12.0] was greater than the threshold (10.0).» Funciona con cualquier widget de alarmas: uno fijado desde un panel, como Production alarms, o las plantillas Alarmas y Resumen de alarmas, incluida una que cubra todas tus cuentas, que avisa cuando una alarma empieza a activarse en cualquiera de ellas (consulta Alarmas en todas las cuentas).

  1. En la pestaña Widgets, toca Production alarms para abrir su propia pantalla.
  2. Activa Avisar cuando se active una alarma, debajo de la lista de alarmas.
  3. La primera vez, tu teléfono pregunta si CloudPeek puede enviarte notificaciones (en Android, a partir de Android 13): toca Permitir.

Resultado: el interruptor está activado. Cuando una actualización encuentra en alarma una de las alarmas del widget que no lo estaba en la actualización anterior, recibes una notificación como «prod-api-5xx-errors está en alarma». Tócala para abrir la pantalla del widget, con el motivo de cada alarma y un enlace a cada una en la consola de AWS.

Las notificaciones proceden de las actualizaciones del widget: las de los widgets de la pantalla de inicio que lo muestran (y de la pantalla bloqueada, en el iPhone y el iPad), incluido un widget Vista general que lo incluya, y las de la app. Mantén el widget en tu pantalla de inicio, como en el paso 2, o solo se actualizará mientras tengas CloudPeek abierto.

No sustituye a un sistema de avisos de guardia. Las notificaciones proceden de las actualizaciones del widget, así que solo llegan tan rápido como se actualizan los widgets: en el iPhone y el iPad, a menudo con decenas de minutos de diferencia, y con menos frecuencia en el modo de bajo consumo o cuando apenas miras el widget; en Android, como mucho cada 15 minutos, y con menos frecuencia mientras el teléfono ahorra batería (consulta Cuándo se actualizan los widgets). Abrir la app también lo actualiza. Mantén los avisos de guardia a través de Amazon SNS o de tu herramienta de guardias para las alarmas que necesitan a alguien en cuestión de minutos.

  • Cada alarma se notifica una vez cada vez que pasa a estado de alarma, independientemente de cuántas actualizaciones o widgets la encuentren. Una que ya esté en alarma cuando activas las notificaciones se notifica la próxima vez que se active. Una que pasa de OK a datos insuficientes no se está activando, así que no se notifica.
  • Hasta tres alarmas que empiecen a activarse a la vez reciben una notificación cada una. Si son más, llegan en una sola notificación que las nombra todas, como «4 alarmas están en alarma».
  • Una alarma con el mismo nombre que otra de las que enumera el widget se nombra con su región y, entre cuentas, con el ID de su cuenta de AWS cuando es eso lo que las distingue, como «api-5xx (us-east-1, 222222222222) está en alarma».
  • Las notificaciones se generan en tu teléfono o tablet a partir de lo que ha obtenido el widget. No se envía nada a CloudPeek ni a ningún servicio de notificaciones push, y no necesitan ningún permiso de AWS que el widget no tenga ya.
  • Al eliminar el widget se desactivan sus notificaciones, y Deshacer las vuelve a activar.
  • Si las notificaciones de CloudPeek están desactivadas en los Ajustes del teléfono, la pantalla del widget dice «Las notificaciones de CloudPeek están desactivadas. Permítelas en Ajustes para recibir avisos.» En el iPhone y el iPad, toca Abrir Ajustes, activa Permitir notificaciones y vuelve a CloudPeek. En Android, toca Abrir Ajustes, que abre los ajustes de notificaciones de CloudPeek, actívalas y vuelve.

Solución de problemas

Una alarma muestra un círculo discontinuo

CloudPeek no la ha encontrado. Comprueba que el nombre, la región y la cuenta del ARN coinciden exactamente con la alarma: los nombres de las alarmas distinguen entre mayúsculas y minúsculas. CloudPeek busca las alarmas en la cuenta desde la que fijaste el widget, así que no puede encontrar una alarma de otra cuenta de AWS; ponla en un panel de esa cuenta y añade esa cuenta a CloudPeek.

Una alarma muestra un signo de interrogación

Aún no tiene datos suficientes para que CloudWatch la evalúe, igual que en la consola. Aparece después de las alarmas en ALARM.

CloudPeek dice que el acceso está denegado

El acceso necesita cloudwatch:DescribeAlarms. Está en la política CloudPeek y en la política administrada por AWS CloudWatchReadOnlyAccess.

No llegan las notificaciones

Comprueba que Avisar cuando se active una alarma está activado para el widget, que su pantalla no dice que las notificaciones están desactivadas y que el widget está en tu pantalla de inicio (o, en el iPhone y el iPad, en tu pantalla bloqueada), cuyas actualizaciones las envían. Solo llegan con la frecuencia con que se actualiza el widget, y una alarma que ya estaba en alarma se notifica la próxima vez que se active. Consulta Recibir un aviso cuando se active una alarma.

El orden en la consola es distinto

Sin "sortBy": "stateUpdatedTimestamp", la consola de CloudWatch ordena las alarmas por nombre. Añádelo a las propiedades del widget para que coincida con CloudPeek.

Otro problema

Consulta Solución de problemas o escribe a support@cloudpeek.app. Nunca nos envíes tu clave de acceso secreta.