Shinken Enterprise est un système distribué. Ses démons vont se retrouver sur différents serveurs virtuels ou physiques. Quand l'infrastructure à superviser va grossir ou être géographiquement vaste, il est impératif que TOUS les serveurs de supervisions soient synchronisés en terme de temps.
En effet, si une vérification est faite sur un serveur distant dont l'horloge dérive, puis utilisée par un autre démon sur un autre serveur qui lui est bien à l'heure, l'analyse va être totalement faussée. En effet, le résultat sera présenté soit dans le passé, soit dans le futur, mais dans tous les cas les données seront totalement inexactes. Ceci va causer de grave problèmes de cohérence de données, qui ne seront pas récupérables.
Il est important de noter que l'utilisation d'un fuseau horaire local par serveur est totalement acceptable et normale. C'est bien le temps système ( unix timestamp ) qui est important, pas sa représentation locale pour les humains ( qui prend donc ce timestamp unix et lui applique des calculs liés au fuseau horaire local pour l'affichage ). |
Le plus simple pour vérifier que les serveurs sont à l'heure est d'utiliser les checks NTP des packs linux et chrony livrés avec Shinken Enterprise. Ces checks remonteront tout problème de synchronisation, ou si les démons ntp ou chrony sont arrêtés.
Suivant le système d'exploitation, les démons de synchronisation de temps usuels sont :
Shinken recommande l'utilisation de chrony.
Pour faire une vérification manuelle, la commande suivante permet de récupérer le timestamp unix actuel du système :
$ date '+%s' 1667379864 |
Cette commande doit retourner la même valeur sur tous les serveurs où elle est exécutée en simultané, indépendamment du fuseau horaire ( en effet, le timestamp unix est indépendant du fuseau horaire ).
Il est important de noter que la synchronisation se fait via des serveurs de temps de référence ( soit des serveurs disponibles publiquement sur internet, soit des serveurs disponibles dans l'infrastructure interne ). Il est vivement conseillé d'utiliser plusieurs serveurs de référence, pour éviter que la dérive d'un seul référant ne dérègle tous les serveurs.
Dans le cas du démon ntpd, il faut utiliser la commande "ntpdate" pour forcer une synchronisation "brutale" de l'horloge du système.
L'utilisation de cette commande requiert l'arrêt du service ntpd au préalable.
systemctl stop ntpd systemctl start ntpdate systemctl start ntpd date '+%s' |
Dans le cas du démon chronyd, il faut utiliser la commande "makestep" de l'utilitaire chronyc pour forcer une synchronisation de l'horloge du système.
systemctl start chronyd chronyc makestep date '+%s' |
Pour forcer une synchronisation de l'horloge du système au démarrage du démon openntpd, ajouter -s dans les options de démarrage du démon dans le fichier de configuration /etc/default/openntpd
# /etc/default/openntpd # Append '-s' to set the system time when starting in case the offset # between the local clock and the servers is more than 180 seconds. # For other options, see man ntpd(8). DAEMON_OPTS="-f /etc/openntpd/ntpd.conf -s" |
Puis redémarrer le démon
systemctl restart openntpd date '+%s' |