O que você vai criar
Você vai criar um painel do CloudWatch chamado CloudPeek-Alarms com um widget de Status do alarme que lista seus alarmes de produção. Os alarmes em ALARM são sempre listados primeiro, então o que precisa de você é o que você vê. No CloudPeek, ele fica assim:
Leva cerca de cinco minutos se seus alarmes já existirem.
Quer todos os alarmes, sem painel? No CloudPeek, toque em Criar Widget, escolha Predefinição e depois Alarmes ou Resumo de alarmes em Logs e monitoramento. Alarmes lista todos os alarmes da região padrão da conta, na mesma ordem, e você pode mudar o título dele com Editar, para “Alarmes de produção”, por exemplo; Resumo de alarmes os conta, como “2 falhando, 20 OK”. Para mostrar só os alarmes cujos nomes começam com o mesmo texto, como prod-, escolha Nomes começando com… em Mostrar na prévia (consulte Mostrar só alguns). Com mais de uma conta adicionada, escolha Todas as contas na prévia para cobrir todas as contas e as regiões que você marcar, com uma linha para cada conta, como “prod: 2 falhando · staging: tudo OK” (consulte Alarmes em todas as contas). Crie o painel abaixo para mostrar os alarmes que você escolher um a um, ou alarmes de várias regiões.
Antes de começar
- Alarmes do CloudWatch para acompanhar: alarmes de métrica ou alarmes compostos, em qualquer região de uma conta.
- Acesso para o CloudPeek. A política
CloudPeekde Primeiros passos já incluicloudwatch:DescribeAlarms, de que os widgets de alarmes precisam. Se você já a configurou, está tudo pronto. - Um login que possa criar painéis do CloudWatch, como o de um administrador.
Quanto custa. O nível gratuito do CloudWatch inclui três painéis; além disso, cada painel custa US$ 3 por mês. Os widgets de alarmes são atualizados com DescribeAlarms em vez de GetMetricData, então não somam cobranças de métricas: a cobrança é por solicitação, e o nível gratuito do CloudWatch cobre o primeiro milhão de solicitações de uma conta por mês. Consulte Preços do CloudWatch.
1. Crie o painel
Um painel lista alarmes pelo ARN, como arn:aws:cloudwatch:us-east-1:123456789012:alarm:prod-api-5xx-errors, que indica a região, a conta e o nome do alarme.
- Abra CloudWatch › Alarmes › Todos os alarmes. Para cada alarme que você quer, abra-o e copie o ARN em Detalhes.
- Escolha Painéis › Criar painel. Dê a ele o nome
CloudPeek-Alarmse escolha Criar painel. Se a janela Adicionar widget abrir, feche-a. - Escolha Ações › Visualizar/editar origem, substitua a origem pelo JSON do painel abaixo, com seus ARNs no lugar dos exemplos, e escolha Atualizar.
- Escolha Salvar.
Você também pode escolher Adicionar widget › Status do alarme e marcar os alarmes, em vez de editar a origem. Depois, adicione "sortBy": "stateUpdatedTimestamp" na origem para que as mudanças mais recentes venham primeiro.
Liste os ARNs de todos os alarmes cujo nome começa com prod-:
aws cloudwatch describe-alarms \
--region us-east-1 \
--alarm-name-prefix prod- \
--query '[MetricAlarms[].AlarmArn, CompositeAlarms[].AlarmArn][]' \
--output json
Coloque-os em production-alarms.json (mostrado abaixo) no lugar dos exemplos e execute:
aws cloudwatch put-dashboard \
--region us-east-1 \
--dashboard-name CloudPeek-Alarms \
--dashboard-body file://production-alarms.json
Ou, com o jq, crie o painel a partir desses alarmes de uma só vez:
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
Execute de novo sempre que adicionar alarmes.
Se seus alarmes estiverem no mesmo modelo, liste-os com ${Alarm.Arn} dentro de !Sub, e o painel sempre corresponderá aos alarmes que você implanta:
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}"
]
}
}
]
}
Aqui, ApiErrorsAlarm e QueueDepthAlarm são recursos AWS::CloudWatch::Alarm no mesmo modelo. Para alarmes definidos em outro lugar, implante cloudpeek-alarms.yaml com os ARNs deles:
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]
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'
Se seus alarmes estiverem na mesma configuração, liste os atributos arn deles, e o painel sempre corresponderá aos alarmes que você aplica:
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,
]
}
}]
})
}
Aqui, api_5xx e queue_depth são recursos aws_cloudwatch_metric_alarm na mesma configuração. Se você cria alarmes com for_each, liste todos com [for alarm in aws_cloudwatch_metric_alarm.prod : alarm.arn]. Para alarmes definidos em outro lugar, aplique cloudpeek-alarms.tf com os ARNs deles:
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
}
},
]
})
}
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",
]
terraform init
terraform apply
2. Adicione a conta e fixe o widget
- Abra o CloudPeek e adicione a conta com seus alarmes na aba Contas, com uma chave de acesso ou com o IAM Identity Center. Consulte Primeiros passos, etapa 2.
- Na aba Contas, abra a conta, depois o painel CloudPeek-Alarms, e toque em Fixar em Production alarms.
- Adicione o CloudPeek à Tela de Início (consulte Tela de Início e Tela Bloqueada). Ele começa com Production alarms, o widget que você fixou por último. O tamanho médio mostra quando cada alarme mudou pela última vez; o pequeno serve para uma contagem rápida.
- Toque no widget para ver todos os alarmes com o motivo do estado segundo o CloudWatch e desde quando ele vale, e para abrir qualquer um deles no console da AWS. Em um widget médio ou grande, toque em um alarme para ir direto a ele lá.
Resultado: o widget lista seus alarmes, com os que estiverem em alarme no topo. Na Tela Bloqueada do iPhone e do iPad, ele mostra o resumo, como “1 em alarme” ou “Tudo OK”.
O painel em detalhes
Seja qual for a ferramenta que você usar, o painel fica assim, com os ARNs dos seus próprios alarmes:
{
"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"
]
}
}
]
}
- Um widget
alarmlista alarmes por ARN, quantos você quiser. "sortBy": "stateUpdatedTimestamp"lista a mudança mais recente primeiro dentro de cada estado, no CloudPeek e no console do CloudWatch.- Cada ARN indica a região, e o CloudPeek consulta cada alarme na região dele, então um widget pode listar alarmes de várias regiões.
Como os alarmes são ordenados
- Os alarmes em
ALARMsempre vêm primeiro no CloudPeek, depois os alarmes sem dados suficientes, depois os que ele não encontra e, por fim, os alarmes OK. Se houver mais alarmes do que cabem, os que precisam de você são os mostrados. - Sem
sortBy, o console ordena os alarmes por nome, e o CloudPeek mantém a ordem em que estão listados, ainda com os alarmes emALARMprimeiro. - Um widget pequeno mostra o resumo e os três ou quatro primeiros alarmes. Os widgets médios e maiores mostram quantos couberem, cerca de uma dúzia em um grande, cada um com há quanto tempo mudou de estado. Os demais são contados como Mais N.
- O resumo, nos widgets pequenos e na Tela Bloqueada, mostra N em alarme em vermelho, Tudo OK em verde quando todos os alarmes estão OK, Sem dados quando nenhum ainda tem dados suficientes ou N com estado desconhecido quando alguns não têm dados ou não são encontrados.
- O símbolo de cada alarme mostra o estado dele: consulte Listas de alarmes.
Receber notificação quando um alarme disparar
O CloudPeek pode enviar uma notificação quando um dos alarmes de um widget de alarmes entra em ALARM, indicando o alarme e o motivo informado pelo CloudWatch, como “Threshold Crossed: 1 datapoint [12.0] was greater than the threshold (10.0).” Funciona com qualquer widget de alarmes: um fixado de um painel, como Production alarms, ou as predefinições Alarmes e Resumo de alarmes, inclusive uma que cubra todas as suas contas, que avisa quando um alarme começa a disparar em qualquer uma delas (consulte Alarmes em todas as contas).
- Na aba Widgets, toque em Production alarms para abrir a tela dele.
- Ative Notificar Quando um Alarme Disparar, abaixo da lista de alarmes.
- Na primeira vez, o aparelho pergunta se o CloudPeek pode enviar notificações (no Android, a partir do Android 13): toque em Permitir.
Resultado: a chave fica ativada. Quando uma atualização encontra em alarme um dos alarmes do widget que não estava em alarme na atualização anterior, você recebe uma notificação como “prod-api-5xx-errors está em alarme”. Toque nela para abrir a tela do widget, com o motivo de cada alarme e um link para cada um no console da AWS.
As notificações vêm das atualizações do widget: pelos widgets da Tela de Início que o mostram (e pelos widgets da Tela Bloqueada, no iPhone e no iPad), inclusive um widget Visão geral que o liste, e no app. Mantenha o widget na Tela de Início, como na etapa 2, ou ele só será atualizado enquanto o CloudPeek estiver aberto.
Não substitui um sistema de acionamento de plantão. As notificações vêm das atualizações do widget, então só são tão rápidas quanto os widgets são atualizados: no iPhone e no iPad, muitas vezes com dezenas de minutos de intervalo, e com menos frequência no Modo de Pouca Energia ou quando você raramente olha o widget; no Android, no máximo a cada 15 minutos, e com menos frequência enquanto o aparelho economiza bateria (consulte Quando os widgets são atualizados). Abrir o app também o atualiza. Continue usando o Amazon SNS ou sua ferramenta de plantão para alarmes que precisam de alguém em minutos.
- Cada alarme é notificado uma vez cada vez que entra em alarme, não importa quantas atualizações ou widgets o encontrem. Um alarme que já está em alarme quando você ativa as notificações é notificado na próxima vez que disparar. Um que passa de OK para dados insuficientes não está disparando, então não é notificado.
- Até três alarmes que começam a disparar ao mesmo tempo recebem uma notificação cada. Acima disso, vem uma única notificação com o nome de todos, como “4 alarmes estão em alarme”.
- Um alarme com o mesmo nome de outro listado pelo widget é identificado pela região e, entre contas, pelo ID da conta da AWS quando é isso que os diferencia, como “api-5xx (us-east-1, 222222222222) está em alarme”.
- As notificações são criadas no seu celular ou tablet a partir do que o widget buscou. Nada é enviado ao CloudPeek nem a um serviço de push, e elas não precisam de nenhuma permissão da AWS que o widget ainda não tenha.
- Remover o widget desativa as notificações dele, e Desfazer as reativa.
- Se as notificações do CloudPeek estiverem desativadas nos Ajustes do aparelho (Configurações, no Android), a tela do widget mostra “As notificações do CloudPeek estão desativadas. Permita-as em Ajustes para receber avisos.” (no Android, “em Configurações”). No iPhone e no iPad, toque em Abrir Ajustes, ative Permitir Notificações e volte ao CloudPeek. No Android, toque em Abrir configurações, que abre as configurações de notificação do CloudPeek, ative-as e volte.
Solução de problemas
Um alarme mostra um círculo tracejado
O CloudPeek não conseguiu encontrá-lo. Verifique se o nome, a região e a conta do ARN correspondem exatamente ao alarme: os nomes de alarmes diferenciam maiúsculas de minúsculas. O CloudPeek procura os alarmes na conta da qual você fixou o widget, então um alarme em outra conta da AWS não pode ser encontrado; coloque-o em um painel nessa conta e adicione essa conta ao CloudPeek.
Um alarme mostra um ponto de interrogação
Ele ainda não tem dados suficientes para o CloudWatch avaliá-lo, como no console. Ele aparece depois dos alarmes em ALARM.
O CloudPeek diz que o acesso foi negado
O login precisa de cloudwatch:DescribeAlarms. Essa permissão está na política CloudPeek e na política gerenciada pela AWS CloudWatchReadOnlyAccess.
As notificações não chegam
Verifique se Notificar Quando um Alarme Disparar está ativado para o widget, se a tela dele não diz que as notificações estão desativadas e se o widget está na Tela de Início (ou, no iPhone e no iPad, na Tela Bloqueada), cujas atualizações as enviam. Elas só chegam com a frequência com que o widget é atualizado, e um alarme que já estava em alarme é notificado na próxima vez que disparar. Consulte Receber notificação quando um alarme disparar.
A ordem no console é diferente
Sem "sortBy": "stateUpdatedTimestamp", o console do CloudWatch ordena os alarmes por nome. Adicione essa opção às propriedades do widget para ficar igual ao CloudPeek.
Outro problema
Consulte Solução de problemas ou envie um e-mail para support@cloudpeek.app. Nunca nos envie sua chave de acesso secreta.