Add option to report input timestamp in prometheus output (#5292)

This commit is contained in:
Artem V. Navrotskiy
2019-01-17 21:51:18 +03:00
committed by Daniel Nelson
parent 452b13a4e3
commit 3380fdf69d
4 changed files with 22 additions and 6 deletions

View File

@@ -35,4 +35,7 @@ This plugin starts a [Prometheus](https://prometheus.io/) Client, it exposes all
## If set, enable TLS with the given certificate.
# tls_cert = "/etc/ssl/telegraf.crt"
# tls_key = "/etc/ssl/telegraf.key"
## Export metric collection time.
# export_timestamp = false
```

View File

@@ -7,7 +7,6 @@ import (
"log"
"net"
"net/http"
"os"
"regexp"
"sort"
"strconv"
@@ -38,6 +37,8 @@ type Sample struct {
// Histograms and Summaries need a count and a sum
Count uint64
Sum float64
// Metric timestamp
Timestamp time.Time
// Expiration is the deadline that this Sample is valid until.
Expiration time.Time
}
@@ -64,6 +65,7 @@ type PrometheusClient struct {
Path string `toml:"path"`
CollectorsExclude []string `toml:"collectors_exclude"`
StringAsLabel bool `toml:"string_as_label"`
ExportTimestamp bool `toml:"export_timestamp"`
server *http.Server
@@ -103,6 +105,9 @@ var sampleConfig = `
## If set, enable TLS with the given certificate.
# tls_cert = "/etc/ssl/telegraf.crt"
# tls_key = "/etc/ssl/telegraf.key"
## Export metric collection time.
# export_timestamp = false
`
func (p *PrometheusClient) auth(h http.Handler) http.Handler {
@@ -159,7 +164,7 @@ func (p *PrometheusClient) Connect() error {
case "gocollector":
registry.Register(prometheus.NewGoCollector())
case "process":
registry.Register(prometheus.NewProcessCollector(os.Getpid(), ""))
registry.Register(prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{}))
default:
return fmt.Errorf("unrecognized collector %s", collector)
}
@@ -282,6 +287,9 @@ func (p *PrometheusClient) Collect(ch chan<- prometheus.Metric) {
name, labels, err.Error())
}
if p.ExportTimestamp {
metric = prometheus.NewMetricWithTimestamp(sample.Timestamp, metric)
}
ch <- metric
}
}
@@ -398,6 +406,7 @@ func (p *PrometheusClient) Write(metrics []telegraf.Metric) error {
SummaryValue: summaryvalue,
Count: count,
Sum: sum,
Timestamp: point.Time(),
Expiration: now.Add(p.ExpirationInterval.Duration),
}
mname = sanitize(point.Name())
@@ -439,6 +448,7 @@ func (p *PrometheusClient) Write(metrics []telegraf.Metric) error {
HistogramValue: histogramvalue,
Count: count,
Sum: sum,
Timestamp: point.Time(),
Expiration: now.Add(p.ExpirationInterval.Duration),
}
mname = sanitize(point.Name())
@@ -463,6 +473,7 @@ func (p *PrometheusClient) Write(metrics []telegraf.Metric) error {
sample := &Sample{
Labels: labels,
Value: value,
Timestamp: point.Time(),
Expiration: now.Add(p.ExpirationInterval.Duration),
}
@@ -500,6 +511,7 @@ func init() {
return &PrometheusClient{
ExpirationInterval: internal.Duration{Duration: time.Second * 60},
StringAsLabel: true,
ExportTimestamp: true,
fam: make(map[string]*MetricFamily),
now: time.Now,
}