Aller au contenu

Amtool#

Alertmanager est fourni avec l’outil amtool, qui permet de surveiller, de gérer et de désactiver les alertes directement. Il peut être vu comme l'équivalent CLI de Karma.

L’outil amtool nécessite en argument l’URL d’Alertmanager à l’aide de l’option --alertmanager.url chaque fois que vous exécutez une commande.

Il est important d'adresser le bon alertmanager. Alertmanager n'étant pas exposé avec des ingress, il existe deux façons de faire :

  • avec un kubectl port-forward ... 9093:9093 et amtool --alertmanager.url http://localhost:9093
  • avec le wrapper amtool-caascad (qui utilise Rancher) en indiquant un --alertmanager.url comme indiqué dans ce tableau.
cc_prom alertmanager.url
infra <zone>/caascad (exemple: infra-stg/caascad)
infra-consumption <zone>/consumption (exemple: infra-stg/consumption)
cloud-caascad <zone>/caascad (exemple : ocb-test06/caascad)
cloud-client <zone>/client (exemple : ocb-test06/client)
cloud-app <zone>/client (exemple : ocb-test06/app)

Plus d'informations: nomenclature labels Caascad.

Installation#

$ toolbox install amtool amtool-caascad

Usage#

Fonctionnement de amtool et amtool-caascad#

L'exécutable amtool est celui fourni par Alertmanager.

Le wrapper amtool-caascad utilise amtool. Il réécrit l'option --alertmanager.url afin de simplifier l'écriture des URL Rancher (particulièrement longues). De plus, avec Rancher, il faut créer un fichier avec un token et indiquer ce fichier à amtool. amtool-caascad est capable d'aller chercher ce token, créer le fichier et l'indiquer à amtool. Ce fichier se trouve dans $HOME/.config/amtool-caascad/cache/.

Lister les alertes#

$ amtool-caascad alert --output extended --alertmanager.url <alertmanager_url>

Lister les silences#

$ amtool-caascad silence --output extended --alertmanager.url <alertmanager_url>

Ajouter un silence#

$ amtool-caascad silence add <labels_key=labels_value> --author <nom_auteur> --duration <durée> --comment <ticket_id or comment> --alertmanager.url <alertmanager_url>

Supprimer un silence#

$ amtool-caascad silence expire <silence_id> --alertmanager.url <alertmanager_url>

Cas d'usage#

Recherche des silences qui expirent dans 72h#

Se placer dans le repo caascad-zones.

$ ZONES="$(cat zones.json | jq -r '.[] | select(.infra_zone_name=="infra-prd") | select(.type=="cloud") .name')"
$ for zone in $ZONES; do echo $zone ; amtool-caascad silence query --within 72h --alertmanager.url "${zone}/caascad" -o json |jq -r '.[]| "\(.id) \(.comment) \(.endsAt)"';done
$ for zone in $ZONES; do echo $zone ; amtool-caascad silence query --within 72h --alertmanager.url "${zone}/client" -o json |jq -r '.[]| "\(.id) \(.comment) \(.endsAt)"';done

Update d'un silence#

Recherche d'un silence spécifique (example: 2a2c70c3-fdcf-4171-b783-d749a78a9321) :

$ amtool-caascad silence query --alertmanager.url ocb-sbmaeg/client | grep 2a2c70c3-fdcf-4171-b783-d749a78a9321

2a2c70c3-fdcf-4171-b783-d749a78a9321 cc_prom_source=videopoc 2020-07-03 12:43:31 UTC  cyb CLUSTER_Hibernate CW-1504

Configurer une nouvelle valeur pour la durée du silence :

$ amtool-caascad silence update 2a2c70c3-fdcf-4171-b783-d749a78a9321 --duration "360h" --alertmanager.url ocb-sbmaeg/client

ID                                    Matchers                 Ends At                  Created By  Comment                    
abf61e81-4880-46be-b86c-123fef7eea49  cc_prom_source=videopoc  2020-07-04 09:59:57 UTC  cyb         CLUSTER_Hibernate CW-1504  

Le silence a été modifié.

Placer une alerte pour un test de bon fonctionnement de la federation#

$ amtool-caascad alert add alertname=testPleaseIgnore severity=critical --annotation=message="PleaseIgnore" --alertmanager.url <client_id>/caascad

Résultat: l'alerte est supprimée automatiquement.

Ajout d'un silence sur un cluster client#

Exemples :

cloud-client

$ amtool-caascad silence add cc_prom_source="videopoc" --author "cyb" --duration "24h" --comment "CLUSTER_Hibernate CW-1504" --alertmanager.url ocb-sbmaeg/client

cloud-caascad

$ amtool-caascad silence add alertname="K8sFunctionalTestFailed" cc_client="ocb-sbmaeg" --author "cyb" --duration "24h" --comment "CLUSTER_Hibernate CW-1504c" --alertmanager.url ocb-sbmaeg/caascad

Toolbox#

Les modifications dans la Toolbox s'effectuent dans https://github.com/Caascad/toolbox.

Note

Pré-requis : avoir des droits sur ce repo afin de pouvoir y pousser une branche et créer une Pull Request.

Sans ces droits, il est possible de créer un fork puis de travailler sur ce fork, mais ce workflow étant un peu plus complexe, il n'est pas à privilégier.

Amtool#

Pour mettre à jour amtool, il faut suivre cette séquence :

  • git clone https://github.com/Caascad/toolbox.git && cd toolbox ;
  • créer une branche de travail ;
  • nix-channel --update && nix-env -iA nixpkgs.nix ;
  • niv update alertmanager -v <version> : le paquet alertmanager et sa version proviennent de https://github.com/prometheus/alertmanager/release tel que décrit dans le fichier nix/sources.json de la toolbox. Exemple : niv update alertmanager -v 0.25.0 ;
  • nix-build -A amtool : recompile amtool. En fin de compilation, nous devons obtenir une erreur de hash mismatch. Le hash spécifié est celui indiqué dans nix/sources.json alors que le hash obtenu est celui résultant de notre build ;
  • éditer nix/sources.json : retrouver l'ancien hash et le remplacer par le nouveau ;
  • relancer le build : nix-build -A amtool. Il ne doit pas y avoir d'erreur cette fois-ci ;
  • git diff puis publier avec git add ..., git commit -m "bump amtool <version>" et git push ;
  • créer une Pull Request ;
  • suivre la Pull Request sur Rocket.Chat sur #ug_toolbox ;
  • faire valider la Pull Request puis la merger.

Amtool-caascad#

La modification de amtool-caascad s'effectue dans le répertoire pkgs/amtool-caascad/.

On peut modifier et tester directement le script amtool-caascad.sh.

Pour publier :

  • modifier le numéro de version d'amtool-caascad dans default.nix ;
  • créer une Pull Request ;
  • suivre la Pull Request sur Rocket.Chat sur #ug_toolbox ;
  • faire valider la Pull Request puis la merger.