• linux时间子系统及node-exporter对时钟的监控


    一、linux时钟原理
    在一台计算机上我们有两个时钟:一个称之为硬件时间时钟(RTC),还有一个称之为系统时钟(System Clock)。
    系统时钟就是操作系统的kernel所用来计算时间的时钟. 它从1970年1月1日00:00:00 UTC时间到目前为止秒数总和的值。在Linux下,系统时间在开机的时候会和RTC硬件时钟同步(synchronization),之后也就各自独立运行了。
    系统运行期间,则通过其他硬件时钟源进行tick计算(tsc、hpet、acpi_pm)。
    若安装了NTP,则通过ntp保证时间的准确性。
     
     
    RTC(real time clock)通过主板(CMOS)的电磁供电,精确到秒。用户可手工设置RTC时间。
     
    查看RTC硬件时钟(需要root权限)
    hwclock -r
     
    将系统时钟同步到硬件时钟(从/etc/adjtime获取值,同步到硬件时钟)
    hwclock -w
     
     
    将硬件时钟同步到系统时钟
    hwclock -s
     
    查看系统时钟
    date
     
    查看操作系统时间的时钟源(clocksource时钟源都是通过硬件实现的):
    可选源位于:
    /sys/devices/system/clocksource/clocksource0/available_clocksource
     
    可选项:
    tsc:通过CPU频率计数,可精确到纳秒级别。rating=300
    hpet:rating=250
    acpi_pm:rating=200
    rating指标数值越大,越精确
     
    当前时钟源位于:
    /sys/devices/system/clocksource/clocksource0/current_clocksource
     
    二、查看本地与ntp之间的状态
    ntpq -p
     
    remote                       refid          st   t   when  poll  reach   delay     offset     jitter
    ==================================================================
    *10.247.160.31   10.240.241.5   4   u   53       64    377     0.240    0.374    0.240
     
    字段 含义 备注
    remote前的符号 *表示选取的参考时间 *、+、- 和空白
    remote 响应这个请求的NTP服务器的名称  
    refid NTP服务器使用的上一级ntp服务器  
    st remote远程服务器的级别. 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端.所以服务器从高到低级别可以设定为1-16. 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的 层数,取值范围:0-15。16表示不可达
    t 未知  
    when 上一次成功请求之后到现在的秒数 单位:秒
    poll 本地机和远程服务器多少时间进行一次同步。 在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围,之后poll值会逐渐增大,同步的频率也就会相应减小 单位:秒
    reach 这是一个八进制值,用来测试能否和服务器连接.每成功连接一次它的值就会增加 成功访问ntp服务器次数,八进制
    delay 从本地机发送同步要求到ntp服务器的round trip time 一次访问耗时,rtt。单位:毫秒
    offset 主机通过NTP时钟同步与所同步时间源的时间偏移量,单位为毫秒(ms)。offset越接近于0,主机和ntp服务器的时间越接近 时间偏差,单位:毫秒
    jitter 这是一个用来做统计的值. 它统计了在特定个连续的连接数里offset的分布情况. 简单地说这个数值的绝对值越小,主机的时间就越精确 我理解为offst的平均值

    三、node-exporter对时间同步的监控

    node-exporter对时间同步监控有2个维度,一个是RTC时钟与系统时钟的同步监控;另外一个是NTP与系统时间的同步监控。官网有详细介绍:https://github.com/prometheus/node_exporter/blob/master/docs/TIME.md

    其中,node_timex_offset通过查看源码确认,是RTC与系统时间的差异

    https://github.com/prometheus/node_exporter/blob/master/collector/timex.go

        

    源码中,是通过调用unix的adjtimex函数来计算偏移量的。通过查询unix的adjtimex函数,即可知道是RTC与系统时间的偏移量。

    http://www.hechaku.com/Unix_Linux/adjtimex.html

    另外,在旧版本的Linux中,是存在adjtimex指令的。也能印证adjtimex函数是查看/调整RTC与系统时间的差异

    node-exporter也提供系统时间与NTP之间的差异,但需要开启ntp collector模块

    如果是docker(docker-compose)启动的话,加上--collector.ntp参数即可

    command: --path.rootfs /host --collector.systemd --collector.ntp --collector.textfile.directory /host/node

    参考文章:https://www.aboutyun.com/thread-11395-1-1.html

    以上为本人理解,如果错误,请指出

  • 相关阅读:
    form2js的使用(续BootstrapTable)
    input限定文件上传类型:Microsoft Office MIME types
    Zookeeper环境搭建
    Zookeeper一致性协议——ZAB
    Zookeeper简介
    IOC容器加载流程
    Spring Bean 生命周期
    Spring Framework 5 模块组成、体系结构、整体架构
    什么是 IoC?什么是 DI ? 他们之间有什么关系?
    【MySQL实战45讲】索引部分整理
  • 原文地址:https://www.cnblogs.com/danny-djy/p/14132436.html
Copyright © 2020-2023  润新知