1414package collector
1515
1616import (
17+ "net"
18+
1719 "github.com/facebook/time/ntp/chrony"
1820 "github.com/go-kit/log/level"
1921 "github.com/prometheus/client_golang/prometheus"
@@ -24,6 +26,9 @@ const (
2426)
2527
2628var (
29+ // The remote IP 127.127.1.1 means it is a "local" reference clock.
30+ trackingLocalIP = net .IPv4 (127 , 127 , 1 , 1 )
31+
2732 trackingLastOffset = typedDesc {
2833 prometheus .NewDesc (
2934 prometheus .BuildFQName (namespace , trackingSubsystem , "last_offset_seconds" ),
3338 ),
3439 prometheus .GaugeValue ,
3540 }
41+
42+ trackingRefTime = typedDesc {
43+ prometheus .NewDesc (
44+ prometheus .BuildFQName (namespace , trackingSubsystem , "reference_timestamp_seconds" ),
45+ "Chrony tracking Refreence timestamp" ,
46+ nil ,
47+ nil ,
48+ ),
49+ prometheus .GaugeValue ,
50+ }
51+
52+ trackingRemoteTracking = typedDesc {
53+ prometheus .NewDesc (
54+ prometheus .BuildFQName (namespace , trackingSubsystem , "remote_reference" ),
55+ "Chrony tracking is connected to a remote source" ,
56+ nil ,
57+ nil ,
58+ ),
59+ prometheus .GaugeValue ,
60+ }
61+
62+ trackingRMSOffset = typedDesc {
63+ prometheus .NewDesc (
64+ prometheus .BuildFQName (namespace , trackingSubsystem , "rms_offset_seconds" ),
65+ "Chrony tracking long-term average of the offset" ,
66+ nil ,
67+ nil ,
68+ ),
69+ prometheus .GaugeValue ,
70+ }
71+
72+ trackingStratum = typedDesc {
73+ prometheus .NewDesc (
74+ prometheus .BuildFQName (namespace , trackingSubsystem , "stratum" ),
75+ "Chrony tracking client stratum" ,
76+ nil ,
77+ nil ,
78+ ),
79+ prometheus .GaugeValue ,
80+ }
3681)
3782
3883func (e Exporter ) getTrackingMetrics (ch chan <- prometheus.Metric , client chrony.Client ) {
@@ -50,5 +95,21 @@ func (e Exporter) getTrackingMetrics(ch chan<- prometheus.Metric, client chrony.
5095 }
5196
5297 ch <- trackingLastOffset .mustNewConstMetric (tracking .LastOffset )
53- level .Debug (e .logger ).Log ("msg" , "Last Offset" , "offset" , tracking .LastOffset )
98+ level .Debug (e .logger ).Log ("msg" , "Tracking Last Offset" , "offset" , tracking .LastOffset )
99+
100+ ch <- trackingRefTime .mustNewConstMetric (float64 (tracking .RefTime .UnixNano ()) / 1e9 )
101+ level .Debug (e .logger ).Log ("msg" , "Tracking Ref Time" , "ref_time" , tracking .RefTime )
102+
103+ remoteTracking := 1.0
104+ if tracking .IPAddr .Equal (trackingLocalIP ) {
105+ remoteTracking = 0.0
106+ }
107+ ch <- trackingRemoteTracking .mustNewConstMetric (remoteTracking )
108+ level .Debug (e .logger ).Log ("msg" , "Tracking is remote" , "bool_value" , remoteTracking )
109+
110+ ch <- trackingRMSOffset .mustNewConstMetric (tracking .RMSOffset )
111+ level .Debug (e .logger ).Log ("msg" , "Tracking RMS Offset" , "rms_offset" , tracking .RMSOffset )
112+
113+ ch <- trackingStratum .mustNewConstMetric (float64 (tracking .Stratum ))
114+ level .Debug (e .logger ).Log ("msg" , "Tracking Stratum" , "stratum" , tracking .Stratum )
54115}
0 commit comments