知識マップ: Windowsの時刻同期(w32time)と業務システム ── 「ログのタイムスタンプが合わない」を仕組みから解決する
記事「Windowsの時刻同期(w32time)と業務システム ── 「ログのタイムスタンプが合わない」を仕組みから解決する」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
装置とPCのログでタイムスタンプがずれる原因は、Windowsの時刻同期サービスw32timeの既定動作にあります。ドメイン環境ではドメインコントローラーを経てフォレストルートのPDCエミュレーターへ至る時刻階層に従いKerberosの5分要件を満たす一方、ワークグループ機はSpecialPollIntervalの既定604,800秒という低頻度でtime.windows.comとしか同期せず、数十秒のずれが常態化します。w32timeは小さなずれをスルー、大きなずれをステップで補正するため、システム時計は前にも後ろにも跳びうるので、経過時間の測定はDateTime.UtcNowではなくStopwatchで行い、ログのタイムスタンプはUTCで記録し、装置との時刻オフセットは定期的に記録しておくことが実務上の設計原則になります。
flowchart LR
accTitle: Windowsの時刻同期(w32time)の知識マップ
accDescr: ドメインの時刻階層とワークグループの低頻度同期という既定動作の違い、w32tmによる診断とmanualpeerlistでの同期先指定、Hyper-Vの二重の時刻プロバイダー、Kerberosの時刻要件、StopwatchとDateTime.UtcNowを使い分けるアプリ側設計の関係を示す図
w32time["Windows Timeサービス(w32time)"]
w32tm["w32tmコマンド"]
ntp["NTP(Network Time Protocol)"]
domain_controller["ドメインコントローラー"]
pdc_emulator["PDCエミュレーター"]
workgroup["ワークグループ構成"]
special_poll_interval["SpecialPollIntervalレジストリ値"]
manualpeerlist_config["/manualpeerlistによる同期先の手動指定"]
group_policy["グループポリシー"]
kerberos["Kerberos"]
kerberos_time_sync["Kerberosの時刻同期要件"]
clock_discipline["クロック規律(スルー/ステップ補正)"]
datetime_utcnow["DateTime.UtcNowプロパティ(.NET)"]
elapsed_time_measurement["経過時間・タイムアウト判定"]
stopwatch_class["Stopwatchクラス(.NET)"]
hyper_v_time_sync["Hyper-V時刻同期統合サービス(VMICTimeSync)"]
ntp_stratum["階層(Stratum)"]
high_accuracy_time_boundary["高精度時刻のサポート境界"]
device_clock_offset_logging["装置とPCの時刻オフセット定期記録"]
log_timestamp_utc["ログタイムスタンプのUTC記録"]
elapsed_time_error["経過時間・タイムアウト判定の誤り"]
w32time -->|"利用する"| ntp
w32time -->|"で構成できる"| w32tm
w32time -->|"で確認できる"| w32tm
domain_controller -.->|"前提とする"| pdc_emulator
w32time -.->|"前提とする"| domain_controller
workgroup -->|"利用する"| w32time
w32time -.->|"利用する"| special_poll_interval
special_poll_interval -.->|"前提とする"| manualpeerlist_config
manualpeerlist_config -->|"で構成できる"| group_policy
w32time -.->|"利用する"| kerberos
kerberos -->|"前提とする"| kerberos_time_sync
w32time -->|"実装を担う"| clock_discipline
datetime_utcnow -->|"用いるのは非推奨"| elapsed_time_measurement
stopwatch_class -->|"推奨される対応"| elapsed_time_measurement
hyper_v_time_sync -.->|"両立しない"| w32time
w32time -->|"利用する"| ntp_stratum
high_accuracy_time_boundary -->|"前提とする"| ntp_stratum
device_clock_offset_logging -->|"利用する"| w32tm
log_timestamp_utc -->|"推奨される対応"| clock_discipline
manualpeerlist_config -->|"推奨される対応"| pdc_emulator
manualpeerlist_config -.->|"用いるのは非推奨"| domain_controller
clock_discipline -->|"原因になり得る"| elapsed_time_error
stopwatch_class -->|"防止する"| elapsed_time_error
概念間の関係(全23件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Windows Timeサービス(w32time)はNTP(Network Time Protocol)を利用します。
- Windows Timeサービス(w32time)はw32tmコマンドで構成できます。
- Windows Timeサービス(w32time)はw32tmコマンドで確認できます。
- ドメインコントローラーはPDCエミュレーターを前提とします。
- Windows Timeサービス(w32time)はドメインコントローラーを前提とします。
- ワークグループ構成はWindows Timeサービス(w32time)を利用します。
- Windows Timeサービス(w32time)はSpecialPollIntervalレジストリ値を利用します。
- SpecialPollIntervalレジストリ値は/manualpeerlistによる同期先の手動指定を前提とします。
- /manualpeerlistによる同期先の手動指定はグループポリシーで構成できます。
- Windows Timeサービス(w32time)はKerberosを利用します。
- KerberosはKerberosの時刻同期要件を前提とします。
- Windows Timeサービス(w32time)はクロック規律(スルー/ステップ補正)の実装を担います。
- DateTime.UtcNowプロパティ(.NET)を経過時間・タイムアウト判定に用いることは推奨されません。
- Stopwatchクラス(.NET)は経過時間・タイムアウト判定に対する本記事の推奨です。
- Hyper-V時刻同期統合サービス(VMICTimeSync)はWindows Timeサービス(w32time)と両立しません。
- Windows Timeサービス(w32time)は階層(Stratum)を利用します。
- 高精度時刻のサポート境界は階層(Stratum)を前提とします。
- 装置とPCの時刻オフセット定期記録はw32tmコマンドを利用します。
- ログタイムスタンプのUTC記録はクロック規律(スルー/ステップ補正)に対する本記事の推奨です。
- /manualpeerlistによる同期先の手動指定はPDCエミュレーターに対する本記事の推奨です。
- /manualpeerlistによる同期先の手動指定をドメインコントローラーに用いることは推奨されません。
- クロック規律(スルー/ステップ補正)は経過時間・タイムアウト判定の誤りの原因になることがあります。
- Stopwatchクラス(.NET)は経過時間・タイムアウト判定の誤りを防ぎます。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。