diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d3088d22..470bc16d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - [docker_log](/plugins/inputs/docker_log) - Contributed by @prashanthjbabu - [fireboard](/plugins/inputs/fireboard) - Contributed by @ronnocol +- [openntpd](/plugins/inputs/openntpd) - Contributed by @aromeyer - [uwsgi](/plugins/inputs/uswgi) - Contributed by @blaggacao #### New Parsers diff --git a/plugins/inputs/openntpd/README.md b/plugins/inputs/openntpd/README.md index d1bca049f..877c3a460 100644 --- a/plugins/inputs/openntpd/README.md +++ b/plugins/inputs/openntpd/README.md @@ -1,7 +1,8 @@ # OpenNTPD Input Plugin -Get standard NTP query metrics from OpenNTPD ([OpenNTPD - a FREE, easy to use -implementation of the Network Time Protocol](http://www.openntpd.org/)). +Get standard NTP query metrics from [OpenNTPD][] using the ntpctl command. + +[OpenNTPD]: http://www.openntpd.org/ Below is the documentation of the various headers returned from the NTP query command when running `ntpctl -s peers`. @@ -19,40 +20,36 @@ the remote peer or server (RMS, milliseconds); - jitter – Mean deviation (jitter) in the time reported for that remote peer or server (RMS of difference of multiple time samples, milliseconds); -### Configuration: +### Configuration ```toml -# Get standard NTP query metrics, requires ntpctls executable -# provided by openntpd packages [[inputs.openntpd]] - ## If running as a restricted user you can prepend sudo for additional access: - #use_sudo = false + ## Run ntpctl binary with sudo. + # use_sudo = false - ## The default location of the ntpctl binary can be overridden with: - binary = "/usr/sbin/ntpctl" + ## Location of the ntpctl binary. + # binary = "/usr/sbin/ntpctl" - ## The default timeout of 1000ms can be overriden with (in milliseconds): - #timeout = 1000 + ## Maximum time the ntpctl binary is allowed to run. + # timeout = "5ms" ``` -### Measurements & Fields: +### Metrics - ntpctl - - delay (float, milliseconds) - - jitter (float, milliseconds) - - offset (float, milliseconds) - - poll (int, seconds) - - next (int,,seconds) - - wt (int) - - tl (int) + - tags: + - remote + - stratum + - fields: + - delay (float, milliseconds) + - jitter (float, milliseconds) + - offset (float, milliseconds) + - poll (int, seconds) + - next (int, seconds) + - wt (int) + - tl (int) -### Tags: - -- All measurements have the following tags: - - remote - - stratum - -### Permissions: +### Permissions It's important to note that this plugin references ntpctl, which may require additional permissions to execute successfully. @@ -80,17 +77,17 @@ If you use this method, you will need the following in your telegraf config: You will also need to update your sudoers file: ```bash $ visudo -# Add the following line: -telegraf ALL=(ALL) NOPASSWD: /usr/sbin/ntpctl +# Add the following lines: +Cmnd_Alias NTPCTL = /usr/sbin/ntpctl +telegraf ALL=(ALL) NOPASSWD: NTPCTL +Defaults!NTPCTL !logfile, !syslog, !pam_session ``` Please use the solution you see as most appropriate. -### Example Output: +### Example Output ``` -$ telegraf --config ~/ws/telegraf.conf --input-filter openntpd --test -* Plugin: openntpd, Collection 1 -> openntpd,remote=194.57.169.1,stratum=2,host=localhost tl=10i,poll=1007i, +openntpd,remote=194.57.169.1,stratum=2,host=localhost tl=10i,poll=1007i, offset=2.295,jitter=3.896,delay=53.766,next=266i,wt=1i 1514454299000000000 ``` diff --git a/plugins/inputs/openntpd/openntpd.go b/plugins/inputs/openntpd/openntpd.go index ed742ee00..e7723b480 100644 --- a/plugins/inputs/openntpd/openntpd.go +++ b/plugins/inputs/openntpd/openntpd.go @@ -53,7 +53,7 @@ type Openntpd struct { } var defaultBinary = "/usr/sbin/ntpctl" -var defaultTimeout = internal.Duration{Duration: time.Second} +var defaultTimeout = internal.Duration{Duration: 5 * time.Second} func (n *Openntpd) Description() string { return "Get standard NTP query metrics from OpenNTPD." @@ -61,14 +61,14 @@ func (n *Openntpd) Description() string { func (n *Openntpd) SampleConfig() string { return ` - ## If running as a restricted user you can prepend sudo for additional access: - #use_sudo = false + ## Run ntpctl binary with sudo. + # use_sudo = false - ## The default location of the ntpctl binary can be overridden with: - binary = "/usr/sbin/ntpctl" + ## Location of the ntpctl binary. + # binary = "/usr/sbin/ntpctl" - ## The default timeout of 1000ms can be overriden with (in milliseconds): - timeout = 1000 + ## Maximum time the ntpctl binary is allowed to run. + # timeout = "5ms" ` } @@ -135,12 +135,12 @@ func (n *Openntpd) Gather(acc telegraf.Accumulator) error { // if there is an ntpctl state prefix, remove it and make it it's own tag if strings.ContainsAny(string(fields[0]), "*") { tags["state_prefix"] = string(fields[0]) - fields = append(fields[:0], fields[1:]...) + fields = fields[1:] } // Get tags from output for key, index := range tagI { - if len(fields) < index { + if index >= len(fields) { continue } tags[key] = fields[index]