Browse Source

Merge pull request #19 from prometheus/add-ntp-drift-and-time

Add ntp drift and time
pull/21/head
juliusv 10 years ago
parent
commit
f5e1bbad5a
  1. 56
      collector/ntp.go
  2. 47
      collector/time.go
  3. 2
      node_exporter.go

56
collector/ntp.go

@ -0,0 +1,56 @@
// +build !nontp
package collector
import (
"flag"
"fmt"
"time"
"github.com/beevik/ntp"
"github.com/golang/glog"
"github.com/prometheus/client_golang/prometheus"
)
var (
ntpServer = flag.String("ntpServer", "", "NTP server to use for ntp collector.")
ntpDrift = prometheus.NewGauge(prometheus.GaugeOpts{
Namespace: Namespace,
Name: "ntp_drift_seconds",
Help: "Time between system time and ntp time.",
})
)
type ntpCollector struct {
}
func init() {
Factories["ntp"] = NewNtpCollector
}
// Takes a config struct and prometheus registry and returns a new Collector exposing
// the offset between ntp and the current system time.
func NewNtpCollector(config Config) (Collector, error) {
if *ntpServer == "" {
return nil, fmt.Errorf("No NTP server specifies, see --ntpServer")
}
c := ntpCollector{}
if _, err := prometheus.RegisterOrGet(ntpDrift); err != nil {
return nil, err
}
return &c, nil
}
func (c *ntpCollector) Update() (updates int, err error) {
t, err := ntp.Time(*ntpServer)
if err != nil {
return updates, fmt.Errorf("Couldn't get ntp drift: %s", err)
}
drift := t.Sub(time.Now())
updates++
glog.V(1).Infof("Set ntp_drift_seconds: %f", drift.Seconds())
ntpDrift.Set(drift.Seconds())
return updates, err
}

47
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
}

2
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")

Loading…
Cancel
Save