ntpq

Мониторинг сервиса NTP и определение его производительности

Синтаксис:

ntpq [-46dinp] [-c команда] [хост] [...]

Опции:

-4
Принудительно выполнить DNS-преобразование имен хостов в пространство имен IP4.
-6
Принудительно выполнить DNS-преобразование имен хостов в пространство имен IP6.
-c команда
Выполнить данную команду на указанных хостах. Можно указать несколько опций -c.
-d
Включить режим отладки.
-i
Принудительно запустить ntpq в интерактивном режиме. Приглашения будут выводиться в стандартный поток вывода, а команды будут считываться из стандартного потока ввода.
-n
Вместо преобразования в канонические имена хоста вывести все адреса хостов в четырехкомпонентном формате с точками.
-p
Вывести список известных серверу партнеров, а также сводную информацию об их состоянии. Эта опция аналогична интерактивной команде peers.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Описание:

Утилита ntpq осуществляет мониторинг сервиса ntpd и определяет его производительность. Эта утилита использует стандартные форматы управляющих сообщений NTP режима 6, определенные в приложении B спецификации NTPv3 RFC 1305. Эти же форматы используются в спецификации NTPv4, определяющей большее число переменных. Сведения о форматах приведены далее.

Эту утилиту можно запустить в интерактивном или командном режиме. В командном режиме управление осуществляется с помощью аргументов командной строки. При составлении запросов на чтение или запись можно использовать опции вывода необработанных данных и структурированных данных. Кроме того, для получения и вывода списка партнеров в обычном формате на сервер можно отправить несколько запросов.

При запуске утилиты ntpq путем добавления в командную строку одного или нескольких запросов каждый запрос направляется на серверы NTP, работающие на каждом из указанных хостов. Если опция запроса не указана, то утилита ntpq предпринимает попытку считать команды из стандартного потока ввода и выполнить их на сервере NTP, запущенном на первом хосте, в соответствии с командной строкой. Если хост не указан, по умолчанию используется localhost. Если стандартный поток ввода соответствует терминалу, утилита ntpq выводит приглашение на ввод команд.

Для взаимодействия с сервером NTP утилита ntpq использует пакеты NTP режима 6 и, следовательно, может использоваться для отправки запроса на любой совместимый сервер в сети с поддержкой этого режима. Однако эта процедура ненадежна, особенно в случае больших расстояний в топологии сети. Утилита ntpq предпринимает только одну попытку повторной передачи запроса, и, если ответ с удаленного хоста не поступает в пределах допустимого таймаута, завершает работу по таймауту.


Note: Поведение NTP аналогично поведению UDP (User Datagram Protocol; протокол пользовательских дейтаграмм).

В контекстах, в которых ожидается имя хоста, спецификатор -4, предшествующий имени хоста, инициирует DNS- преобразование в пространство имен IPv4, а спецификатор -6 инициирует DNS-преобразование в пространство имен IPv6.

Если введена другая опция командной строки (не -i или -n), то определенные запросы немедленно отправляются указанному хосту (хостам). В противном случае утилита ntpq считывает интерактивные команды форматирования из стандартного потока ввода.

Внутренние команды

Интерактивные команды форматирования содержат ключевое слово, после которого следует несколько аргументов или ни одного аргумента. Для определения команды необходимо ввести соответствующее число символов. Как правило, вывод команды направляется в стандартный поток вывода, но вывод также можно направить в файл путем добавления в командную строку символа "<" и имени файла. Некоторые интерактивные команды форматирования выполняются исключительно с внутри утилиты ntpq:

