Aller au contenu

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
Les scripts 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épertoire xxx/tests de 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
Explications :

  • NB_SHARDS=4: on indique le nombre de lancements en parallèle. Ici, avec NB_SHARDS=4 on suppose que l'opérateur aura 4 fenêtres de terminal ouvertes ;
  • SHARDID: dans chaque fenêtre l'ID SHARDID doit 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.sh pour 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.sh comme wrapper pour exécuter le script de test fonctionnel initialement prévu. Par exemple ./func_tests_xxx.sh $z devient ./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#
  1. 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'))
    
  2. 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#
  1. 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'))
    
  2. Lancez le script dans les 4 fenêtres de terminal pour vérifier la stack Grafana des zones clients :

  3. Dans les 4 fenêtres de terminal et attribuez une valeur différente à la variable SHARDID dans chacune d'elles, tout en conservant la même valeur pour NB_SHARDS :
  4. 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#
  1. 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'))
    
  2. 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#
  1. 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' ' '))
    
  2. 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#
  1. 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' ' '))
    
  2. 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#
  1. 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' ' '))
    
  2. 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#

  1. 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"))
    

  2. 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.json généré ;
  • par consultation des fichiers /tmp/mylog.xxx pour 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#
  1. 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'))
    
  2. Exécution des scripts :

    for z in ${ZONES[@]}; do
        ./func_tests_svc_monitoring_stack_client.sh $z | egrep -v '(INFO|OK)'
    done
    
grafana-client#
  1. 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'))
    
  2. Exécution du script :

    for z in ${ZONES[@]}; do
       ./func_tests_svc_grafana_client.sh $z | egrep -v '(INFO|OK)'
    done
    
loki-client#
  1. 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'))
    
  2. 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#
  1. 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' ' '))
    
  2. 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#
  1. 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' ' '))
    
  2. Exécution du script :

    for z in ${ZONES[@]}; do
       ./func_tests_svc_grafana.sh $z | egrep -v '(INFO|OK)'
    done
    

loki#
  1. 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' ' '))
    
  2. 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#

  1. Liste des clusters (kub-*) :

    TYPE="cluster"
    ZONES=($(sd get zones | jq -r ".[]|select(.type == \"$TYPE\" and .product == \"$PRODUCT\" and .metadata.line == \"$LINE\") | .name"))
    

  2. Exécution du script :

    for z in ${ZONES[@]}; do
       ./func_tests_kub.sh $z | egrep -v '(INFO|OK)'
    done