Tests de conformité stack monitoring/logging#
Prérequis#
Repository des tests fonctionnels :
git clone git@git.corp.caascad.com:caascad/applications/poc_check_functional_tests_monitoring.git /tmp/poc_check_functional_tests_monitoring
cd /tmp/poc_check_functional_tests_monitoring/ngot
func_tests_xxx.sh font appel aux scripts des tests qui se trouvent dans le répertoire tests/ du repository de chaque application.
Ils effectuent plusieurs tâches :
- cloner les repositories des applications nécessaires ;
- se connecter à la zone des tests (par exemple
kswitch) ; nix-shell: dans le répertoirexxx/testsde chaque application (ce n'est pas forcément la même version de la toolbox selon les répertoires de tests) ;- lancement des tests prévus pour le subtype de la zone ;
- rapport des tests dans un fichier json.
Méthode "en parallèle"#
Préparatifs#
Ouvrez 4 fenêtres de terminal et définissez les variables suivantes :
PRODUCT="ngot"
LINE="prod" # ou LINE="staging"
export CAASCAD_ZONES_FILE=/tmp/zones.json
sd get zones > "${CAASCAD_ZONES_FILE}"
KSWITCH=/tmp/poc_check_functional_tests_monitoring/ngot/k8s-access
SPLIT_IN_SHARDS=/tmp/poc_check_functional_tests_monitoring/ngot/split_in_shards.sh
Dans les 4 fenêtres de terminal, attribuez une valeur différente à la variable SHARDID dans chacune d'elles, tout en conservant la même valeur pour NB_SHARDS :
SHARDID=0 # ou 1 ou 2 ou 3
NB_SHARDS=4
NB_SHARDS=4: on indique le nombre de lancements en parallèle. Ici, avecNB_SHARDS=4on suppose que l'opérateur aura 4 fenêtres de terminal ouvertes ;SHARDID: dans chaque fenêtre l'IDSHARDIDdoit changer. C'est la seule modification à apporter lorsqu'on copie/colle ce code dans les fenêtres de terminal ;
Note
Les tests génèrent de nombreux fichiers temporaires et en particulier de logs dans des répertoires /tmp/mylog.xxx/.
Avant de lancer les tests, toujours commencer par supprimer les anciens fichiers de logs :
rm -rf /tmp/mylog*
Explications#
Cette méthode utilise les scripts suivants :
- script
split_in_shards.shpour découper le travail. Pour chaque type de zone, la liste des zones${ZONES[@]}est la même et le script se charge de découper le travail ; - script
run_in_parallel_env.shcomme wrapper pour exécuter le script de test fonctionnel initialement prévu. Par exemple./func_tests_xxx.sh $zdevient./run_in_parallel_env.sh "${SHARDID}" ./func_tests_xxx.sh $z. Il se chargera de plusieurs tâches, dont :- créer d'autres variables d'environnement pour éviter tout conflit de connexion aux clusters,
- lancer le script indiqué en argument,
- rediriger la sortie (standard et erreur) vers des fichiers plus facile à consulter que la sortie du terminal dans les répertoires
/tmp/mylog.xxx.
Avec cette méthode, en cas d'échec d'un script de test, il faudra aller voir les traces d'exécution du script dans /tmp/mylog.xxx.
Zones service#
Zones client#
monitoring-stack-client#
-
Ouvrez 4 fenêtres de terminal et définissez les variables suivantes :
TYPE="service" SUBTYPE="monitoring-stack-client" ZONES=($(sd get zones | jq -r ".[]|select(.type == \"$TYPE\" and .subtype == \"$SUBTYPE\" and .product == \"$PRODUCT\" and .metadata.line == \"$LINE\") | .contract_zone_name" | tr '\n' ' ' | sed 's/obs-//g')) -
Lancez le script dans les 4 fenêtres de terminal pour vérifier la stack monitoring des zones clients:
for z in $(${SPLIT_IN_SHARDS} "${NB_SHARDS}" "${SHARDID}" ${ZONES[@]}); do ./run_in_parallel_env.sh "${SHARDID}" ./func_tests_svc_monitoring_stack_client.sh $z done
grafana-client#
-
Ouvrez 4 fenêtres de terminal et définissez les variables suivantes :
TYPE="service" SUBTYPE="grafana-client" ZONES=($(sd get zones | jq -r ".[]|select(.type == \"$TYPE\" and .subtype == \"$SUBTYPE\" and .product == \"$PRODUCT\" and .metadata.line == \"$LINE\") | .contract_zone_name" | tr '\n' ' ' | sed 's/obs-//g')) -
Lancez le script dans les 4 fenêtres de terminal pour vérifier la stack Grafana des zones clients :
- Dans les 4 fenêtres de terminal et attribuez une valeur différente à la variable
SHARDIDdans chacune d'elles, tout en conservant la même valeur pourNB_SHARDS: - Lancez le script dans les 4 fenêtres de terminal pour vérifier la stack monitoring des zones clients:
for z in $(${SPLIT_IN_SHARDS} "${NB_SHARDS}" "${SHARDID}" ${ZONES[@]}); do ./run_in_parallel_env.sh "${SHARDID}" ./func_tests_svc_grafana_client.sh $z done
loki-client#
-
Ouvrez 4 fenêtres de terminal et définissez les variables suivantes :
TYPE="service" SUBTYPE="loki-client" ZONES=($(sd get zones | jq -r ".[]|select(.type == \"$TYPE\" and .subtype == \"$SUBTYPE\" and .product == \"$PRODUCT\" and .metadata.line == \"$LINE\") | .contract_zone_name" | tr '\n' ' ' | sed 's/obs-//g')) -
Lancez le script dans les 4 fenêtres de terminal pour vérifier la stack Loki des zones clients :
for z in $(${SPLIT_IN_SHARDS} "${NB_SHARDS}" "${SHARDID}" ${ZONES[@]}); do ./run_in_parallel_env.sh "${SHARDID}" ./func_tests_svc_loki_client.sh $z done
Zones centrales#
monitoring-stack-corp#
-
Ouvrez 4 fenêtres de terminal et définissez les variables suivantes :
TYPE="service" SUBTYPE="monitoring-stack-corp" ZONES=($(sd get zones | jq -r ".[] | select((.product == \"$PRODUCT\") and .metadata.line == \"$LINE\" and .type == \"$TYPE\" and .subtype == \"$SUBTYPE\") | .name" | tr '\n' ' ')) -
Lancez le script dans les 4 fenêtres de terminal pour vérifier la stack monitoring des zones centrales :
for z in $(${SPLIT_IN_SHARDS} "${NB_SHARDS}" "${SHARDID}" ${ZONES[@]}); do ./run_in_parallel_env.sh "${SHARDID}" ./func_tests_svc_monitoring_stack_corp.sh $z done
grafana#
-
Ouvrez 4 fenêtres de terminal et définissez les variables suivantes :
TYPE="service" SUBTYPE="grafana" ZONES=($(sd get zones | jq -r ".[] | select((.product == \"$PRODUCT\") and .metadata.line == \"$LINE\" and .type == \"$TYPE\" and .subtype == \"$SUBTYPE\") | .name" | tr '\n' ' ')) -
Lancez le script dans les 4 fenêtres de terminal pour vérifier la stack Grafana des zones centrales :
for z in $(${SPLIT_IN_SHARDS} "${NB_SHARDS}" "${SHARDID}" ${ZONES[@]}); do ./run_in_parallel_env.sh "${SHARDID}" ./func_tests_svc_grafana.sh $z done
loki#
-
Ouvrez 4 fenêtres de terminal et définissez les variables suivantes :
TYPE="service" SUBTYPE="loki" ZONES=($(sd get zones | jq -r ".[] | select((.product == \"$PRODUCT\") and .metadata.line == \"$LINE\" and .type == \"$TYPE\" and .subtype == \"$SUBTYPE\") | .name" | tr '\n' ' ')) -
Lancez le script dans les 4 fenêtres de terminal pour vérifier la stack Loki des zones centrales :
for z in $(${SPLIT_IN_SHARDS} "${NB_SHARDS}" "${SHARDID}" ${ZONES[@]}); do ./run_in_parallel_env.sh "${SHARDID}" ./func_tests_svc_loki.sh $z done
Zones cluster#
-
Ouvrez 4 fenêtres de terminal et définissez les variables suivantes :
PRODUCT="ngot" LINE="prod" # ou "staging" TYPE="cluster" ZONES=($(sd get zones | jq -r ".[]|select(.type == \"$TYPE\" and .product == \"$PRODUCT\" and .metadata.line == \"$LINE\") | .name")) -
Lancez le script dans les 4 fenêtres de terminal :
for z in $(${SPLIT_IN_SHARDS} "${NB_SHARDS}" "${SHARDID}" ${ZONES[@]}); do ./run_in_parallel_env.sh "${SHARDID}" ./func_tests_kub.sh $z done
Vérifications#
La vérification se fait en générant un rapport avec les contenu des logs :
(echo "["; cat /tmp/mylog.*/json.log| sed -e 's/$/,/g' -e '$s/,$//'; echo "]") | jq -r . > /tmp/check-func_tests_kub.json
jq -r '.[] | select(.status != "OK") | .' /tmp/check-func_tests_kub.json
La vérification s'effectue facilement :
- par consultation du fichier
/tmp/check-func_tests_kub.jsongénéré ; - par consultation des fichiers
/tmp/mylog.xxxpour les tests en erreurs identifiés dans le fichier de rapport.
Méthode "par zones"#
Cette méthode permet d'utiliser les scripts de manière plus ciblée soit en les regroupant par type de zone, soit en itérant sur un ${ZONE} correspondant mieux au besoin.
Préparatifs#
PRODUCT="ngot"
LINE="prod" # ou LINE="staging"
Tip
Le rapport détaillé des tests est placé dans un répertoire temporaire supprimé à la fin de l'exécution des tests. Pour éviter cette suppression il est possible de forcer ce répertoire ainsi :
TMPDIR="/tmp/mylogs"
mkdir -p "${TMPDIR}"
Zones service#
Zones client#
monitoring-stack-client#
-
Liste zones clients :
TYPE="service" SUBTYPE="monitoring-stack-client" ZONES=($(sd get zones | jq -r ".[]|select(.type == \"$TYPE\" and .subtype == \"$SUBTYPE\" and .product == \"$PRODUCT\" and .metadata.line == \"$LINE\") | .contract_zone_name" | tr '\n' ' ' | sed 's/obs-//g')) -
Exécution des scripts :
for z in ${ZONES[@]}; do ./func_tests_svc_monitoring_stack_client.sh $z | egrep -v '(INFO|OK)' done
grafana-client#
-
Liste des zones client :
TYPE="service" SUBTYPE="grafana-client" ZONES=($(sd get zones | jq -r ".[]|select(.type == \"$TYPE\" and .subtype == \"$SUBTYPE\" and .product == \"$PRODUCT\" and .metadata.line == \"$LINE\") | .contract_zone_name" | tr '\n' ' ' | sed 's/obs-//g')) -
Exécution du script :
for z in ${ZONES[@]}; do ./func_tests_svc_grafana_client.sh $z | egrep -v '(INFO|OK)' done
loki-client#
-
Liste des zones client :
TYPE="service" SUBTYPE="loki-client" ZONES=($(sd get zones | jq -r ".[]|select(.type == \"$TYPE\" and .subtype == \"$SUBTYPE\" and .product == \"$PRODUCT\" and .metadata.line == \"$LINE\") | .contract_zone_name" | tr '\n' ' ' | sed 's/obs-//g')) -
Exécution du script :
for z in ${ZONES[@]}; do ./func_tests_svc_loki_client.sh $z | egrep -v '(INFO|OK)' done
Zones centrales#
monitoring-stack-corp#
-
Liste des zones centrales :
TYPE="service" SUBTYPE="monitoring-stack-corp" ZONES=($(sd get zones | jq -r ".[] | select((.product == \"$PRODUCT\") and .metadata.line == \"$LINE\" and .type == \"$TYPE\" and .subtype == \"$SUBTYPE\") | .name" | tr '\n' ' ')) -
Exécution du script :
for z in ${ZONES[@]}; do ./func_tests_svc_monitoring_stack_corp.sh $z | egrep -v '(INFO|OK)' done
Note
Dans le cas ou vous souhaiteriez exécuter le script de conformité sur une seule zone, il existe deux moyens de le faire :
git clone git@git.corp.caascad.com:caascad/applications/poc_check_functional_tests_monitoring.git && cd poc_check_functional_tests_monitoring/ngot
./func_tests_svc_monitoring_stack_corp.sh "<zone name>" # example : ./func_tests_svc_monitoring_stack_corp.sh svc-monitoring-stack-corp-prd-2
./func_tests_svc_monitoring_stack_corp.sh "<line>" "<hint>" # example : ./func_tests_svc_monitoring_stack_corp.sh prd mon4
grafana#
-
Liste des zones centrales :
TYPE="service" SUBTYPE="grafana" ZONES=($(sd get zones | jq -r ".[] | select((.product == \"$PRODUCT\") and .metadata.line == \"$LINE\" and .type == \"$TYPE\" and .subtype == \"$SUBTYPE\") | .name" | tr '\n' ' ')) -
Exécution du script :
for z in ${ZONES[@]}; do ./func_tests_svc_grafana.sh $z | egrep -v '(INFO|OK)' done
loki#
-
Liste des zones Loki centrales :
TYPE="service" SUBTYPE="loki" ZONES=($(sd get zones | jq -r ".[] | select((.product == \"$PRODUCT\") and .metadata.line == \"$LINE\" and .type == \"$TYPE\" and .subtype == \"$SUBTYPE\") | .name" | tr '\n' ' ')) -
Lancez le script dans les 4 fenêtres de terminal pour vérifier la stack Loki des zones centrales :
for z in ${ZONES[@]}; do ./func_tests_svc_loki.sh $z | egrep -v '(INFO|OK)' done
Note
Dans le cas ou vous souhaiteriez exécuter le script de conformité sur une seule zone, il existe plusieurs moyens de le faire :
git clone git@git.corp.caascad.com:caascad/applications/poc_check_functional_tests_monitoring.git && cd poc_check_functional_tests_monitoring/ngot
./func_tests_svc_loki.sh "<line>" # example : ./func_tests_svc_loki.sh prd
./func_tests_svc_loki.sh "<contract>" # example : ./func_tests_svc_loki.sh corp-stg
./func_tests_svc_loki.sh "<zone name>" # example : ./func_tests_svc_loki.sh svc-loki-central-corp-stg
./func_tests_svc_loki.sh "<namespace>" "<zone name>" # example : ./func_tests_svc_loki.sh loki-client-obs-corp-stg svc-loki-central-corp-stg
Zones cluster#
-
Liste des clusters (
kub-*) :TYPE="cluster" ZONES=($(sd get zones | jq -r ".[]|select(.type == \"$TYPE\" and .product == \"$PRODUCT\" and .metadata.line == \"$LINE\") | .name")) -
Exécution du script :
for z in ${ZONES[@]}; do ./func_tests_kub.sh $z | egrep -v '(INFO|OK)' done