? [ключевое_слово_команды]
helpl [ключевое_слово_команды]
Вывести список всех ключевых слов команд для утилиты ntpq. Если указано ключевое слово команды, то выводится информация о назначении и использовании команды.
addvars имя_переменной [ = значение] [...]
rmvars имя_переменной [...]
clearvars
Добавить переменные (и их значения, если они введены) во внутренний список утилиты ntpq. Если добавляются несколько переменных, они должны быть разделены запятыми (без пробельных символов). С помощью команды rmvars можно удалять из списка определенные переменные. Команда clearlist удаляет из списка все переменные.
cooked
Применить "режим с обработкой" к выходным данным, получаемым от команд запроса, то есть переформатировать значения переменных для практического использования. Если утилита ntpq не может декодировать некоторые переменные, она отмечает их завершающим символом ?.
debug more | less | off
Включить/выключить отладку.
delay миллисекунды
Задать интервал времени. Этот интервал добавляется к меткам времени для запросов, требующих аутентификации.
host имя_хоста
Задать хост, которому должны отправляться запросы. Имя_хоста может быть определено именем хоста или цифровым адресом.
hostnames [yes | no]
При выборе yes вывести имена хостов в представлении информации. При выборе no вывести цифровой адрес. Значение по умолчанию – yes, если оно не изменено с помощью опции командной строки -n.
keyid идентификатор_ключа
Задать идентификатор ключа, используемый для аутентификации конфигурационных запросов. Этот идентификатор должен соответствовать идентификатору ключа, который был сконфигурирован на сервере.
ntpversion 1 | 2 | 3 | 4
Установить номер версии NTP, объявляемый утилитой ntpq в пакетах. Значение по умолчанию – 3. В NTP версии 1 отсутствуют управляющие сообщения режима 6 (соответствующие режимы также отсутствуют).
passwd
Вывести приглашение на ввод пароля (пароль не выводится на экран), который используется для аутентификации конфигурационных запросов. Пароль должен соответствовать ключу, настроенному с этой целью для сервера NTP.
quit
Завершить работу утилиты ntpq.
raw
Вывести все выходные данные команд запроса в том же виде, в котором они были получены от удаленного сервера. Единственное применяемое действие форматирования/интерпретации – это преобразование данных, не являющихся кодами ASCII, в печатаемые (но не всегда понятные) символы.
timeout миллисекунды
Задать период таймаута для отклика сервера на запросы. Значение по умолчанию – около 5000 миллисекунд. Поскольку утилита ntpq только один раз повторно направляет каждый запрос по истечении таймаута, общее время ожидания для таймаута в два раза превышает указанное значение таймаута.

Команды управляющих сообщений

16-разрядный (целочисленный) идентификатор ассоциации назначается серверу NTP. Этот идентификатор ассоциации всегда входит в состав отправляемых управляющих сообщений NTP для идентификации партнеров (peers). Идентификатор ассоциации 0 имеет особое смысловое значение: он указывает, что переменные являются системными переменными, имена которых получены из отдельного пространства имен.

Команды управляющих сообщений создают одно или несколько сообщений NTP режима 6 (эти сообщения отправляются на сервер); возвращаемые данные всегда выводятся в определенном формате. При выполнении большинства команд отправляется только одно сообщение и ожидается получение только одного ответа. Существующие в настоящее время исключения: команда peers отправляет запрограммированную последовательность сообщений для получения требуемых данных; команды mreadlist и mreadvar выполняют итерации в определенном диапазоне ассоциаций.

associations
Получить и вывести список идентификаторов ассоциаций и информацию о состоянии специфицированных партнеров для запрашиваемых серверов NTP. Список разбивается на столбцы. В первом столбце выводится индекс (внутренняя нумерация ассоциаций начинается с 1), во втором столбце – фактический возвращаемый сервером идентификатор ассоциации, в третьем столбце – слово состояния партнеров (peer). В следующих столбцах содержатся декодированные данные из слова состояния.

