Skip to content

Commit eaf3fcf

Browse files
authored
Merge pull request #1 from SuperQ/more_tracking
Add more tracking metrics
2 parents ff3816c + 0c4280f commit eaf3fcf

1 file changed

Lines changed: 62 additions & 1 deletion

File tree

collector/tracking.go

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
package collector
1515

1616
import (
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

2628
var (
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"),
@@ -33,6 +38,46 @@ var (
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

3883
func (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

Comments
 (0)