diff --git a/plugins/inputs/ntpq/ntpq.go b/plugins/inputs/ntpq/ntpq.go index 5e8ff6536..edcdac3d4 100644 --- a/plugins/inputs/ntpq/ntpq.go +++ b/plugins/inputs/ntpq/ntpq.go @@ -70,7 +70,17 @@ func (n *NTPQ) Gather(acc telegraf.Accumulator) error { lineCounter := 0 scanner := bufio.NewScanner(bytes.NewReader(out)) for scanner.Scan() { - fields := strings.Fields(scanner.Text()) + line := scanner.Text() + + tags := make(map[string]string) + // if there is an ntpq state prefix, remove it and make it it's own tag + // see https://github.com/influxdata/telegraf/issues/1161 + if strings.ContainsAny(string(line[0]), "*#o+x.-") { + tags["state_prefix"] = string(line[0]) + line = strings.TrimLeft(line, "*#o+x.-") + } + + fields := strings.Fields(line) if len(fields) < 2 { continue } @@ -97,7 +107,6 @@ func (n *NTPQ) Gather(acc telegraf.Accumulator) error { } } } else { - tags := make(map[string]string) mFields := make(map[string]interface{}) // Get tags from output diff --git a/plugins/inputs/ntpq/ntpq_test.go b/plugins/inputs/ntpq/ntpq_test.go index 228eddc62..7e83243c0 100644 --- a/plugins/inputs/ntpq/ntpq_test.go +++ b/plugins/inputs/ntpq/ntpq_test.go @@ -32,10 +32,11 @@ func TestSingleNTPQ(t *testing.T) { "jitter": float64(17.462), } tags := map[string]string{ - "remote": "*uschi5-ntp-002.", - "refid": "10.177.80.46", - "stratum": "2", - "type": "u", + "remote": "uschi5-ntp-002.", + "state_prefix": "*", + "refid": "10.177.80.46", + "stratum": "2", + "type": "u", } acc.AssertContainsTaggedFields(t, "ntpq", fields, tags) } @@ -60,10 +61,11 @@ func TestBadIntNTPQ(t *testing.T) { "jitter": float64(17.462), } tags := map[string]string{ - "remote": "*uschi5-ntp-002.", - "refid": "10.177.80.46", - "stratum": "2", - "type": "u", + "remote": "uschi5-ntp-002.", + "state_prefix": "*", + "refid": "10.177.80.46", + "stratum": "2", + "type": "u", } acc.AssertContainsTaggedFields(t, "ntpq", fields, tags) } @@ -88,10 +90,11 @@ func TestBadFloatNTPQ(t *testing.T) { "jitter": float64(17.462), } tags := map[string]string{ - "remote": "*uschi5-ntp-002.", - "refid": "10.177.80.46", - "stratum": "2", - "type": "u", + "remote": "uschi5-ntp-002.", + "state_prefix": "*", + "refid": "10.177.80.46", + "stratum": "2", + "type": "u", } acc.AssertContainsTaggedFields(t, "ntpq", fields, tags) } @@ -117,10 +120,11 @@ func TestDaysNTPQ(t *testing.T) { "jitter": float64(17.462), } tags := map[string]string{ - "remote": "*uschi5-ntp-002.", - "refid": "10.177.80.46", - "stratum": "2", - "type": "u", + "remote": "uschi5-ntp-002.", + "state_prefix": "*", + "refid": "10.177.80.46", + "stratum": "2", + "type": "u", } acc.AssertContainsTaggedFields(t, "ntpq", fields, tags) } @@ -146,10 +150,11 @@ func TestHoursNTPQ(t *testing.T) { "jitter": float64(17.462), } tags := map[string]string{ - "remote": "*uschi5-ntp-002.", - "refid": "10.177.80.46", - "stratum": "2", - "type": "u", + "remote": "uschi5-ntp-002.", + "state_prefix": "*", + "refid": "10.177.80.46", + "stratum": "2", + "type": "u", } acc.AssertContainsTaggedFields(t, "ntpq", fields, tags) } @@ -175,10 +180,11 @@ func TestMinutesNTPQ(t *testing.T) { "jitter": float64(17.462), } tags := map[string]string{ - "remote": "*uschi5-ntp-002.", - "refid": "10.177.80.46", - "stratum": "2", - "type": "u", + "remote": "uschi5-ntp-002.", + "state_prefix": "*", + "refid": "10.177.80.46", + "stratum": "2", + "type": "u", } acc.AssertContainsTaggedFields(t, "ntpq", fields, tags) } @@ -203,10 +209,11 @@ func TestBadWhenNTPQ(t *testing.T) { "jitter": float64(17.462), } tags := map[string]string{ - "remote": "*uschi5-ntp-002.", - "refid": "10.177.80.46", - "stratum": "2", - "type": "u", + "remote": "uschi5-ntp-002.", + "state_prefix": "*", + "refid": "10.177.80.46", + "stratum": "2", + "type": "u", } acc.AssertContainsTaggedFields(t, "ntpq", fields, tags) } @@ -278,9 +285,10 @@ func TestBadHeaderNTPQ(t *testing.T) { "jitter": float64(17.462), } tags := map[string]string{ - "remote": "*uschi5-ntp-002.", - "refid": "10.177.80.46", - "type": "u", + "remote": "uschi5-ntp-002.", + "state_prefix": "*", + "refid": "10.177.80.46", + "type": "u", } acc.AssertContainsTaggedFields(t, "ntpq", fields, tags) } @@ -306,9 +314,10 @@ func TestMissingDelayColumnNTPQ(t *testing.T) { "jitter": float64(17.462), } tags := map[string]string{ - "remote": "*uschi5-ntp-002.", - "refid": "10.177.80.46", - "type": "u", + "remote": "uschi5-ntp-002.", + "state_prefix": "*", + "refid": "10.177.80.46", + "type": "u", } acc.AssertContainsTaggedFields(t, "ntpq", fields, tags) }