5 votes

Vérifiez si le serveur NTP interne envoie l'heure correcte.

Je possède deux serveurs NTP de strate 3 qui tournent et je voulais créer une vérification simple pour savoir si l'un des serveurs a dérivé en temps et alerter qu'il n'est pas correctement synchronisé avec les serveurs publics de strate 2.

Ma première idée était de récupérer l'heure de plusieurs serveurs de strate 2 et de comparer cette heure avec ce que mes serveurs NTP envoient. Puis d'alerter si la dérive est supérieure à X delta.

Existe-t-il une manière plus standard ou une meilleure méthode pour vérifier qu'un serveur NTP envoie l'heure correcte?

6voto

Paul Gear Points 3883

TL;DR:

  1. Configurez votre serveur NTP selon les meilleures pratiques actuelles.
  2. (Avertissement de promotion honteuse.) Utilisez mon vérificateur ntpmon si votre solution de surveillance utilise collectd, Nagios ou telegraf.

Version longue:

Configuration

La base la plus importante pour une bonne surveillance de NTP est une bonne configuration NTP. Pour mieux comprendre cela, lisez les meilleures pratiques actuelles de NTP (BCP 223/RFC 8633). Voici un résumé condensé de ses recommandations de configuration :

  1. Gardez votre logiciel NTP à jour
  2. Utilisez entre 4 et 10 sources
  3. Assurez-vous d'avoir une diversité d'horloges de référence représentées dans ces sources
  4. Ne permettez pas le contrôle à distance non authentifié (devrait être la valeur par défaut sur la plupart des distributions)
  5. Utilisez le pool de manière responsable (devrait également être la valeur par défaut sur la plupart des distributions)
  6. Ne mélangez pas les sources avec et sans étalement de décalage
  7. Ne pas utiliser le mode broadcast non authentifié
  8. Ne pas utiliser d'anycast ou d'équilibrage de charge lorsque vous servez l'heure

Où mesurer

Une fois que vous avez une bonne configuration locale, le principal à retenir est que votre vérification doit interroger le serveur NTP local pour ses métriques, plutôt que d'essayer de mesurer manuellement le décalage par rapport aux serveurs distants. Les principaux serveurs NTP (ntpd et chronyd) collectent déjà toutes les métriques dont vous avez besoin, donc les vérifications qui comparent l'horloge avec des serveurs distants ignorent beaucoup de la richesse intégrée de NTP.

Sélection des métriques

Donc, pour répondre à votre question, les métriques qui devraient vous intéresser le plus sont :

  • décalage du système : la meilleure estimation calculée du décalage de l'horloge locale par rapport au temps réel
  • dispersion de la racine : l'écart maximal calculé de l'horloge locale par rapport aux sources de strate 0

Surveillance

Il existe quelques solutions de surveillance pour NTP - en fonction de la surveillance que vous avez déjà mise en place, certaines pourraient mieux vous convenir que d'autres. J'ai écrit un aperçu de ceux-ci sur mon blog, voici un résumé :

  1. Nagios :
  • check_ntp_peer : vérification de base décente ; ne vérifie pas une assez grande variété de métriques ; un peu trop libéral dans les décalages autorisés
  • check_ntp_time : non recommandé ; ne vérifie que le décalage par rapport à un serveur NTP distant donné
  • check_ntpd : couverture de vérification raisonnable ; utilisez-le si vous préférez perl à python.
  • ntpmon's vérification Nagios
  1. collectd :
  • Plugin NTP : certaines des métriques qu'il collecte ne sont pas claires
  • ntpmon en mode collectd
  1. prometheus/influxdb
  • node exporter de prometheus : non recommandé ; ne vérifie que le décalage par rapport à un serveur NTP distant donné
  • plugin d'entrée ntpq de telegraf ntpq : une traduction directe de la sortie de ntpq en métriques telegraf ; cela est probablement trop détaillé si vous voulez simplement savoir, "Mon serveur NTP fonctionne-t-il correctement ?"
  • ntpmon en mode telegraf

Mises en garde

  1. Ce qui précède est un résumé de l'état en octobre 2016 lorsque j'ai réalisé ma revue d'alerte et de télémesure. Les choses ont peut-être évolué depuis.
  2. ntpmon est mon projet qui, je pense, surmonte les lacunes des vérifications qui étaient disponibles à l'époque. Il prend en charge à la fois ntpd et chronyd, ainsi que les systèmes d'alerte et de télémesure répertoriés ci-dessus.

1 votes

Merci pour l'information qui est une excellente ressource et qui répond parfaitement à ma question. Je vais jeter un œil à votre projet de surveillance, car c'est essentiellement ce que je cherchais à créer.

1 votes

@LF4 - de rien; si vous utilisez un autre outil de surveillance qui n'est pas encore pris en charge, je serai heureux de collaborer avec vous pour ajouter le support.

1 votes

Juste pour mettre à jour, le collecteur mentionné a été supprimé de l'exportateur de nœuds de Prometheus. Il a été remplacé par les collecteurs timex (adjtimex) + ntp. L'ancien collecteur offre un moyen décent d'obtenir l'erreur de temps estimée et maximale. Voir github.com/prometheus/node_exporter/blob/master/…

3voto

drookie Points 7850

Bien sûr, l'approche standard consiste à utiliser le client NTP intégré appelé ntpq. Cet utilitaire peut être utilisé pour afficher les serveurs connectés, leur accessibilité, la différence de temps et la gigue. Voici un exemple :

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*metasntp12.admi .MRS.            1 u  274 1024  377   64.445    1.086   0.450
+cecar.ddg.lth.s 130.149.17.8     2 u  811 1024  377   48.143   -0.810   0.175
 dir.mcc.ac.uk   85.199.214.100   2 u   7d 1024    0   76.708   -1.654   0.000

Ici, vous pouvez voir que trois serveurs sont configurés, deux fonctionnent correctement (377 d'accessibilité se traduit en binaire par 11 111 1111, où 1 signifie une réponse réussie et 0 signifie aucune réponse - donc 377 signifie 100% d'accessibilité), et le dernier est probablement mort pour une raison quelconque. Offset représente le décalage horaire en millisecondes et la gigue est la variabilité.

2 votes

Correction mineure : 377 est octal ; ce sont 3 bits par chiffre, ce qui correspond à 11 111 111 en binaire, signifiant une atteignabilité de 100 % (8 sur les 8 derniers sondages). (Ils auraient vraiment dû l'encoder en hexadécimal plutôt qu'en octal, mais cette décision a été prise il y a si longtemps qu'il est vraiment impossible de la changer maintenant.)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X