Синхронизация времени (NTP)#
Корректное время является обязательным условием для надёжной работы TLS/сертификатов, аутентификации, журналирования, корреляции метрик и событий, а также для корректного поведения распределённых систем.
Предполагается использование NTP-клиента chrony или systemd-timesyncd.
Источник времени#
В инфраструктуре используются следующие варианты источника точного времени:
Внутренний источник в локальной сети:
доменный контроллер (предпочтительно при наличии домена и корректно настроенной иерархии времени);
выделенный сервер времени в локальной сети.
Внешние серверы времени:
публичные NTP-серверы (включая пул-сервисы), при наличии разрешения на доступ из сети.
Настройка синхронизации времени на Debian#
Установка chrony#
sudo apt-get update
sudo apt-get install -y chrony
Конфигурация chrony#
Отредактируйте файл: /etc/chrony/chrony.conf.
Рекомендуемый пример для внутреннего NTP:
server ntp1.local iburst
server ntp2.local iburst
makestep 1.0 3
rtcsync
Пример для внешнего пула:
pool pool.ntp.org iburst
makestep 1.0 3
rtcsync
Примечание
iburst- ускоряет первичную синхронизацию после старта сервиса.makestep 1.0 3- разрешает «шаговую» корректировку при большом расхождении в первые 3 попытки (актуально при первичном вводе узла в эксплуатацию).rtcsync- синхронизирует аппаратные часы (RTC) с системным временем.
различие директив server и pool в chrony.conf
Директива server указывает конкретный NTP-сервер (статический адрес или имя).
Пример:
server ntp1.local iburst
server ntp2.local iburst
Особенности:
фиксированное указание источника (контролируемо и предсказуемо);
оптимально для внутренней сети (DC/внутренний сервер времени);
при использовании имени, которое резолвится в один IP, фактически будет использоваться один адрес до изменения DNS/конфигурации;
отказоустойчивость достигается добавлением нескольких строк
server(минимум два источника).
Рекомендуемое применение: внутренние источники времени (предпочтительно) или выделенные внешние NTP-серверы организации.
Директива pool указывает пул серверов через доменное имя, которое разрешается в несколько адресов. Chrony
обновляет и переоценивает доступные сервера из пула и выбирает наиболее подходящие источники.
Пример:
pool pool.ntp.org iburst
Особенности:
доменное имя возвращает несколько серверов, обеспечивая резервирование;
список источников может обновляться автоматически;
повышается устойчивость к недоступности отдельных NTP-узлов;
в отличие от
server, конфигурация не привязывается к одному IP.
Рекомендуемое применение: сети с доступом в интернет, когда требуется максимальная устойчивость к недоступности отдельных источников.
Практическая рекомендация выбора:
При наличии внутреннего NTP (DC/сервер времени в локальной сети) следует применять
serverи указать как минимум два внутренних адреса.При синхронизации через интернет следует применять
pool(если это разрешено политикой безопасности).Допустима комбинированная схема (внутренние
serverкак приоритет + внешнийpoolкак резерв), если это допускается правилами доступа.
Запуск и проверка#
sudo systemctl enable --now chrony
chronyc sources -v
chronyc tracking
timedatectl status
Ожидаемые признаки корректной работы:
chronyc sources -vпоказывает доступные источники, один из них выбирается как основной;chronyc trackingпоказывает состояние синхронизации и текущее смещение (offset).
Конфигурация systemd-timesyncd#
Отредактируйте файл: /etc/systemd/timesyncd.conf
[Time]
NTP=ntp1.local ntp2.local
FallbackNTP=ntp3.local
Команды:
sudo systemctl enable --now systemd-timesyncd
timedatectl timesync-status
timedatectl status
Kubernetes-кластер#
Kubernetes-поды используют время хостовой ОС узла. Следовательно, синхронизация времени выполняется на каждом узле кластера (control plane и worker).
Обязательные действия на каждом узле:
настроить NTP-клиент (рекомендуется chrony);
обеспечить сетевую доступность UDP/123;
выполнить проверку:
chronyc tracking chronyc sources -v timedatectl status
HAProxy: требования в зависимости от размещения#
HAProxy внутри Kubernetes (Pod)#
Отдельная настройка NTP внутри pod не требуется. Требуется обеспечить корректное время на узлах, где запускается pod HAProxy (см. раздел про Kubernetes).
HAProxy как отдельный сервер/VM#
Настройка выполняется как для обычной машины: chrony-клиент на утверждённые источники времени (см. раздел про Debian/Astra).
PostgreSQL#
PostgreSQL не обращается к NTP напрямую и использует:
системное время ОС (влияет на
now(), TTL/таймеры, корректность работы TLS, временные метки логов и т.д.);параметры конфигурации Postgres, определяющие таймзону отображения и таймзону логов.
Внимание
Критичное требование: на сервере, где работает PostgreSQL, должна быть настроена синхронизация времени (chrony/systemd-timesyncd).
Ключевые параметры времени в postgresql.conf#
При необходимости отредактируйте конфигурационный файл: /etc/postgresql/<версия>/main/postgresql.conf
timezone
Задаёт таймзону по умолчанию для новых сессий (как Postgres интерпретирует/отображает время).
влияет на вывод временных значений (например,
SELECT now(););влияет на преобразования при работе с
timestamptz;не заменяет системную синхронизацию времени (NTP остаётся обязательным).
Пример (UTC):
timezone = 'UTC'
Пример (IANA):
timezone = 'Europe/Moscow'
log_timezone
Задаёт таймзону, используемую при записи временных меток в логах PostgreSQL.
Рекомендуется согласовать с принятым стандартом:
log_timezone = 'UTC'
ИЛИ:
log_timezone = 'Europe/Moscow'
После изменения postgresql.conf необходимо выполнить перезапуск:
sudo systemctl reload postgresql
Примечание
Значения «по умолчанию» гарантированно применяются для новых подключений. При наличии пулов соединений (pgBouncer, pool в приложении) может потребоваться пересоздание соединений на стороне приложения.
Проверка в PostgreSQL#
SELECT now() AS server_now;
SHOW
TimeZone;
SHOW
log_timezone;
Дополнительно рекомендуется сверить таймзону ОС:
timedatectl status
Grafana: требования к синхронизации времени#
Grafana использует системное время хоста/контейнера:
при размещении в Kubernetes - время узла;
при размещении на отдельной VM/сервере - время ОС.
Рекомендуется придерживаться единого стандарта таймзоны на уровне ОС (UTC либо утверждённая локальная таймзона) и на уровне источников данных.
Мониторинг синхронизации#
Для мониторинга времени рекомендуется поставить node_exporter на все хосты (узлы k8s, серверы HAProxy, PostgreSQL и прочие) и через внешнюю Grafana смотреть метрики timesync/timex.

Основные параметры мониторинга:
Drift/Offset - фактическое расхождение локальных часов с эталоном (чем ближе к нулю, тем лучше)
Maximum error - оценка верхней границы возможной ошибки времени (часто растёт «пилой» и сбрасывается при успешной синхронизации)
Sync status (1=ok) - признак, что система считает себя синхронизированной
PLL adjust / Frequency adjustment - параметры и величина плавной подстройки частоты локальных часов (норма - стабильные значения без резких скачков)
PPS - показатели аппаратного эталона (если PPS не используется - нули).
Стандарт таймзоны#
В Linux и в PostgreSQL рекомендуется указывать IANA-таймзону (формат Region/City), а не смещение по времени (
UTC+3). Это
снижает риск неоднозначной интерпретации и обеспечивает согласованность инструментов.
Настройка таймзоны на Debian/Astra#
Установка таймзоны (пример для UTC+03:00):
sudo timedatectl set-timezone Europe/Moscow
Проверка:
timedatectl status