Aller au contenu

Démantèlement de la zone Loki d'un client#

Préparatifs#

Note

On garde les préparatifs pour pouvoir les réutiliser plus tard.

CLIENT=xxxx       # pour obs-pf : CLIENT=pf
ENVS_NG=xxx       # exemple : $HOME/git/caascad/terraform/envs-ng
CLUSTER=xxx       # pour obs-pf : CLUSTER=kub-9

export VAULT_ADDR=https://vault.infra-prd.caascad.com/
export VAULT_FORMAT=json
vault token lookup > /dev/null 2>&1 || vault login -method oidc

Gestion des silences#

Afin d'éviter d'alerter pendant la période de démantèlement de la zone Loki, il est important de poser des silences sur toute la zone.

Depuis cette URL :

xdg-open 'https://karma-infra.infra-prd.caascad.com/?m='$(echo '{"am":[{"label":"svc-monitoring-stack-corp-prd-1","value":["svc-monitoring-stack-corp-prd-1"]},{"label":"svc-monitoring-stack-corp-prd-2","value":["svc-monitoring-stack-corp-prd-2"]}],"m":[{"n":"obs_client","r":false,"e":true,"v":["CLIENT"]},{"n":"ngot_service","r":false,"e":true,"v":["svc-loki-client-CLIENT"]}],"d":10080,"c":"silence_cop '"$(date "+%d%m%Y" -d "8 day")"' Decom zone Loki for client CLIENT (silence to remove after decom)"}' | sed -e "s/CLIENT/${CLIENT}/g" | base64 -w0)

Exemple : Silences dans karma

Depuis cette URL :

xdg-open 'https://karma-infra.infra-prd.caascad.com/?m='$(echo '{"am":[{"label":"svc-monitoring-stack-corp-prd-1","value":["svc-monitoring-stack-corp-prd-1"]},{"label":"svc-monitoring-stack-corp-prd-2","value":["svc-monitoring-stack-corp-prd-2"]}],"m":[{"n":"alertname","r":false,"e":true,"v":["BlackboxMetricsMissing"]},{"n":"instance","r":true,"e":false,"v":["loki.*CLIENT.*"]}],"d":10080,"c":"silence_cop '"$(date "+%d%m%Y" -d "8 day")"' Decom zone Loki for client CLIENT (silence to remove after decom)"}' | sed -e "s/CLIENT/${CLIENT}/g" | base64 -w0)

Exemple : Silences dans karma

À la fin du démantèlement il sera nécessaire de supprimer les silences mis en place.

Zone loki-client#

On se positionne sur la branche master :

cd ${ENVS_NG}
git switch master && git pull
nix-shell

On relance les préparatifs :

CLIENT=xxxx       # pour obs-pf: CLIENT=pf
ENVS_NG=xxx       # exemple: $HOME/git/caascad/terraform/envs-ng
CLUSTER=xxx       # pour obs-pf: CLUSTER=kub-9

On supprime la zone Loki :

cd contexts/ngot
trackbone destroy -t purge=true -z "svc-loki-client-${CLIENT}" --non-interactive --detailed-exitcode -n 8 --add-services

Note

Vérifier INFO Trackbone Stats: Succeeded=x Skipped=x Failed=x Disabled=x Total=x.

Si la valeur Failed est plus grande que 0, identifier les configurations en échec et lancer trackbone destroy -t purge=true avec ces configurations.

Datasource Loki#

On supprime la datasource Loki dans Grafana.

  • On prépare la future MR

    cd ${ENVS_NG}
    git switch -c decom-loki-obs-${CLIENT}
    
  • On modifie ngot-zone zones/ngot_zones/client-<client>.cue :

    --- a/zones/ngot_zones/client-test05.cue
    +++ b/zones/ngot_zones/client-test05.cue
    @@ -67,7 +67,6 @@ _zones: {
      _datasource_thanos: "\(shortname)":       _
                           _datasource_alertmanager: "\(shortname)": _
    -                      _datasource_loki: "\(shortname)":         _
                           datasources: {
                                    _datasource_thanos[shortname]
                                    _datasource_alertmanager[shortname]
    -                               _datasource_loki[shortname]
                           }
                }
            }
    
  • On redéploie Grafana :

    cd ${ENVS_NG}
    generate-static-zones-files
    cd contexts/ngot
    trackbone apply -z svc-grafana-client-${CLIENT} -c grafana
    
  • La datasource loki reste présente dans la database Grafana. Vous devez forcer la suppression :

    • éditer la configmap grafana-obs-${CLIENT} :

      kswitch svc-grafana-client-${CLIENT}
      kubectl edit cm grafana-obs-${CLIENT} -n grafana-client-obs-${CLIENT}
      
    • ajouter les lignes suivantes :

      data:
        deleteDatasources:
          - name: loki
            orgId: 1
      
    • redémarrer le pod Grafana :

      kubectl delete pod grafana-obs-${CLIENT}-0 -n grafana-client-obs-${CLIENT}
      
    • vérifier que la datasource loki n'existe plus dans Grafana ;

    • redéployer Grafana (pour éviter un drift sur la configmap ci-dessus) :

      trackbone apply -z svc-grafana-client-${CLIENT} -c grafana
      
  • vérifier à nouveau que la datasource loki n'est plus présente dans Grafana.

