Home > Windows にまつわる e.t.c.

NTP 同期状態ロギング


Windows Server を運用していると、時刻ズレが問題になることがあります。

監視システムで時刻ズレを監視しているケースはよく見かけますが、どのくらいずれているのかロギングする仕組みはあまり見かけないのでロギングする仕組みを PowerShell で作りました。

ロギングしていると、ズレ傾向も見えてきますし、何か問題が起きた時の調査の手掛かりにもなります。

 

設置方法

下記のいずれかの方法でスクリプトを入手して、Install.ps1 を管理権限実行します。

Windows Server 2016 と Windows Server 2012 R で動作確認しています。

 

リポジトリから Clone する

以下リポジトリで公開していますので、Sourcetree 等の Git Client で Clone してください。

git@github.com:MuraAtVwnet/NTP-Sync-Log.git

https://github.com/MuraAtVwnet/NTP-Sync-Log

 

スクリプトを直接ダウンロードする

Git Client を使わない場合は、以下コマンドでスクリプトを直接ダウンロードしてください。
(お手軽ですが、改行コードが LF になるので、メモ帳で見るのは辛い)

if(-not (Test-Path C:\NTP_Log)){md C:\NTP_Log}
Invoke-WebRequest https://raw.githubusercontent.com/MuraAtVwnet/NTP-Sync-Log/master/Install.ps1 -OutFile C:\NTP_Log\Install.ps1
Invoke-WebRequest https://raw.githubusercontent.com/MuraAtVwnet/NTP-Sync-Log/master/RemoveLog.ps1 -OutFile C:\NTP_Log\RemoveLog.ps1
Invoke-WebRequest https://raw.githubusercontent.com/MuraAtVwnet/NTP-Sync-Log/master/RemoveSchedule.ps1 -OutFile C:\NTP_Log\RemoveSchedule.ps1
Invoke-WebRequest https://raw.githubusercontent.com/MuraAtVwnet/NTP-Sync-Log/master/SyncNTP.ps1 -OutFile C:\NTP_Log\SyncNTP.ps1
Invoke-WebRequest https://raw.githubusercontent.com/MuraAtVwnet/NTP-Sync-Log/master/ntp_diff_log.ps1 -OutFile C:\NTP_Log\ntp_diff_log.ps1
ii C:\NTP_Log

 

時刻同期設定

時刻同期設定が入ってない場合は、以下スクリプトを使って時刻同期設定をすることができます。(要管理権限)

SyncNTP.ps1

現在時刻を合わせて、時刻同期設定をします
ドメインメンバーは現在時刻だけ合わせます

引数に同期先 NTP(FQDN or IP アドレス) を指定します(複数指定可)
省略時は ntp.nict.jp に同期する設定をします

例)
SyncNTP.ps1 "NTPA", "NTPB", "NTPC"

 

ログフォーマット

記録日時 [TAB] ズレ [TAB] 参照 NTP Server [TAB] 基準 NTP Server [TAB] 最終同期時刻

C:\NTP_Log にログが出力されます(1か月保持)

 

停止/Uninstall方法

C:\NTP_Log\RemoveSchedule.ps1 を管理者権限で実行します

C:\NTP_Log を削除します

 

ドメインコントローラーの時刻同期

代表 NTP になっているドメインコントローラーの時刻同期先設定は SyncNTP.ps1 で設定出来ないので、以下コマンドで手動設定してください。

# 現在時刻を合わせる(手抜きで現在ローカル時刻を渡しているので、サマータイム切り替わり日は注意)
if((Get-Command Get-TimeZone -ErrorAction SilentlyContinue) -ne $null){
    $TimeZome = Get-TimeZone
    $TimeOffset = ($TimeZone.GetUtcOffset((Get-Date))).Hours
}else{
    $TimeOffset = 9
}
$UnixTime = ([datetime]"1970/01/01").AddHours($TimeOffset)
$NictUri = "https://ntp-a1.nict.go.jp/cgi-bin/json"
Set-Date $UnixTime.AddSeconds((Invoke-RestMethod -Uri https://ntp-a1.nict.go.jp/cgi-bin/json).st)

# NICT に時刻同期する
w32tm /config /syncfromflags:manual /manualpeerlist:ntp.nict.jp /update
w32tm /resync

 

参考情報

ドメインの時刻をNICTのNTPと同期させる
http://www.vwnet.jp/Windows/WS08R2/NTP/w32time.html

現在時刻を NICT の Web API / NTP で合わせる
http://www.vwnet.jp/Windows/PowerShell/AdjustTime.htm

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.