From aa1adc7b11434e3033af197d67f5ecfffa24c2ec Mon Sep 17 00:00:00 2001 From: Andrew Rowson Date: Wed, 27 Jul 2022 14:41:59 +0100 Subject: [PATCH] Allow user to select port on NTP server to query (#2270) * Allow user to select port on NTP server to query Some people (me!) run NTP servers on non-privileged ports. The `github.com/beevik/ntp` package allows overriding the port, so this change just adds a flag `collector.ntp.server-port` (defaults to 123) and then passes that value through to the query via the `QueryOptions`. Signed-off-by: Andrew Rowson --- collector/ntp.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/collector/ntp.go b/collector/ntp.go index 25cb9452..d6ce4490 100644 --- a/collector/ntp.go +++ b/collector/ntp.go @@ -35,6 +35,7 @@ const ( var ( ntpServer = kingpin.Flag("collector.ntp.server", "NTP server to use for ntp collector").Default("127.0.0.1").String() + ntpServerPort = kingpin.Flag("collector.ntp.server-port", "UDP port number to connect to on NTP server").Default("123").Int() ntpProtocolVersion = kingpin.Flag("collector.ntp.protocol-version", "NTP protocol version").Default("4").Int() ntpServerIsLocal = kingpin.Flag("collector.ntp.server-is-local", "Certify that collector.ntp.server address is not a public ntp server").Default("false").Bool() ntpIPTTL = kingpin.Flag("collector.ntp.ip-ttl", "IP TTL to use while sending NTP query").Default("1").Int() @@ -74,6 +75,10 @@ func NewNtpCollector(logger log.Logger) (Collector, error) { return nil, fmt.Errorf("offset tolerance must be non-negative") } + if *ntpServerPort < 1 || *ntpServerPort > 65535 { + return nil, fmt.Errorf("invalid NTP port number %d; must be between 1 and 65535 inclusive", *ntpServerPort) + } + return &ntpCollector{ stratum: typedDesc{prometheus.NewDesc( prometheus.BuildFQName(namespace, ntpSubsystem, "stratum"), @@ -124,6 +129,7 @@ func (c *ntpCollector) Update(ch chan<- prometheus.Metric) error { Version: *ntpProtocolVersion, TTL: *ntpIPTTL, Timeout: time.Second, // default `ntpdate` timeout + Port: *ntpServerPort, }) if err != nil { return fmt.Errorf("couldn't get SNTP reply: %w", err)