Vault#

La commande suivante ne doit rien retourner :

for i in $(vault list secret/zones/fe/svc-loki-client-${CLIENT}/ | jq -r '.[]'); do
    echo "vault delete secret/zones/fe/svc-loki-client-${CLIENT}/$i";
done

Si cela retourne des lignes de commande, il est nécessaire de les exécuter.

Git#

Loki rules#

Suppression du dossier client dans le repo git loki rules.

git clone git@sourcehub.orange-business.com:cs-factory/loki-client-rules.git /tmp/loki-client-rules
cd /tmp/loki-client-rules
git switch -c decom-obs-${CLIENT}
git rm -r obs-${CLIENT}
git commit -m "Removing Loki Rules Directory for obs-${CLIENT}"
git push origin decom-obs-${CLIENT}

Soumettre la MR pour validation et merger.

Note

Ce repo n'est pas accessible aux clients. On peut utiliser notre compte nominatif.

Variable CI/CD#

Aller dans les variables CI/CD et supprimer les credentials Loki (LOKI_USERNAME et LOKI_PASSWORD):

xdg-open https://sourcehub.orange-business.com/cs-factory/cs-factory-environments/obs-${CLIENT}/-/settings/ci_cd

Suppression du namespace#

kswitch ${CLUSTER}
kubectl delete ns loki-client-obs-${CLIENT}

Post-démantèlement#

  • Suppression de la zone dans Envs-ng

    Supprimer la zone loki-client dans zones/ngot_zones/client-<client>.cue :

    --- a/zones/ngot_zones/client-test05.cue
    +++ b/zones/ngot_zones/client-test05.cue
    @@ -70,12 +70,4 @@ _zones: {
                            }
                   }
           }
    -
    -       // Loki clients services
    -       "svc-loki-client-test05": {
    -               type:               "service"
    -               subtype:            "loki-client"
    -               parent_zone_name:   "kub-10010"
    -               contract_zone_name: "obs-test05"
    -       }
    }
    

    Regénérer les fichiers statiques de zones :

    generate-static-zones-files
    git add gen/
    git add zones/ngot_zones/client-${CLIENT}.cue
    git commit -m "Decom loki ${CLIENT}"
    git push --set-upstream origin decom-loki-obs-${CLIENT}
    
  • Faire valider la MR. Puis la merger.

  • Après avoir mergé :

    git switch master && git pull
    cd contexts/ngot
    trackbone apply -z svc-monitoring-stack-corp-prd-1 -c prometheus-rules -c blackbox-exporter-core -t blackbox_exporter_refresh_cache=true --non-interactive --add-services
    trackbone apply -z svc-monitoring-stack-corp-prd-2 -c prometheus-rules -c blackbox-exporter-core --non-interactive --add-services
    trackbone apply -z "${CLUSTER}" -c ingress_controller_v2_public --non-interactive
    
  • Vérifier qu'il n'y a pas d'alertes liées à la zone Loki démantelée.

  • Supprimer les silences sur la zone Loki démantelée.

  • Supprimer les PVs Released :

    kswitch ${CLUSTER}
    kubectl get pv | grep ${CLIENT} | grep Released
    

    S'il y en a, supprimez-les :

    for pv in $(kubectl get pv | grep ${CLIENT} | grep Released | awk '{print $1}'); do
      kubectl delete pv ${pv}
    done
    

Confluence#

Indiquer que Loki n'est plus utilisé dans la page client.

Exemple : Silences dans karma

Points de contrôle#

Les points à contrôler sont définis dans le modèle Jira. Voici quelques précisions :

Aucune référence à la zone Loki :
* (on) dans envs-ng
* (on) dans Vault (path: {{zones/fe}})
* (on) dans la documentation

La suppression de la zone Loki est indiquée :
* (on) dans la page client dans Confluence (avec la référence du ticket Jira)

Gitops :
* (on) aucune référence à la zone dans loki-rules

Dans la console FE, aucune ressource liée à la zone Loki :
* (on) buckets S3

Silences :
* (on) absence de silences dans Karma

Cluster :
* (on) absence de PV avec le status {{Released}}
* (on) le namespace {{loki-client-obs-CLIENT}} n'existe plus

Grafana :
* (on) absence de la datasource Loki