From 2b3a112b54d27d7b1ac7dc8f503180bbaf038c77 Mon Sep 17 00:00:00 2001 From: Johannes 'fish' Ziemke Date: Mon, 28 Jul 2014 12:37:01 +0200 Subject: [PATCH] Add time exporter This simple exporter exposes the systems unix time. It's useful to compare it to the prometheus server time and other targets to detect clock skew. --- collector/time.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ node_exporter.go | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 collector/time.go diff --git a/collector/time.go b/collector/time.go new file mode 100644 index 00000000..172de88f --- /dev/null +++ b/collector/time.go @@ -0,0 +1,47 @@ +// +build !notime + +package collector + +import ( + "time" + + "github.com/golang/glog" + "github.com/prometheus/client_golang/prometheus" +) + +var ( + systemTime = prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: Namespace, + Name: "time", + Help: "System time in seconds since epoch (1970).", + }) +) + +type timeCollector struct { + config Config +} + +func init() { + Factories["time"] = NewTimeCollector +} + +// Takes a config struct and prometheus registry and returns a new Collector exposing +// the current system time in seconds since epoch. +func NewTimeCollector(config Config) (Collector, error) { + c := timeCollector{ + config: config, + } + + if _, err := prometheus.RegisterOrGet(systemTime); err != nil { + return nil, err + } + return &c, nil +} + +func (c *timeCollector) Update() (updates int, err error) { + updates++ + now := time.Now() + glog.V(1).Infof("Set time: %f", now.Unix()) + systemTime.Set(float64(now.Unix())) + return updates, err +} diff --git a/node_exporter.go b/node_exporter.go index 7622cc61..0d8e7b99 100644 --- a/node_exporter.go +++ b/node_exporter.go @@ -26,7 +26,7 @@ var ( configFile = flag.String("config", "node_exporter.conf", "config file.") memProfile = flag.String("memprofile", "", "write memory profile to this file") listeningAddress = flag.String("listen", ":8080", "address to listen on") - enabledCollectors = flag.String("enabledCollectors", "attributes,diskstats,filesystem,loadavg,meminfo,stat,netdev", "comma-seperated list of collectors to use") + enabledCollectors = flag.String("enabledCollectors", "attributes,diskstats,filesystem,loadavg,meminfo,stat,time,netdev", "comma-seperated list of collectors to use") printCollectors = flag.Bool("printCollectors", false, "If true, print available collectors and exit") interval = flag.Duration("interval", 60*time.Second, "refresh interval")