Contexte

Afin de prévenir la perte de données après un crash d'un ou de plusieurs serveurs utilisés dans l'architecture de Shinken, il est recommandé d'utiliser les commandes shinken-backup et shinken-restore.

Ces deux commandes permettent de sauvegarder ou de restaurer tout ou une partie d'un serveur de l'architecture de Shinken.

Les commandes shinken-backup et shinken-restore permettent de restaurer automatiquement les données suivantes :

  • Les données sur les add-ons ( par exemple l'add-on Nagvis )
  • Les données de configuration des éléments de Shinken comme les hôtes, clusters, checks ... ( il est possible d'anonymiser ces données )
  • Les données du bac à événements
  • Les logs
  • Les données des modules NON fournis par Shinken Enterprise
  • Les données de la métrologie
  • Les données des SLA
  • Les données des utilisateurs

La rétention effectuée par le Scheduler n'est PAS sauvegardée et restaurée automatiquement par ces scripts.

Il est tout de même possible de le faire manuellement en suivant cette page de documentation : Sauvegarde et restauration manuelle de la rétention

Commande de sauvegarde ( shinken-backup )

Utilisation

La commande de base pour la sauvegarde complète d'un serveur shinken est la suivante :

shinken-backup

La commande shinken-backup ne peut pas être exécutée dans les dossiers /etc/shinken et /etc/shinken-user

Les options disponibles

OptionValeur par défautDescription
 --help, -h

---

Affiche l'aide de la commande.

--output-directory, -od ARG

Répertoire où est lancée la commande.

Répertoire où sera enregistrée la sauvegarde. 

  • Le chemin fourni peut être absolu ( /root/backups/example ).
  • Le chemin peut être relatif. Le répertoire est alors créé à partir du répertoire où est exécutée la commande shinken-backup.


--output-name, -on ARG
YYYY-MM-DD__HH-MM-SS__ShinkenVersion

Nom du répertoire contenant la sauvegarde.

--addons, -a
---

Sauvegarde les configurations et les données des addons :

  • nagvis
    • sauvegarde les dossiers /opt/nagvis et /etc/httpd/conf.d/.
  • nagvis-shinken-architecture :
    • sauvegarde les dossiers /var/lib/shinken-nagvis et /etc/httpd/conf.d.
--configuration, -c 
---

Sauvegarde les données de configuration :

  • Les données du Synchronizer dans la base MongoDB.
  • Les fichiers de configuration dans /etc/shinken/.
  • Les fichiers de configuration dans /etc/shinken-user.
  • Les sondes utilisateurs dans /var/lib/shinken-user/libexec ( (warning) Si les sondes utilisent des dépendances systèmes, il faudra aussi qu'elles soient présentes lors de la restauration pour que les sondes soient opérationnelles ).
  • La rétention de l'Arbiter.


La commande doit être exécutée sur la machine du Synchronizer et avoir accès à la base MongoDB.



 --configuration-anonymous, -ca
---

Sauvegarde les données de configuration anonymisées

  • Les données du Synchronizer dans la base MongoDB anonymisées ( Voir le chapitre : Sauvegarde d'une configuration anonymisée ).


La commande doit être exécutée sur la machine du Synchronizer et avoir accès à la base MongoDB.



 --events, -e
---

Sauvegarde les données du bac à événements

  • Les données dans la base MongoDB du bac à événements.


La commande doit avoir accès à la base MongoDB.

 --log, -l
---

Sauvegarde les logs.

  • Tous les fichiers de logs du dossier /var/log/shinken.
 --modules, -M
---

Permet de sauvegarder les données de tous les modules NON fournis par Shinken Enterprise ( exemple : le module mssql_export )

  • Les données des modules dans MongoDB


La commande doit avoir accès à la base MongoDB.

  --module-type ARG
---

Permet de sauvegarder les données d'un seul type de module NON fourni par Shinken Enterprise. 

À utiliser en complément de l'option --modules/-M.

 --list-modules, -L
---

Permet de lister tous les types de modules NON fournis par Shinken Enterprise qui peuvent être sauvegardés.

La commande doit avoir accès à la base MongoDB.

--metrology, -m
---

Sauvegarde les données de métrologie.

  • Les fichiers du dossier /opt/graphite/storage/whisper.


La commande doit être exécutée sur la machine avec le carbon-cache.

--sla, -s
---

Sauvegarde les données SLA.

  • Les données dans la base MongoDB des SLA.


La commande doit avoir accès à la base MongoDB.

--user, -u
---

Sauvegarde les données des utilisateurs de l'interface de visualisation ( portails, listes, favoris, tableaux de bord... )

  • Les données dans la base MongoDB des dashboards utilisateurs.
  • Les données dans la base MongoDB des listes utilisateurs.
  • Les données dans la base MongoDB des préférences utilisateurs.


La commande doit avoir accès à la base MongoDB.

Sauvegarde de données de configuration chiffrées

Lorsque la sauvegarde de données de configuration avec des données protégées est effectuée, shinken-backup affiche un avertissement si la clé n'a pas été sauvegardée.

La sauvegarde est tout de même effectuée, mais il faut effectuer une sauvegarde de la clé en utilisant la commande shinken-protected-fields-keyfile-export avant toute autre opération impliquant un changement de clé ( voir la page shinken-protected-fields-keyfile-export ).

Le message suivant apparaîtra s'il n'y a pas eu de sauvegarde de la clé avant la sauvegarde de la configuration :

The protected fields key from this backup looks like it has never been saved

Si la sauvegarde de la clé a été effectuée par la suite, il est possible d'ignorer ce message et restaurer la clé selon la procédure de restauration habituelle ( voir la page shinken-protected-fields-keyfile-export ).


Sauvegarde d'une configuration anonymisée

Afin de transmettre une configuration au support, il est possible d'anonymiser la configuration lors de la sauvegarde.


L'anonymisation est réalisée pour les données présentes dans la base de données du Synchronizer. Si l'option --configuration-anonymous est utilisée, les autres options ( --sla  par exemple ) sont ignorées. Les fichiers de configuration des démons et de l'architecture de Shinken ne sont pas sauvegardé.


Cette étape est réalisée entre la récupération des données dans la base et l'écriture des fichiers de sauvegarde, la base de données n'est donc pas impactée par ce fonctionnement. Le tableau suivant présente les propriétés qui seront remplacées avant d'être écrites dans les fichiers de sauvegarde.

Type de donnéeValeur remplacéeDescription
addressclean addressPermets de masquer les adresses des équipements.
check_commandclean_commandPermets de masquer les commandes : une fois restaurée, la configuration pourra démarrer sans effectuer de check.
poller_tag
La valeur est supprimée pour permettre à la configuration de démarrer.
reactionner_tag
La valeur est supprimée pour permettre à la configuration de démarrer.
realm
La valeur est supprimée pour permettre à la configuration de démarrer.
passwordcleanLes mots de passe sont effacés.



Toutes les données utilisateur, chiffrées ou non, présentes dans le système de champs protégé sont également remplacée par la valeur "clean". Pour connaître la liste des champs protégés, utilisez la commande shinken-protected-fields-data-manage.

Le nom de la sauvegarde généré sera succédé de "--anonymous" afin de le distinguer des sauvegardes par défaut.

Exemple de nom de sauvegarde anonyme : 2020-10-27__10-49-55__V02.08.02-001_BUILD066.fr--anonymous

Les données ne sont ni effacées ni modifiées sur le serveur sur lequel le shinken-backup est effectué. Elles sont simplement remplacées avant d'être écrites dans les fichiers de sauvegardes.

La sauvegarde réalisée n'est pas chiffrée, car toutes les données présentant un risque ont été remplacées.

Exemples

Sauvegarde complète d'un serveur hébergeant l'ensemble des démons

root@vm-shinken: ~
$ shinken-backup
Saving Events
  Events save size: 51M
Saving Sla
  Sla save size: 147M
Saving User
  User save size: 136K
Saving Configuration
  Configuration save size: 17M
Saving Metrology
  Metrology save size: 47M
Saving Logs
  Logs save size: 1.1G
Saving addons data
  Addons save size: 4.8M
Saving custom modules data
 There is no custom modules in database to backup.

Done : your backup directory is /root/shinken-backups/2021-02-02__08-22-45__V02.08.02-002.fr

Sauvegarde sur un serveur hébergeant le démon Synchronizer

Sauvegarde de la configuration :

Sauvegarde complète :



Erreur lors du Backup

Si le backup nécessite l'archivage de données depuis la base MongoDB, il est essentiel de vérifier la connectivité avant de lancer la sauvegarde de Shinken. En cas d'inaccessibilité de la base, un message s'affichera, indiquant les paramètres utilisés pour la tentative de connexion."




Lorsqu'une erreur survient pendant la sauvegarde, un message d'erreur  indique la section où l'erreur s'est produite. Le dossier qui aurait dû contenir le contenu de la sauvegarde contiendra les logs d'erreurs.

Dans ce message est précisé le nom du dossier créé :



La partie floutée du chemin de la capture d'écran correspond au dossier créé par le shinken-restore.
Ce nom de dossier est créé à partir de la date, du nom de la version de Shinken et de la langue.

Commande de restauration ( shinken-restore )

Utilisation

shinken-restore DIRECTORY-TO-RESTORE


Le dossier "DIRECTORY-TO-RESTORE" doit contenir les dossiers de sauvegardes comme :

  • configuration/ 
  • context/
  • events/
  • logs/
  • metrology/ 
  • sla/
  • user/ 


Les options disponibles

OptionValeur par défautDescription
 --help, -h

---

Affiche l'aide de la commande.

--addons, -a
---

Restaure les configurations et les données des addons ( exemple: nagvis ) présent dans l'archive :

  • nagvis
    • restaure les dossiers /opt/nagvis et /etc/httpd/conf.d/.
  • nagvis-shinken-architecture :
    • restaure les dossiers  /var/lib/shinken-nagvis et /etc/httpd/conf.d.
--configuration, -c 
---

Restaure les données de configuration. :

  • Les données du Synchronizer dans MongoDB.
  • Les fichiers de configuration dans /etc/shinken/.
  • Les fichiers de configuration dans /etc/shinken-user.
  • Les sondes utilisateurs dans /var/lib/shinken-user/libexec ( (warning) Si les sondes utilisent des dépendances systèmes, il faudra aussi qu'elles soient présentes lors de la restauration pour que les sondes soient opérationnelles ).
  • La rétention de l'Arbiter.


La commande doit être exécutée sur la machine du Synchronizer et avoir accès à la base MongoDB.





--with-key-backup ARG



---

Pour une sauvegarde contenant des données protégées, restaure également le hash de la clé de chiffrement spécifiée. Il s'agit du résultat de la commande shinken-protected-fields-keyfile-export ( voir la page shinken-protected-fields-keyfile-export ).


À utiliser en complément de l'option --configuration, -c.


--restore-only-configuration-database,  --rocd

---

Cette option restaure uniquement les données de la configuration, sans restaurer les fichiers de configuration ( .cfg ).

Cette option est pratique pour transférer la politique de supervision d'une préproduction vers une production ( ou inversement ), sans changer les fichiers de définition des démons.


La commande doit être exécutée sur la machine du Synchronizer et avoir accès à la base MongoDB.

 --events, -e
---

Restaure les données du bac à événements. 

La commande doit avoir accès à la base MongoDB.

--log, -l

---

Restaure les logs.

  • Restaure les fichiers de logs dans le dossier /var/log/shinken. 
  • Supprime les fichiers présents dans /var/log/shinken avant la restauration des logs.


--metrology, -m

---

Restaure les données de métrologie.

  • Restaure les fichiers du dossier /opt/graphite/storage/whisper.
  • Supprimer les fichiers présents dans /opt/graphite/storage/whisper/ avant la restauration des logs.


La commande doit être exécutée sur la machine avec le carbon-cache.


--modules, -M

---

Restaure les données de tous les modules NON fournis par Shinken Enterprise ( exemple : le module mssql_export )

  • Les données des modules dans MongoDB.


La commande doit avoir accès à la base MongoDB.


--module-type ARG

---

Permet de restaurer les données d'un seul type de module NON fournis par Shinken Enterprise. 

À utiliser en complément de l'option --modules, -M.

La commande doit avoir accès à la base MongoDB.

 --list-modules, -L
---

Permet de lister tous les types de modules NON fournis  par Shinken Enterprise  présent dans l'archive de sauvegarde et qui peuvent être restaurés.


--sla, -s

---

Restaure les données SLA.

  • Les données mongo des SLA.


La commande doit avoir accès à la base MongoDB.


--user, -u

---

Restaure les données des utilisateurs de l'interface de visualisation ( portails, listes, favoris, tableaux de bord... )

  • Les données mongo des dashboards utilisateurs.
  • Les données mongo des listes utilisateurs.
  • Les données mongo des préférences utilisateurs.


La commande doit avoir accès à la base MongoDB.


--restore-only-user ARG

---

Restaure les données de l'interface de visualisation ( portails, listes, favoris, tableaux de bord... ) pour l'utilisateur spécifié. La valeur à utiliser est le nom ( contact_name ) de l'utilisateur.

  • Les données mongo des dashboards de l'utilisateur.
  • Les données mongo des listes de l'utilisateur.
  • Les données mongo des préférences de l'utilisateur.

(lightbulb) Cette option ne demande pas le redémarrage de Shinken.

À utiliser en complément de l'option --user, -u.

La commande doit avoir accès à la base MongoDB.

Restauration d'une base de données de configuration dont les données sensibles sont chiffrées

Si une clé est déjà présente sur le serveur et qu'elle est identique à celle de la sauvegarde, shinken-restore restaurera cette sauvegarde en utilisant la clé.

Si la clé n'a pas été exportée, shinken-restore affichera un avertissement signalant qu'elle est automatiquement exportée dans un fichier temporaire, enjoignant de le déplacer en lieu sûr.




Si les deux clés sont différentes il faut spécifier l'option --with-key-backup  suivi du l'export de la clé, qui permet de faire la restauration et de placer automatiquement la clé fournie.

En suivant, il faut redémarrer le Synchronizer.

  • Le Synchronizer refusera de démarrer tant que la clé n'est pas restaurée.

Si la clé a été égaré, il est possible de restaurer la clé par l'intermédiaire du support Shinken ( voir la page shinken-protected-fields-keyfile-rescue-from-backup ).



Exemples

Restauration d'une sauvegarde complète de Shinken depuis le dossier ~/shinken-backups

root@vm-shinken: ~/shinken-backups

$ shinken-restore 2020-10-27__10-47-43__V02.08.02-001_BUILD066.fr__crypted-backup2

Stopping Shinken before restoring
Restoring from 02.08.02-001_BUILD066.fr to 02.08.02-001_BUILD066.fr
-Restoring Sla            DONE
-Restoring User           DONE
-Restoring Configuration  DONE
-Restoring Metrology      DONE
-Restoring Logs           DONE

Sanatizing your restored data
   fix_double_link                         :   skip (unecessary)
   fix_double_sync_keys                    :   skip (unecessary)
   fix_default_item_se_uuid                :   skip (unecessary)
   fix_remove_shinken_core                 :   skip (unecessary)
   fix_remove_deprecated_check             :   skip (unecessary)
   fix_remove_undefined_aix_templates      :   skip (unecessary)
   fix_flapping_thresholds                 :   skip (unecessary)
   fix_business_impact                     :   skip (unecessary)

Done. You can restart your shinken with /etc/init.d/shinken start

Après la restauration des données, des actions automatiques ( sanitizes ) sont lancés. Ces actions permettent, si nécessaire, de mettre les données à jours vers la version de Shinken où sont restaurées les données.

Une fois la restauration terminée, démarrer Shinken:

/etc/init.d/shinken start

Restauration d'une sauvegarde de la configuration de Shinken, lancé depuis le serveur hébergeant l'Arbiter/Synchronizer :

root@vm-shinken: ~/shinken-backups

$ shinken-restore --configuration 2020-10-27__10-47-43__V02.08.02-001_BUILD066.fr__crypted-backup2

Stopping Shinken before restoring
Restoring from 02.08.02-001_BUILD066.fr to 02.08.02-001_BUILD066.fr
-Restoring Configuration  DONE

Sanatizing your restored data
   fix_double_link                         :   executed [OK]
   fix_double_sync_keys                    :   skip (unecessary)
   fix_default_item_se_uuid                :   skip (unecessary)
   fix_remove_shinken_core                 :   skip (unecessary)
   fix_remove_deprecated_check             :   skip (unecessary)
   fix_remove_undefined_aix_templates      :   skip (unecessary)
   fix_flapping_thresholds                 :   skip (unecessary)
   fix_business_impact                     :   skip (unecessary)

Done. You can restart your shinken with /etc/init.d/shinken start

Restauration d'une sauvegarde des données de l'utilisateur "monutilisateur" de Shinken ( portails, listes, favoris, tableaux de bord ), lancé depuis le serveur hébergeant le Broker

root@vm-shinken: ~/shinken-backups

$ shinken-restore -u --restore-only-user monutilisateur 2020-10-27__10-47-43__V02.08.02-001_BUILD066.fr__crypted-backup2
Restoring from 02.08.02-001_BUILD066.fr to 02.08.02-001_BUILD066.fr
-Restoring User
 Restoring only the user monutilisateur

Restore of the user monutilisateur data is OK

Restauration avec une sauvegarde contenant seulement certaines parties

root@vm-shinken: ~/shinken-backups

$ shinken-restore 2021-04-13__12-18-24__V02.08.02-004_BUILD08.fr/
Restoring from 02.08.02-004_BUILD08.fr to 02.08.02-004_BUILD08.fr
 => Restoring Configuration          :
     => Checking encryption status for your current database : NOT ENCRYPTED
     => The keyfile used in the backup is the same as the one from the current configuration.
     => Stopping Shinken before restoring : DONE
     => Restoring configuration database  : DONE
The backup you are restoring contains a encrypted Synchronizer database.
     => Setting addons state
 nagvis                        : ENABLED
    - [ WARNING  ] Cannot find local broker daemon configuration in /etc/shinken/brokers. The 'Livestatus' module must be enabled manually in your broker configuration file for this addon to work properly.

 nagvis-shinken-architecture   : ENABLED
    - [ WARNING  ] Cannot find local broker daemon configuration in /etc/shinken/brokers. The 'Livestatus' module must be enabled manually in your broker configuration file for this addon to work properly.
    - [ WARNING  ] Cannot find local arbiter daemon configuration in /etc/shinken/arbiters. The 'architecture-export' module must be enabled manually in your arbiter configuration file for this addon to work properly.

     => Restoring configuration files     : DONE
     => Restoring configuration           : DONE
 => Restoring Sla                    : SKIPPED
 No sla data to restore in /tmp/shinken-backups/2021-04-13__12-18-24__V02.08.02-004_BUILD08.fr
 => Restoring Events                 : SKIPPED
 No events data to restore in /tmp/shinken-backups/2021-04-13__12-18-24__V02.08.02-004_BUILD08.fr
 => Restoring User                   : SKIPPED
 No user data to restore in /tmp/shinken-backups/2021-04-13__12-18-24__V02.08.02-004_BUILD08.fr
 => Restoring Metrology              : SKIPPED
  No metrology data to restore in /tmp/shinken-backups/2021-04-13__12-18-24__V02.08.02-004_BUILD08.fr
 => Restoring Logs                   : DONE
 => Restoring Addons                 : DONE
 => Restoring custom modules data    : SKIPPED
  No custom modules data to restore in /tmp/shinken-backups/2021-04-13__12-18-24__V02.08.02-004_BUILD08.fr

Sanatizing your restored configuration for this version of Shinken
   fix_double_sync_keys                                                       :   skip (unecessary)
   fix_default_item_se_uuid                                                   :   skip (unecessary)
   fix_remove_shinken_core                                                    :   skip (unecessary)
   fix_remove_deprecated_check                                                :   skip (unecessary)
   fix_remove_undefined_aix_templates                                         :   skip (unecessary)
   fix_flapping_thresholds                                                    :   skip (unecessary)
   fix_business_impact                                                        :   skip (unecessary)
   fix_host_name_inheritance                                                  :   skip (unecessary)
   fix_bp_rule_args                                                           :   skip (unecessary)
   fix_uuid_in_sla_info                                                       :   skip (unecessary)
   fix_synchronizer_install_missing_addons                                    :   skip (unecessary)
   fix_missing_skeletons                                                      :   skip (unecessary)
   fix_missing_sources                                                        :   executed [OK]
   fix_update_protected_fields_parameters                                     :   skip (unecessary)
   fix_all_move_overload_files                                                :   skip (unecessary)
   remove_hostgroups_in_working_area                                          :   skip (unecessary)
   make_index_for_sla_module                                                  :   skip (unecessary)
   migrate_links_name_into_id                                                 :   skip (unecessary)
   fix_double_link                                                            :   skip (unecessary)
   fix_service_overrides_encryption                                           :   skip (unecessary)
   fix_enable_synchronizer_database_module                                    :   skip (unecessary)
   fix_escape_properties_for_xss                                              :   skip (unecessary)
   add_internal_option_to_retention_mongo_cfg                                 :   skip (unecessary)
   add_ssl_architecture_export                                                :   skip (unecessary)
   add_ssl_shinken_listener                                                   :   skip (unecessary)
   add_rules_path_discovery                                                   :   skip (unecessary)
   add_nmap_mac_prefixes_path_discovery                                       :   skip (unecessary)
   update_notes_multi_url_syntax                                              :   skip (unecessary)
   update_synchronizer_collector_linker_collection_for_cipher_transformation  :   skip (unecessary)
   remove_pidfile_comment_in_mongodb_config_files                             :   executed [OK]
   cleanup_monitoring_pack                                                    :   skip (unecessary)
   remove_presence_protection                                                 :   skip (unecessary)
   fix_new_spare_daemon_broker_option                                         :   skip (unecessary)
   change_work_area_info_for_multiple_users                                   :   skip (unecessary)
   rename_graphite_scheduler_checks_metrics_files                             :   skip (unecessary)
   replace_duplicate_widgets_uuids                                            :   skip (unecessary)
   add_sla_output_store_and_worker_options                                    :   skip (unecessary)
   add_retry_options_to_synchronizer_import                                   :   skip (unecessary)
   add_map_realm_layout_to_architecture_export_module                         :   skip (unecessary)
   clean_old_nagvis_shinken_tmp_files                                         :   skip (unecessary)
   deleted_service_override_useless                                           :   skip (unecessary)

Restoration done. You can restart your Shinken with /etc/init.d/shinken start

Erreurs lors de la restauration

Lorsqu'une erreur arrive pendant le restore, un message d'erreur indique qu'une erreur est survenue dans une section en particulier.

Un log d'erreur est alors créé dans le dossier du backup utilisé par le script.

La partie floutée du chemin de la capture d'écran correspond au dossier que l'on donne en paramètre au shinken-restore.