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:9093etamtool --alertmanager.url http://localhost:9093 - avec le wrapper
amtool-caascad(qui utilise Rancher) en indiquant un--alertmanager.urlcomme 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 paquetalertmanageret sa version proviennent de https://github.com/prometheus/alertmanager/release tel que décrit dans le fichiernix/sources.jsonde 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 dehash mismatch. Le hash spécifié est celui indiqué dansnix/sources.jsonalors 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 diffpuis publier avecgit add ...,git commit -m "bump amtool <version>"etgit 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.