zabbix中有自帶對linux服務器時間進行監控的模板,用的key是system.localtime返回當前的系統時間,而配置tigger報警時是用的fuzzytime(N)方法,該方法是將返回的系統時間與監控服務器的時間進行對比,如果大於N,則報警。
存在一下3個問題:
1、監控服務器並不一定是ntp服務器:這種情況下也就說是系統時間是與非NTP服務器對比的時間。
2、取到被監控系統的時間,然后再返回給監控服務器,當監控項數量大,或監控出現延時隊列的時候。就會產生誤報。
3、對於windows server服務器沒有相應的模版。
正好業務上有一批搭載系統為windows server的服務器,而業務對時間要求比較高。
下面是我的解決辦法:
第一,利用下面的bat腳本設置windos時間同步服務器
@echo off
@REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Parameters /v NtpServer /t REG_SZ /d "10.13.255.1,0x9\0 10.13.255.2,0x9\0 0.cn.pool.ntp.org,0x9" /f
@echo off
@REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Parameters /v Type /t REG_SZ /d NTP /f
@echo off
echo ------------------------------------
@echo off
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpClient /v SpecialPollInterval /t REG_DWORD /d 60 /f
@echo off
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config /v MaxAllowPhaseOffset /t REG_DWORD /d 3600 /f
@echo off
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config /v MaxNegPhaseCorrection /t REG_DWORD /d 3600 /f
@echo off
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config /v MaxPosPhaseCorrection /t REG_DWORD /d 3600 /f
@echo off
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config /v PhaseCorrectRate /t REG_DWORD /d 7 /f
@echo off
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config /v MinPollInterval /t REG_DWORD /d 3 /f
@echo off
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config /v MaxPollInterval /t REG_DWORD /d 4 /f
@echo off
sc triggerinfo w32time start/networkon
@echo off
gpupdate /force
@echo off
w32tm /resync
@echo off
net stop w32time
net start w32time
說明:
"10.13.255.1,0x9\0 10.13.255.2,0x9\0 0.cn.pool.ntp.org,0x9"
以上地址只適用於本人的托管機房
第二編寫用於對比時間的python腳本
import time
import ntplib
import sys
import os
def main():
try:
ntp_client = ntplib.NTPClient()
response = ntp_client.request('s2g.time.edu.cn')
ntp_timeStamp = response.tx_time
ntp_date = time.strftime('%Y-%m-%d', time.localtime(ntp_timeStamp))
ntp_time = time.strftime('%X', time.localtime(ntp_timeStamp))
except:
print u'無法獲取到s2g.time.edu.cn上面的時間戳'
sys.exit()
'''獲取本地服務器時間戳'''
local_timeStamp = time.time()
'''獲取之間的差值'''
diff = abs(ntp_timeStamp - local_timeStamp)
print diff
if __name__ == '__main__':
main()
windows下可以使用pyinstaller打包成exe可執行文件
第三在zabbix_agentd.conf中添加自定義的key
UserParameter=custom.timediff.count,"D:\bat\get_time.exe"
重啟zabbix服務
第四添加監控和觸發器,本人設置當時間不一致超過3秒就出發報警。
這個,相信大家都會,就不多說了
第五觸發報警后,可在服務器上執行
同步時間
w32tm /resync
