Add time zone offset metric

Add the time zone and offset in seconds.

Closes: https://github.com/prometheus/node_exporter/issues/2052

Signed-off-by: Ben Kochie <superq@gmail.com>
This commit is contained in:
Ben Kochie 2021-06-20 09:17:16 +02:00 committed by Johannes 'fish' Ziemke
parent 90d469805a
commit 13be860e25
2 changed files with 20 additions and 7 deletions

View file

@ -10,6 +10,7 @@ NOTE: Filesystem collector flags have been renamed. `--collector.filesystem.igno
* [CHANGE] Rename filesystem collector flags to match other collectors #2012 * [CHANGE] Rename filesystem collector flags to match other collectors #2012
* [FEATURE] Add flag to ignore network speed if it is unknown #1989 * [FEATURE] Add flag to ignore network speed if it is unknown #1989
* [ENHANCEMENT] Add time zone offset metric #2060
* [BUGFIX] Add ErrorLog plumbing to promhttp #1887 * [BUGFIX] Add ErrorLog plumbing to promhttp #1887
## 1.1.2 / 2021-03-05 ## 1.1.2 / 2021-03-05

View file

@ -24,8 +24,9 @@ import (
) )
type timeCollector struct { type timeCollector struct {
desc *prometheus.Desc nowDesc *prometheus.Desc
logger log.Logger zoneDesc *prometheus.Desc
logger log.Logger
} }
func init() { func init() {
@ -35,19 +36,30 @@ func init() {
// NewTimeCollector returns a new Collector exposing the current system time in // NewTimeCollector returns a new Collector exposing the current system time in
// seconds since epoch. // seconds since epoch.
func NewTimeCollector(logger log.Logger) (Collector, error) { func NewTimeCollector(logger log.Logger) (Collector, error) {
const subsystem = "time"
return &timeCollector{ return &timeCollector{
desc: prometheus.NewDesc( nowDesc: prometheus.NewDesc(
namespace+"_time_seconds", prometheus.BuildFQName(namespace, subsystem, "seconds"),
"System time in seconds since epoch (1970).", "System time in seconds since epoch (1970).",
nil, nil, nil, nil,
), ),
zoneDesc: prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "zone_offset_seconds"),
"System time zone offset in seconds.",
[]string{"time_zone"}, nil,
),
logger: logger, logger: logger,
}, nil }, nil
} }
func (c *timeCollector) Update(ch chan<- prometheus.Metric) error { func (c *timeCollector) Update(ch chan<- prometheus.Metric) error {
now := float64(time.Now().UnixNano()) / 1e9 now := time.Now()
level.Debug(c.logger).Log("msg", "Return time", "now", now) nowSec := float64(now.UnixNano()) / 1e9
ch <- prometheus.MustNewConstMetric(c.desc, prometheus.GaugeValue, now) zone, zoneOffset := now.Zone()
level.Debug(c.logger).Log("msg", "Return time", "now", nowSec)
ch <- prometheus.MustNewConstMetric(c.nowDesc, prometheus.GaugeValue, nowSec)
level.Debug(c.logger).Log("msg", "Zone offset", "offset", zoneOffset, "time_zone", zone)
ch <- prometheus.MustNewConstMetric(c.zoneDesc, prometheus.GaugeValue, float64(zoneOffset), zone)
return nil return nil
} }