Este artículo demuestra el uso de la herramienta ntpq
para obtener información y estadísticas sobre el protocolo NTP.
El protocolo NTP (Network Time Protocol) es un protocolo de red de sincronización de relojes (tiempo) entre computadoras sobre redes de latencia variable. Es uno de los protocolos más antiguos de Internet aún en uso. El objetivo de este protocolo es mantener todoso los relojes de una red sincronizados. La versión actualmente utilizada es NTPv4, especificada en la RFC 5909.
Luego de haber instalado y configurado el demonio NTP, puede ser necesario verificar su funcionamiento y obtener estadísticas de sincronización.
Inicialmente es posible comprobar que el servicio está corriendo y existe el proceso correspondiente al demonio NTP:
root@hal9000:~# service ntp status [ ok ] NTP server is running.
root@hal9000:~# ps aux | grep "[n]tpd" ntp 1821 0.0 0.0 78728 3916 ? Ssl 07:10 0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 111:115
Además de examinar el log /var/log/syslog
, tal como muestra el artículo anteriormente mencionado:
root@hal9000:~# grep ntpd /var/log/syslog Dec 9 14:23:27 hal9000 ntpd[1821]: ntpd exiting on signal 15 (Terminated) Dec 9 14:23:27 hal9000 ntpd[1821]: 192.168.56.12 local addr 192.168.100.7 ->Dec 10 07:10:24 hal9000 ntpd[1816]: ntpd 4.2.8p12@1.3728-o (1): Starting Dec 10 07:10:24 hal9000 ntpd[1816]: Command line: /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 111:115 Dec 10 07:10:24 hal9000 ntpd[1821]: proto: precision = 0.187 usec (-22) Dec 10 07:10:24 hal9000 ntpd[1821]: Listen and drop on 0 v6wildcard [::]:123 Dec 10 07:10:24 hal9000 ntpd[1821]: Listen and drop on 1 v4wildcard 0.0.0.0:123 Dec 10 07:10:24 hal9000 ntpd[1821]: Listen normally on 2 lo 127.0.0.1:123 Dec 10 07:10:24 hal9000 ntpd[1821]: Listen normally on 3 eth0 192.168.100.7:123 Dec 10 07:10:24 hal9000 ntpd[1821]: Listen normally on 4 lo [::1]:123 Dec 10 07:10:24 hal9000 ntpd[1821]: Listen normally on 5 eth0 [fe80::2354:5edd:fd11:28a7%2]:123 Dec 10 07:10:24 hal9000 ntpd[1821]: Listening on routing socket on fd #22 for interface updates Dec 10 07:10:24 hal9000 ntpd[1821]: kernel reports TIME_ERROR: 0x41: Clock Unsynchronized Dec 10 07:10:24 hal9000 ntpd[1821]: kernel reports TIME_ERROR: 0x41: Clock Unsynchronized Dec 10 07:10:41 hal9000 ntpd[1821]: Soliciting pool server 192.168.56.12 Dec 10 07:10:46 hal9000 ntpd[1821]: new interface(s) found: waking up resolver
Sin embargo, para obtener métricas y estadísticas de sincronización del reloj es necesario recurrir a la herramienta ntpq
.
El utilitario ntpq
(provisto por el paquete ntp
) permite consultar servidores NTP a fin de monitorear las operaciones y rendimiento del protocolo, u obtener información respecto del estado actual de sincronización. Este programa permite trabajar de forma interactiva o controlado desde línea de comandos a través de opciones y parámetros.
Mediante la opción -p
de línea de comandos es posible obtener un listado de peers (servidores o sistemas remotos con los cuales se sincroniza la hora) y estado de sincronización:
root@hal9000:~# ntpq -np remote refid st t when poll reach delay offset jitter ============================================================================== ntp.linuxito.c .POOL. 16 p - 64 0 0.000 0.000 0.000 *192.168.56.12 145.238.203.14 2 u 92 128 377 248.581 0.190 3.032
La opción -n
además permite mostrar la salida en formato numérico (no traducir direcciones IP a nombres de host).
En esta salida, la columna "poll" indica el período de sincronización en segundos, mientras que "when" cuenta la cantidad de segundos transcurridos desde la última sincronización. La columna "reach" es un código que expresa el éxito o fallo en conectar con el peer (377 significa que todos los intentos fueron exitosos), "delay" expresa la latencia de la red en milisegundos, "offset" la diferencia entre los relojes (en milisegundos) y "jitter" la diferencia en milisegundos entre dos muestras.
La columna "refid" muestra la dirección IP del servidor de tiempo origen (estrato 0). Este es el servidor desde donde obtiene la hora el peer contra el que sincronizamos. Luego la columna "st" indica el estrato del peer, mientras que "t" indica el tipo ("local", "unicast", "broadcast", "multicast").
Para iniciar nptq
en modo interactivo, basta con lanzarlo sin opciones:
root@hal9000:~# ntpq ntpq>
En modo interactivo cuenta con un buen número de comandos internos. Mediante help
es posible obtener una lista de comandos internos:
ntpq> help ntpq commands: :config drefid mreadlist readvar addvars exit mreadvar reslist apeers help mrl rl associations host mrulist rmvars authenticate hostnames mrv rv authinfo ifstats ntpversion saveconfig cl iostats opeers showvars clearvars kerninfo passociations sysinfo clocklist keyid passwd sysstats clockvar keytype peers timeout config-from-file lassociations poll timerstats cooked lopeers pstats version cv lpassociations quit writelist debug lpeers raw writevar delay monstats readlist
Pasando como parámetro uno de los comandos internos a help
, se obtiene ayuda específica sobre dicho comando:
ntpq> help apeers function: obtain and print a list of the server's peers and their assocIDs [IP version] usage: apeers [ -4|-6 ]
El comando interno lpeers
muestra la misma lista de peers que mediante la opción de línea de comandos -p
:
ntpq> lpeers remote refid st t when poll reach delay offset jitter ============================================================================== ntp.linuxito.c .POOL. 16 p - 64 0 0.000 0.000 0.000 *192.168.56.12 145.238.203.14 2 u 92 128 377 248.581 0.190 3.032
iostats
muestra contadores de entrada/salida como paquetes enviados y recibidos:
ntpq> iostats time since reset: 6050 receive buffers: 10 free receive buffers: 9 used receive buffers: 0 low water refills: 1 dropped packets: 0 ignored packets: 0 received packets: 199 packets sent: 280 packet send failures: 0 input wakeups: 6356 useful input wakeups: 306
El comando sysinfo
muestra un resumen del estado actual del sistema:
ntpq> sysinfo associd=0 status=0618 leap_none, sync_ntp, 1 event, no_sys_peer, system peer: ntp.linuxito.com:123 system peer mode: client leap indicator: 00 stratum: 3 log2 precision: -22 root delay: 258.557 root dispersion: 37.928 reference ID: 192.168.56.12 reference time: e19a0f55.c303f0d5 Tue, Dec 10 2019 9:34:29.761 system jitter: 0.000000 clock jitter: 0.350 clock wander: 0.046 broadcast delay: -50.000 symm. auth. delay: 0.000
Para salir del modo interactivo, utilizar el subcomando quit
.