diff --git a/CHANGELOG.md b/CHANGELOG.md index 720ed4b41507a..f295a2028af4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Features +- [#1694](https://github.com/influxdata/telegraf/pull/1694): Adding Gauge and Counter metric types. - [#1606](https://github.com/influxdata/telegraf/pull/1606): Remove carraige returns from exec plugin output on Windows - [#1674](https://github.com/influxdata/telegraf/issues/1674): elasticsearch input: configurable timeout. - [#1607](https://github.com/influxdata/telegraf/pull/1607): Massage metric names in Instrumental output plugin diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8aeb3a614f98d..ec7a353633eb2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,7 +32,7 @@ Assuming you can already build the project, run these in the telegraf directory: 1. `go get github.com/sparrc/gdm` 1. `gdm restore` -1. `gdm save` +1. `GOOS=linux gdm save` ## Input Plugins @@ -84,9 +84,9 @@ func (s *Simple) SampleConfig() string { func (s *Simple) Gather(acc telegraf.Accumulator) error { if s.Ok { - acc.Add("state", "pretty good", nil) + acc.AddFields("state", map[string]interface{}{"value": "pretty good"}, nil) } else { - acc.Add("state", "not great", nil) + acc.AddFields("state", map[string]interface{}{"value": "not great"}, nil) } return nil @@ -97,6 +97,13 @@ func init() { } ``` +## Adding Typed Metrics + +In addition the the `AddFields` function, the accumulator also supports an +`AddGauge` and `AddCounter` function. These functions are for adding _typed_ +metrics. Metric types are ignored for the InfluxDB output, but can be used +for other outputs, such as [prometheus](https://prometheus.io/docs/concepts/metric_types/). + ## Input Plugins Accepting Arbitrary Data Formats Some input plugins (such as diff --git a/accumulator.go b/accumulator.go index 02aee761d623a..bb6e4dc85091d 100644 --- a/accumulator.go +++ b/accumulator.go @@ -2,7 +2,13 @@ package telegraf import "time" +// Accumulator is an interface for "accumulating" metrics from input plugin(s). +// The metrics are sent down a channel shared between all input plugins and then +// flushed on the configured flush_interval. type Accumulator interface { + // AddFields adds a metric to the accumulator with the given measurement + // name, fields, and tags (and timestamp). If a timestamp is not provided, + // then the accumulator sets it to "now". // Create a point with a value, decorating it with tags // NOTE: tags is expected to be owned by the caller, don't mutate // it after passing to Add. @@ -11,15 +17,13 @@ type Accumulator interface { tags map[string]string, t ...time.Time) - // AddGauge is the same as AddFields, but will add the metric as a "Gauge" - // type + // AddGauge is the same as AddFields, but will add the metric as a "Gauge" type AddGauge(measurement string, fields map[string]interface{}, tags map[string]string, t ...time.Time) - // AddCounter is the same as AddFields, but will add the metric as a "Counter" - // type + // AddCounter is the same as AddFields, but will add the metric as a "Counter" type AddCounter(measurement string, fields map[string]interface{}, tags map[string]string,