Данные, возвращаемые командой associations, кэшируются в утилите ntpq. Индексы удобно использовать, когда серверы имеют идентификаторы ассоциаций, сложные для ввода вручную. При вводе последующей команды, в которой требуется указать идентификатор ассоциации как аргумент, в качестве альтернативы можно использовать форму и индекс.
clockvar [идентификатор_ассоциации] [имя_переменной [ = значение [...]] [...]
cv [идентификатор_ассоциации] [имя_переменной [ = значение [...] ][...]
Запросить отправку списка серверных переменных тактового генератора. На этот запрос положительно отвечают серверы, имеющие внешние механизмы синхронизации (например, радиочасы). Если идентификатор ассоциации не введен или равен нулю, ответ на запрос переменных системного тактового генератора выдают все серверы, использующие тактовый генератор. Если сервер рассматривает тактовые генераторы как псевдопартнеры и к серверу подключено несколько тактовых генераторов, то использование соответствующего идентификатора ассоциации партнера приводит к выводу переменных, относящихся к определенному тактовому генератору. Если список переменных не указан, сервер возвращает информацию о переменных по умолчанию.
lassociations
Получить и вывести список идентификаторов ассоциаций, а также информацию о состоянии партнеров (peers), состояние которых поддерживается сервером. Эта команда отличается от команды associations только применительно к серверам, сохраняющим состояние ассоциаций клиент-сервер вне спецификации. Эти ассоциации обычно не включаются в вывод команды associations, однако представлены в выводе команды lassociations.
lpassociations
Вывести информацию по всем ассоциациям (включая ассоциации клиент-сервер вне спецификации) из внутреннего кэшированного списка ассоциаций. Эта команда отличается от команды passociations.
lpeers
Вывести сводную информацию по всем ассоциациям, состояние которых поддерживается сервером. По этой команде выводится значительно более длинный список партнеров.
mreadlist идентификатор_ассоциации идентификатор_ассоциации
mrl идентификатор_ассоциации идентификатор_ассоциации
Действует так же, как команда readlist, за исключением того, что запрос выполняется для каждого (ненулевого) диапазона идентификаторов ассоциаций. Диапазон выбирается из списка ассоциаций, кэшированного при выполнении последней команды associations.
mreadvar идентификатор_ассоциации идентификатор_ассоциации [имя_переменной[ = значение[ ... ]
mrv идентификатор_ассоциации идентификатор_ассоциации [ имя_переменной [= значение[ ... ]
Действует так же, как команда readvar, за исключением того, что запрос выполняется для каждого (ненулевого) диапазона идентификаторов ассоциаций. Диапазон выбирается из списка ассоциаций, кэшированного при выполнении последней команды associations.
opeers
Старая форма команды peers с эталонным идентификатором, замененным локальным адресом интерфейса.
passociations
Вывести информацию об ассоциациях, относящуюся к партнерам в пределах спецификации (peers), из внутреннего кэшированного списка ассоциаций. Действует так же, как команда associations, за исключением того, что выводится внутренняя сохраненная информация (новый запрос не выполняется).
peers
Получить текущий список партнеров и сводную информацию о состоянии. В сводную информацию включаются адрес удаленного партнера, эталонный идентификатор (если он не известен, выводится 0.0.0.0), уровень удаленного партнера и тип партнера (локальный, с одноадресной/многоадресной/широковещательной передачей). Кроме того, указывается интервал опроса (в секундах), регистр (в восьмеричном формате), а также значения (в миллисекундах) текущей оцениваемой задержки, смещения и дисперсии для партнера. На левой границе каждой строки выводится символ, обозначающий состояние синхронизации ассоциации. Этот символ важен для диагностики. Кодировка и смысловое значение этого символа, называемого итоговым кодом, приведены далее на этой странице.
pstatus идентификатор_ассоциации
Отправить на сервер запрос чтения состояния данной ассоциации. Вывести имена и значения возвращаемых переменных партнера (peer). Следует отметить, что перед переменными отображается слово состояния из заголовка (в шестнадцатеричном формате).
readlist [идентификатор_ассоциации]
rl [идентификатор_ассоциации]
Запросить возврат переменных из внутреннего списка переменных на сервере. Если идентификатор ассоциации не указан или равен 0, переменные рассматриваются как системные переменные или переменные партнера. Если внутренний список переменных пуст, то запрос отправляется без данных, и при получении такого запроса удаленный сервер возвращает представление по умолчанию.
readvar идентификатор_ассоциации имя_переменной [=значение] [...]
rv идентификатор_ассоциации [имя_переменной [= значение ] [...]
Запросить возврат значений указанных переменных (путем отправки запроса на чтение переменных). Если идентификатор ассоциации не указан или равен 0, переменные рассматриваются как системные переменные или как переменные партнера, возвращаемые соответствующим партнером. Если список переменных не указан, то отправляется запрос без данных, и при получении такого запроса сервер возвращает представление по умолчанию. Кодировка и смысловое значение переменных, связанных с NTPv3, приведены в RFC 1305; кодировка и смысловое значение дополнительных переменных NTPv4 приведены далее на этой странице.
writevar идентификатор_ассоциации имя_переменной [=значение[ ...]
Записать указанные переменные. Действует так же, как команда запроса readvar.
writelist [идентификатор_ассоциации]
Записать внутренний список переменных. Действует так же, как команда запроса readlist.

Итоговые коды

Итоговым кодом называется символ, находящийся на левой границе строки в перечне партнеров (peers). Итоговый код отображает конечное состояние каждой ассоциации в процессе выбора тактового генератора. Ниже приведен список этих символов с указанием соответствующего статуса партнера (peer):

space reject
Отклонен как недоступный, синхронизирован с данным сервером (контур синхронизации) или расстояние синхронизации слишком большое.
x falsetick
Отклонен алгоритмом пересечения как ложный источник времени.
. excess
Отклонен как не входящий в первую десятку партнеров (peers), отобранных по расстоянию синхронизации, и соответственно не подходящий для дальнейшего рассмотрения.
- outlyer
Отклонен алгоритмом кластеризации как промах (резко отклоняющееся значение).
# candidat
Подходящий в качестве кандидата для комбинирующего алгоритма.
selected
Подходящий источник, который не входит в первую шестерку партнеров, отобранных по расстоянию синхронизации. Недолговечная (эфемерная) ассоциация может быть расформирована в целях экономии ресурсов.
* sys.peer
Партнер (peer) объявлен как системный партнер и предоставляет свои переменные для использования в системных переменных.
o pps.peer
Парнтер (peer) объявлен как системный партнер и предоставляет свои переменные для использования в системных переменных. Реальная синхронизация системы осуществляется по сигналу PPS (Pulse-Per-Second – импульс в секунду) косвенно, посредством драйвера системных часов PPS (формирователя тактовых импульсов), либо напрямую, посредством интерфейса ядра.

Системные переменные

Переменные status, leap, stratum, precision, rootdelay, rootdispersion, refid, reftime, poll, offset и frequency описаны в спецификации RFC 1305. Дополнительные системные переменные NTPv4:

version
Версия и время создания программного обеспечения.
processor
Строка идентификации процессора и ядра.
system
Версия и идентификатор версии операционной системы.
state
Состояние конечного автомата дисциплины часов. Значения описываются в обзоре архитектуры, приведенном на странице проекта NTP, на который можно перейти со страницы www.ntp.org.
peer
Внутренняя целочисленная переменная, идентифицирующая ассоциацию, которая в настоящее время определена как системный партнер.
jitter
Расчетная ошибка времени системного тактового генератора, вычисляемая как экспоненциальное среднее значение среднеквадратичных разностей времени.
stability
Расчетная стабильность частоты системного тактового генератора, вычисляемая как экспоненциальное среднее значение среднеквадратичных разностей частоты.

Если сервис NTPv4 скомпилирован с помощью программной библиотеки OpenSSL, отображаются дополнительные системные переменные.
flags
Биты текущего слова флагов и идентификатор алгоритма профиля сообщения (NID) в шестнадцатеричном формате. Старшие 16 бит четырехбайтового слова содержат NID из библиотеки OpenSSL, а младшие биты интерпретируются следующим образом:
0x01
включен режим Autokey
0x02
загружен файл дополнительных секунд NIST (Национального института стандартов и технологий)
0x10
схема идентификации PC
0x20
схема идентификации IFF
0x40
схема идентификации GQ
hostname
Имя хоста, идентичное возвращаемому функцией gethostname().
hostkey
Метка файла NTP для файла ключей хоста.
cert
Список сертификатов, сохраненных хостом. В каждой записи по порядку указаны предмет сертификата, эмитент сертификата, флаги и метка файла NTP. Биты интерпретируются следующим образом:
0x01
Сертификат подписан сервером.
0x02
Доверенный сертификат.
0x04
Частный сертификат.
0x08
Сертификат содержит ошибки и не является доверенным.
leapseconds
Метка файла NTP для файла дополнительных секунд NIST (Национального института стандартов и технологий).
refresh
Метка времени NTP, указывающая, когда были обновлены и подписаны открытые криптографические данные хоста.
signature
Имя схемы профиля/подписи хоста из библиотеки OpenSSL.
tai
Смещение TAI-UTC (в секундах), полученное из таблицы дополнительных секунд NIST (Национального института стандартов и технологий).

Переменные партнеров

Переменные status, srcadr, srcport, dstadr, dstport, leap, stratum, precision, rootdelay, rootdispersion, readh, hmode, pmode, hpoll, ppoll, offset, delay, dspersion и reftime описываются в спецификации RFC 1305. В этой спецификации также описываются метки времени org, rec и xmt. Дополнительные переменные партнера NTPv4:

flash
Флэш-код для последнего полученного пакета. Кодировка и смысловое значение этих кодов приведены ниже.
jitter
Расчетная ошибка времени тактового генератора партнера (peer), вычисляемая как экспоненциальное среднее значение среднеквадратичных разностей времени.
unreach
Значение счетчика, регистрирующего количество периодов опроса с момента получения последнего действительного пакета.

Если сервис NTPv4 скомпилирован с использованием программной библиотеки OpenSSL, отображаются дополнительные переменные партнера:

flags
Текущие флаговые биты. Это слово является словом состояния хоста сервера с дополнительными разрядами, используемыми конечным автоматом Autokey.
hostname
Имя хоста сервера.
initkey
Начальный ключ, используемый генератором списка ключей в протоколе Autokey.
initsequence
Начальный индекс, используемый генератором списка ключей в протоколе Autokey.
signature
Имя схемы профиля сообщения/подписи сервера из библиотеки OpenSSL.
timestamp
Метка времени NTP, указывающая, когда был сгенерирован и подписан последний список ключей Autokey.

Флэш-коды

Флэш-код (flash) используется для отладки. Этот код выводится в списке переменных партнера (peer) и представляет результаты оригинальных проверок работоспособности, определенных в спецификации NTP RFC 1305, а также дополнительных проверок, добавленных в NTPv4. Существуют 12 тестов (TEST1...TEST12), выполняемых в определенном порядке для получения максимального объема диагностической информации и, одновременно, для защиты от случайных или преднамеренных ошибок. При получении каждого пакета переменная flash сбрасывается в ноль. Если после выполнения очередного набора тестов обнаруживается, что установлен один или несколько битов, пакет отбрасывается. Эти тесты используются для выполнения следующих задач:

TEST1–TEST3
Проверка меток времени пакета, используемых для вычисления смещения и задержки. Если биты установлены, то пакет отбрасывается; в противном случае сохраняются переменные заголовка пакета.
TEST4 и TEST5
Используются для управления доступом и для криптографической аутентификации. Если биты установлены, пакет немедленно отбрасывается; изменения не вносятся.
TEST6–TEST8
Проверка работоспособности сервера. Если биты установлены, пакет отбрасывается; в противном случае вычисляются и сохраняются связанные с сервером смещение и задержка.
TEST9
Проверка работоспособности ассоциации. Если биты установлены, пакет отбрасывается. В противном случае сохраненные переменные передаются в алгоритмы фильтрации и отбора.
TEST10–TEST12
Проверка состояния аутентификации с использованием криптографии Autokey с открытым ключом. Если ассоциация была предварительно отмечена как доступная и при этом установлены биты, то пакет отбрасывается; в противном случае сохраняются метки времени отправки и получения (согласно требованиям протокола NTP) и выполняется дальнейшая обработка.

Для каждого теста определены следующие биты переменной flash:

0x001 TEST1
Дубликат пакета. Пакет получен при случайной повторной передаче (в лучшем случае) или злонамеренной ответной передаче (в худшем случае).
0x002 TEST2
Ложный пакет. Пакет не является ответом на ранее отправленное сообщение. Такой пакет может поступить, если произошел не замеченный другими устройствами перезапуск сервиса NTP.
0x004 TEST3
Несинхронизированный пакет. Обнаружено недействительное поле (или несколько полей) метки времени. Это происходит, как правило, при получении первого пакета от партнера.
0x008 TEST4
Доступ запрещен.
0x010 TEST5
Сбой криптографической аутентификации.
0x020TEST6
Сервер не синхронизирован. Предварительно установите часы сервера.
0x040 TEST7
Максимальное значение (15) уровня сервера. Вероятно, сервер не синхронизирован и следует установить его часы. \
0x080 TEST8
Корневая задержка или дисперсия превышает одну секунду (маловероятное событие, возможная причина – партнер не синхронизирован).
0x100 TEST9
Задержка или дисперсия партнера превышает одну секунду (маловероятное событие).
0x200 TEST10
Протокол Autokey обнаружил сбой аутентификации.
0x400 TEST11
Сервер или партнер не подтвержден протоколом Autokey.
0x800 TEST12
В алгоритмах с открытым ключом возникла ошибка протокола или конфигурации, либо обнаружено событие возможного вторжения.

Предостережения:

Команда peers не является атомарной командой, и при ее выполнении в некоторых случаях могут поступать ложные сообщения об ошибках о недействительных ассоциациях. Кроме того, возможно продолжительное ожидание в случае таймаута (время таймаута является фиксированной константой, заданной для наихудшего сценария). Программа не вычисляет значение таймаута при отправке запроса каждому конкретному хосту.

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино»

Тематические ссылки:

ntpd, ntpdate, ntpdc, ntptrace




Предыдущий раздел: Утилиты