Chrony の読み方
Chrony (クローニー) です。
Chronyとは
NTPクライアントとNTPサーバーの実装のひとつ。
ntpdより効率良く正確な時刻同期を提供します。
Chrony を使用すると、以下のことが実現できます。
- システムクロックを、NTP サーバーと同期する
- システムクロックを、GPS レシーバーなどの基準クロックと同期する
- システムクロックを、手動で入力した時間と同期する
- ネットワーク内の他のコンピューターにタイムサービスを提供する
Chrony公式
chronyc tracking コマンドとは
chrony が自身の時刻同期先(NTPサーバなど)と同期が取れているかを確認できるコマンドのひとつ。
chronyc trackingコマンドは、システムのクロックパフォーマンスに関するパラメータを表示します。(manコマンドに記載あり)
chronyc sourcesコマンドが接続先の情報を表示するのに対し、chronyc trackingコマンドは自分自身の状態を表示します。
chronyc trackingコマンドの出力結果の見方
コマンドの実行例は以下の通りです。
$ chronyc tracking
Reference ID : CB00710F (foo.example.net)
Stratum : 3
Ref time (UTC) : Fri Jan 27 09:49:17 2017
System time : 0.000006523 seconds slow of NTP time
Last offset : -0.000006747 seconds
RMS offset : 0.000035822 seconds
Frequency : 3.225 ppm slow
Residual freq : 0.000 ppm
Skew : 0.129 ppm
Root delay : 0.013639022 seconds
Root dispersion : 0.001100737 seconds
Update interval : 64.2 seconds
Leap status : Normal
Reference ID
コンピューターが現在同期しているサーバーの参照 ID と参照名(または IP アドレス)を表示します。
参照 ID は IPv4 アドレスとの混同を避けるため 16 進数の数値となっています。
Stratum(ストラタム)
基準クロックのあるコンピューターから何ホップ離れているかを示します。
上記の例のコンピューターは stratum-1 コンピューターであるため、2 ホップ離れていることになります。 (つまり、a.b.c が stratum-2 で、stratum-1 から同期しています)。
解説 : Stratumとは
Ref time
参照ソースからの最後の測定が処理された時間 (UTC) です。
System time
chronyd は、通常の操作ではシステムクロックを更新しません。
タイムスケールにおけるジャンプは、いかなるものでも特定のアプリケーションプログラムに有害な結果をもたらすためです。
代わりに、システムクロックのエラーをわずかに早めたり遅くしたりして、エラーがなくなるまで修正し、修正が完了したら、システムクロックを通常のスピードに戻します。
その結果、(gettimeofday() システムコールを使用した他のプログラム、またはシェルの date コマンドが読み取る) システムクロックが、chronyd が予測する現在の実際の時間 (サーバーモードで稼働している場合はこれを NTP クライアントに報告) と異なる期間が発生します。
この行で報告される値は、これによる差異です。
Last offset
最後のクロック更新におけるローカルオフセットの予測です。
RMS offset
長期的な、オフセット値の平均です。
Frequency
chronyd が修正しない場合にシステムクロックが間違う変化量です。
これは、ppm (100 万分の 1) で表されます。
たとえば、1 ppm という値は、システムクロックにおける 1 秒が、実際の時間と比較すると 1.000001 秒進んでいることを意味します。
Residual freq
現在選択されている基準源の「残留周波数」を示しています。
基準源からの測定値が、示すべき周波数と、実際に使用されている周波数との違いを反映しています。
これが常にゼロにならない理由は、補正する手順が周波数に適用されているためです。
基準源から測定を取得し、新たな剰余周波数が計算されるたびに、この剰余の推定精度が、既存の周波数の推定精度 (skew を参照) と比較されます。
新たな周波数の加重平均は、その精度によって異なる加重で計算されます。
基準源からの測定に一貫した傾向がある場合、剰余は時間をかけてゼロになります。
Skew
周波数の予測されるエラー範囲です。
Root delay
コンピューターが最終的に同期する stratum-1 コンピューターの、ネットワークパスの遅延の合計数です。
Root delay の値はナノ秒の分解能で出力されます。
値は、極端な状況では負数になります。(コンピューター同士が互いの周波数を追跡せず、各コンピューターのターンアラウンド時間に比較してネットワークの遅延が非常に短い、対称的なピア配置で、これが発生する場合があります。)
Root dispersion
コンピューターが最後に同期する stratum-1 コンピューターに戻るすべてのコンピューターを介して累積された合計分散です。
分散は、システムクロックの分解能や統計的測定の変動等に起因します。Root の分散値は、ナノ秒の分解能で出力されます。
Leap status
Leap のステータスで、Normal、Insert second、Delete second、または Not synchronized のいずれかになります。(Leapは「飛躍」の意)
余談ですが、うるう秒挿入まで24時間を切ってからLeap statusを確認するとステータスが「Insert second」になるそうです。(未検証)
また、CentOS8では、うるう秒をデフォルトで修正してくれるようです。
参考:
7.1.2.1.1. chrony が、うるう秒をデフォルトで修正
この記事のソース
この記事はこちらのマニュアルを参考に作成しています。
Red Hat 7
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-configuring_ntp_using_the_chrony_suite
また、man コマンドの説明も参考にしています。
man chronyc
オフセットとは
基準となる位置からの差を表す値のこと。
今回はNTPサーバーを基準としたローカルクロックとの差のことを言う。
Stratum (ストラタム)とは
NTPでは、階層構造を用いて時刻源の構成を表現しています。
階層構造の各層をstratumと呼び、stratumは0を最上位として15まで階層があります。
原子時計、GPS等の非常に正確な時刻源を「reference clock」と呼び、 階層構造の最上位であるstratum 0としています。
このstratum 0に接続されたNTPサーバをstratum 1、 さらにstratum 1を参照するNTPサーバをstratum 2と、 reference clockから経由するNTPサーバの数が増加するにつれて、 stratumの数字が増えていきます。
つまり、NTPサーバは他のNTPサーバを時刻源として参照し、 相手の持つstratumの数字を一つ増やし、 自身がさらに他のクライアントに対して時刻情報を提供することになります。
こうした階層構造を利用することで、負荷分散を図るとともに、 stratumの数値によってどのくらい信頼できる時刻源であるかが判断できるようになっています。
また、1台のサーバだけではそのサーバが正確な時刻を保持しているかどうか不明なため、 通常NTPサーバは上位stratumのNTPサーバを複数台参照することで、 時刻の正確さを高めることが行われています。