这几天发现我的grafana面板有点不对劲,经常刷新一下之后某些字段出现nodata,但是我确定之前是可以用的,而且也没升级版本。
跟踪了一下json,发现是确实没有数据出来,time和value都是0,但是隔时间久一点刷新数据又都有,只有很快的点击刷新按钮,数据才会没有。
于是我检查了一下表达式,发现这个表达式是irate,但是irate的基础数据是有的,思考半晌后,我想是不是时间不同步,导致没有新的时间窗口的数据?因为exporter是在另外一台机器上。看了一下时间,结果发现确实差了大概10秒钟,ntpdate一下后grafana恢复了正常,但是这两台机器是在同一台esxi上,只是其中一台开启了ntp,另外一台只是在启动的时候ntpdate,并且母鸡也是开了ntp的。
那么时间为什么会差10秒钟呢,esxi的RTC时间是不准确的吗?看了一下文档TIMECOUNTERS(4),HPET(4),发现其实系统有好几个时钟源:

kern.timecounter.tsc_shift: 1
kern.timecounter.smp_tsc_adjust: 0
kern.timecounter.smp_tsc: 1
kern.timecounter.invariant_tsc: 1
kern.timecounter.fast_gettime: 1
kern.timecounter.tick: 1
kern.timecounter.choice: TSC(1000) ACPI-fast(900) i8254(0) HPET(950) dummy(-1000000)
kern.timecounter.hardware: TSC
kern.timecounter.alloweddeviation: 5
kern.timecounter.timehands_count: 2
kern.timecounter.stepwarnings: 0
kern.timecounter.tc.TSC.quality: 1000
kern.timecounter.tc.TSC.frequency: 2112000000
kern.timecounter.tc.TSC.counter: 2163619832
kern.timecounter.tc.TSC.mask: 4294967295
kern.timecounter.tc.ACPI-fast.quality: 900
kern.timecounter.tc.ACPI-fast.frequency: 3579545
kern.timecounter.tc.ACPI-fast.counter: 15875638
kern.timecounter.tc.ACPI-fast.mask: 16777215
kern.timecounter.tc.i8254.quality: 0
kern.timecounter.tc.i8254.frequency: 1193182
kern.timecounter.tc.i8254.counter: 50337
kern.timecounter.tc.i8254.mask: 65535
kern.timecounter.tc.HPET.quality: 950
kern.timecounter.tc.HPET.frequency: 14318180
kern.timecounter.tc.HPET.counter: 3934900351
kern.timecounter.tc.HPET.mask: 4294967295

我记得很久以前freebsd implemention那本书里写因为rtc的精度太低,所以系统的时间都用其他的counter来计算,启动之后就不管rtc时间了,反正这个都是可以调整的,esxi确实也有timer的bug:https://kb.vmware.com/s/article/85150

标签: none

评论已关闭