Ce que vous allez créer
Vous allez créer un tableau de bord CloudWatch nommé CloudPeek-Alarms avec un widget État des alarmes qui liste vos alarmes de production. Les alarmes à l’état ALARM sont toujours listées en premier : celle qui requiert votre attention est celle que vous voyez. Dans CloudPeek, cela ressemble à ceci :
Comptez environ cinq minutes si vos alarmes existent déjà.
Vous voulez toutes les alarmes, sans tableau de bord ? Dans CloudPeek, touchez Créer un widget, choisissez Préréglage, puis Alarmes ou Résumé des alarmes sous Journaux et surveillance. Alarmes liste toutes les alarmes de la région par défaut du compte, dans le même ordre, et vous pouvez le renommer avec Modifier, par exemple en « Alarmes de production » ; Résumé des alarmes les compte, par exemple « 2 en alarme, 20 OK ». Pour n’afficher que les alarmes dont le nom commence par le même texte, comme prod-, choisissez Noms commençant par… sous Afficher dans l’aperçu (consultez N’en afficher que certains). Si vous avez ajouté plusieurs comptes, choisissez Tous les comptes dans l’aperçu pour couvrir tous les comptes et les régions que vous cochez, avec une ligne par compte, par exemple « prod : 2 en alarme · staging : tout est OK » (consultez Alarmes de tous les comptes). Créez le tableau de bord ci-dessous pour afficher les alarmes que vous choisissez une à une, ou des alarmes de plusieurs régions.
Avant de commencer
- Des alarmes CloudWatch à surveiller : des alarmes de métrique ou des alarmes composites, dans n’importe quelle région d’un même compte.
- Un accès pour CloudPeek. La politique
CloudPeekde Premiers pas inclut déjàcloudwatch:DescribeAlarms, dont les widgets d’alarmes ont besoin. Si vous l’avez configurée, vous êtes prêt. - Un accès capable de créer des tableaux de bord CloudWatch, comme celui d’un administrateur.
Ce que cela coûte. L’offre gratuite de CloudWatch inclut trois tableaux de bord ; au-delà, chaque tableau de bord coûte 3 USD par mois. Les widgets d’alarmes s’actualisent avec DescribeAlarms plutôt qu’avec GetMetricData : ils n’ajoutent donc pas de frais de métriques. Cet appel est facturé à la requête, et l’offre gratuite de CloudWatch couvre le premier million de requêtes d’un compte chaque mois. Consultez la tarification de CloudWatch.
1. Créer le tableau de bord
Un tableau de bord liste les alarmes par leur ARN, par exemple arn:aws:cloudwatch:us-east-1:123456789012:alarm:prod-api-5xx-errors, qui indique la région, le compte et le nom de l’alarme.
- Ouvrez CloudWatch › Alarmes › Toutes les alarmes. Pour chaque alarme voulue, ouvrez-la et copiez l’ARN depuis ses Détails.
- Choisissez Tableaux de bord › Créer un tableau de bord. Nommez-le
CloudPeek-Alarmset choisissez Créer un tableau de bord. Si la fenêtre Ajouter un widget s’ouvre, fermez-la. - Choisissez Actions › Afficher/modifier la source, remplacez la source par le JSON du tableau de bord ci-dessous en mettant vos ARN à la place des exemples, puis choisissez Mettre à jour.
- Choisissez Enregistrer.
Vous pouvez aussi choisir Ajouter un widget › État des alarmes et cocher les alarmes au lieu de modifier la source. Ajoutez ensuite "sortBy": "stateUpdatedTimestamp" dans la source pour que les modifications les plus récentes apparaissent en premier.
Listez les ARN de toutes les alarmes dont le nom commence par prod- :
aws cloudwatch describe-alarms \
--region us-east-1 \
--alarm-name-prefix prod- \
--query '[MetricAlarms[].AlarmArn, CompositeAlarms[].AlarmArn][]' \
--output json
Placez-les dans production-alarms.json (voir ci-dessous) à la place des exemples, puis exécutez :
aws cloudwatch put-dashboard \
--region us-east-1 \
--dashboard-name CloudPeek-Alarms \
--dashboard-body file://production-alarms.json
Ou, avec jq, créez le tableau de bord à partir de ces alarmes en une seule fois :
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
Relancez-la chaque fois que vous ajoutez des alarmes.
Si vos alarmes sont dans le même modèle, listez-les avec ${Alarm.Arn} dans !Sub, pour que le tableau de bord corresponde toujours aux alarmes que vous déployez :
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}"
]
}
}
]
}
Ici, ApiErrorsAlarm et QueueDepthAlarm sont des ressources AWS::CloudWatch::Alarm du même modèle. Pour des alarmes définies ailleurs, déployez cloudpeek-alarms.yaml avec leurs ARN :
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'
Si vos alarmes sont dans la même configuration, listez leurs attributs arn, pour que le tableau de bord corresponde toujours aux alarmes que vous appliquez :
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,
]
}
}]
})
}
Ici, api_5xx et queue_depth sont des ressources aws_cloudwatch_metric_alarm de la même configuration. Si vous créez des alarmes avec for_each, listez-les toutes avec [for alarm in aws_cloudwatch_metric_alarm.prod : alarm.arn]. Pour des alarmes définies ailleurs, appliquez cloudpeek-alarms.tf avec leurs ARN :
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. Ajouter le compte et épingler le widget
- Ouvrez CloudPeek et ajoutez le compte qui contient vos alarmes dans l’onglet Comptes, avec une clé d’accès ou IAM Identity Center. Consultez Premiers pas, étape 2.
- Dans l’onglet Comptes, ouvrez le compte, puis le tableau de bord CloudPeek-Alarms, et touchez Épingler sur Production alarms.
- Ajoutez CloudPeek à votre écran d’accueil (consultez Écran d’accueil et écran verrouillé). Il affiche d’abord Production alarms, le dernier widget que vous avez épinglé. La taille moyenne indique quand chaque alarme a changé pour la dernière fois ; la petite convient à un décompte rapide.
- Touchez le widget pour voir toutes les alarmes, avec la raison donnée par CloudWatch pour leur état et le moment où il a commencé, et pour ouvrir l’une d’elles dans la console AWS. Sur un widget moyen ou grand, touchez une alarme pour y accéder directement.
Résultat : le widget liste vos alarmes, celles en alarme en tête. Sur l’écran verrouillé de l’iPhone et de l’iPad, il affiche le résumé, par exemple « 1 en alarme » ou « Tout est OK ».
Le tableau de bord en détail
Quel que soit l’outil utilisé, le tableau de bord ressemble au final à ceci, avec les ARN de vos propres 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"
]
}
}
]
}
- Un widget
alarmliste des alarmes par ARN, autant que vous le souhaitez. "sortBy": "stateUpdatedTimestamp"liste en premier la modification la plus récente au sein de chaque état, dans CloudPeek comme dans la console CloudWatch.- Chaque ARN indique sa région, et CloudPeek recherche chaque alarme dans sa propre région : un même widget peut donc lister des alarmes de plusieurs régions.
Ordre des alarmes
- Les alarmes à l’état
ALARMviennent toujours en premier dans CloudPeek, puis les alarmes sans données suffisantes, puis celles qu’il ne trouve pas, puis les alarmes à l’état OK. Si vous avez plus d’alarmes que de place, celles qui requièrent votre attention sont celles qui s’affichent. - Sans
sortBy, la console trie les alarmes par nom, et CloudPeek conserve l’ordre dans lequel elles sont listées, toujours avec les alarmes à l’étatALARMen premier. - Un petit widget affiche son résumé et les trois ou quatre premières alarmes. Les widgets moyens et plus grands en affichent autant que possible, environ une douzaine sur un grand, chacune avec le temps écoulé depuis son changement d’état. Les autres sont comptées sous la forme +N de plus.
- Le résumé, sur les petits widgets et l’écran verrouillé, affiche N en alarme en rouge, Tout est OK en vert quand toutes les alarmes sont OK, Aucune donnée quand aucune n’a encore assez de données, ou N d’état inconnu quand certaines n’ont pas de données ou sont introuvables.
- Le symbole de chaque alarme indique son état : consultez Listes d’alarmes.
Être averti quand une alarme se déclenche
CloudPeek peut envoyer une notification quand l’une des alarmes d’un widget d’alarmes passe à l’état ALARM, en nommant l’alarme et en donnant la raison fournie par CloudWatch, par exemple « Threshold Crossed: 1 datapoint [12.0] was greater than the threshold (10.0). » Cela fonctionne avec n’importe quel widget d’alarmes : un widget épinglé depuis un tableau de bord, comme Production alarms, ou les préréglages Alarmes et Résumé des alarmes, y compris un préréglage couvrant tous vos comptes, qui signale une alarme qui commence à se déclencher dans n’importe lequel d’entre eux (consultez Alarmes de tous les comptes).
- Dans l’onglet Widgets, touchez Production alarms pour ouvrir son écran.
- Activez Notifier quand une alarme se déclenche, sous la liste des alarmes.
- La première fois, votre téléphone vous demande si CloudPeek peut vous envoyer des notifications (sur Android, à partir d’Android 13) : touchez Autoriser.
Résultat : l’interrupteur est activé. Quand une actualisation trouve en alarme l’une des alarmes du widget qui ne l’était pas à l’actualisation précédente, vous recevez une notification comme « prod-api-5xx-errors est en alarme ». Touchez-la pour ouvrir l’écran du widget, avec la raison de chaque alarme et un lien vers chacune dans la console AWS.
Les notifications proviennent des actualisations du widget : par les widgets de l’écran d’accueil qui l’affichent (et ceux de l’écran verrouillé, sur iPhone et iPad), y compris une Vue d’ensemble qui le liste, et dans l’app. Gardez le widget sur votre écran d’accueil, comme à l’étape 2, sinon il n’est actualisé que lorsque CloudPeek est ouvert.
Ne remplace pas un système d’astreinte. Les notifications proviennent des actualisations du widget : elles ne sont donc pas plus rapides que celles-ci, souvent espacées de plusieurs dizaines de minutes sur iPhone et iPad, et moins fréquentes en mode Économie d’énergie ou si vous regardez rarement le widget ; sur Android, toutes les 15 minutes au plus, et moins souvent quand le téléphone économise la batterie (consultez Quand les widgets s’actualisent). Ouvrir l’app l’actualise aussi. Continuez d’alerter via Amazon SNS ou votre outil d’astreinte pour les alarmes qui nécessitent une intervention en quelques minutes.
- Chaque alarme fait l’objet d’une seule notification chaque fois qu’elle passe en alarme, quel que soit le nombre d’actualisations ou de widgets qui la trouvent. Une alarme déjà en alarme quand vous activez les notifications est signalée la prochaine fois qu’elle se déclenche. Une alarme qui passe de OK à données insuffisantes ne se déclenche pas : elle n’est donc pas signalée.
- Jusqu’à trois alarmes qui se déclenchent en même temps reçoivent chacune une notification. Au-delà, elles sont regroupées dans une seule notification qui les nomme toutes, comme « 4 alarmes sont en alarme ».
- Une alarme qui porte le même nom qu’une autre alarme listée par le widget est nommée avec sa région et, si elle vient d’un autre compte, avec son ID de compte AWS quand c’est ce qui les distingue, par exemple « api-5xx (us-east-1, 222222222222) est en alarme ».
- Les notifications sont créées sur votre téléphone ou votre tablette à partir de ce que le widget a récupéré. Rien n’est envoyé à CloudPeek ni à un service de notifications push, et elles ne nécessitent aucune autorisation AWS que le widget n’a pas déjà.
- Supprimer le widget désactive ses notifications, et Annuler les réactive.
- Si les notifications sont désactivées pour CloudPeek dans les réglages de votre téléphone, l’écran du widget affiche « Les notifications sont désactivées pour CloudPeek. Autorisez-les dans Réglages pour recevoir les notifications. » (sur Android, « … dans Paramètres … »). Sur iPhone et iPad, touchez Ouvrir Réglages, activez Autoriser les notifications, puis revenez dans CloudPeek. Sur Android, appuyez sur Ouvrir les paramètres, qui ouvre les paramètres de notification de CloudPeek, activez-les, puis revenez.
Dépannage
Une alarme affiche un cercle en pointillés
CloudPeek ne l’a pas trouvée. Vérifiez que le nom, la région et le compte de l’ARN correspondent exactement à l’alarme : les noms d’alarmes sont sensibles à la casse. CloudPeek recherche les alarmes dans le compte depuis lequel vous avez épinglé le widget, si bien qu’une alarme d’un autre compte AWS est introuvable ; placez-la sur un tableau de bord de ce compte et ajoutez ce compte à CloudPeek.
Une alarme affiche un point d’interrogation
Elle n’a pas encore assez de données pour que CloudWatch l’évalue, comme dans la console. Elle est listée après les alarmes à l’état ALARM.
CloudPeek indique que l’accès est refusé
L’accès a besoin de cloudwatch:DescribeAlarms. Cette autorisation figure dans la politique CloudPeek et dans la politique gérée par AWS CloudWatchReadOnlyAccess.
Les notifications n’arrivent pas
Vérifiez que Notifier quand une alarme se déclenche est activé pour le widget, que son écran n’indique pas que les notifications sont désactivées, et que le widget se trouve sur votre écran d’accueil (ou, sur iPhone et iPad, sur votre écran verrouillé), dont les actualisations les envoient. Elles n’arrivent qu’au rythme des actualisations du widget, et une alarme déjà en alarme est signalée la prochaine fois qu’elle se déclenche. Consultez Être averti quand une alarme se déclenche.
L’ordre est différent dans la console
Sans "sortBy": "stateUpdatedTimestamp", la console CloudWatch trie les alarmes par nom. Ajoutez-le aux propriétés du widget pour retrouver l’ordre de CloudPeek.
Autre chose
Consultez Dépannage, ou écrivez à support@cloudpeek.app. Ne nous envoyez jamais votre clé d’accès secrète.