switch to go-kit/log (#1575)
Signed-off-by: yeya24 <yb532204897@gmail.com>
This commit is contained in:
parent
a80b7d0bc5
commit
2477c5c67d
158 changed files with 3434 additions and 4636 deletions
|
|
@ -25,8 +25,9 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/coreos/go-systemd/dbus"
|
||||
"github.com/go-kit/kit/log"
|
||||
"github.com/go-kit/kit/log/level"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/common/log"
|
||||
kingpin "gopkg.in/alecthomas/kingpin.v2"
|
||||
)
|
||||
|
||||
|
|
@ -62,6 +63,7 @@ type systemdCollector struct {
|
|||
systemdVersion int
|
||||
unitWhitelistPattern *regexp.Regexp
|
||||
unitBlacklistPattern *regexp.Regexp
|
||||
logger log.Logger
|
||||
}
|
||||
|
||||
var unitStatesName = []string{"active", "activating", "deactivating", "inactive", "failed"}
|
||||
|
|
@ -71,7 +73,7 @@ func init() {
|
|||
}
|
||||
|
||||
// NewSystemdCollector returns a new Collector exposing systemd statistics.
|
||||
func NewSystemdCollector() (Collector, error) {
|
||||
func NewSystemdCollector(logger log.Logger) (Collector, error) {
|
||||
const subsystem = "systemd"
|
||||
|
||||
unitDesc := prometheus.NewDesc(
|
||||
|
|
@ -119,10 +121,10 @@ func NewSystemdCollector() (Collector, error) {
|
|||
unitWhitelistPattern := regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *unitWhitelist))
|
||||
unitBlacklistPattern := regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *unitBlacklist))
|
||||
|
||||
systemdVersion := getSystemdVersion()
|
||||
systemdVersion := getSystemdVersion(logger)
|
||||
if systemdVersion < minSystemdVersionSystemState {
|
||||
log.Warnf("Detected systemd version %v is lower than minimum %v", systemdVersion, minSystemdVersionSystemState)
|
||||
log.Warn("Some systemd state and timer metrics will not be available")
|
||||
level.Warn(logger).Log("msg", "Detected systemd version is lower than minimum", "current", systemdVersion, "minimum", minSystemdVersionSystemState)
|
||||
level.Warn(logger).Log("msg", "Some systemd state and timer metrics will not be available")
|
||||
}
|
||||
|
||||
return &systemdCollector{
|
||||
|
|
@ -141,6 +143,7 @@ func NewSystemdCollector() (Collector, error) {
|
|||
systemdVersion: systemdVersion,
|
||||
unitWhitelistPattern: unitWhitelistPattern,
|
||||
unitBlacklistPattern: unitBlacklistPattern,
|
||||
logger: logger,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
|
@ -158,16 +161,16 @@ func (c *systemdCollector) Update(ch chan<- prometheus.Metric) error {
|
|||
if err != nil {
|
||||
return fmt.Errorf("couldn't get units: %s", err)
|
||||
}
|
||||
log.Debugf("systemd getAllUnits took %f", time.Since(begin).Seconds())
|
||||
level.Debug(c.logger).Log("msg", "getAllUnits took", "duration_seconds", time.Since(begin).Seconds())
|
||||
|
||||
begin = time.Now()
|
||||
summary := summarizeUnits(allUnits)
|
||||
c.collectSummaryMetrics(ch, summary)
|
||||
log.Debugf("systemd collectSummaryMetrics took %f", time.Since(begin).Seconds())
|
||||
level.Debug(c.logger).Log("msg", "collectSummaryMetrics took", "duration_seconds", time.Since(begin).Seconds())
|
||||
|
||||
begin = time.Now()
|
||||
units := filterUnits(allUnits, c.unitWhitelistPattern, c.unitBlacklistPattern)
|
||||
log.Debugf("systemd filterUnits took %f", time.Since(begin).Seconds())
|
||||
units := filterUnits(allUnits, c.unitWhitelistPattern, c.unitBlacklistPattern, c.logger)
|
||||
level.Debug(c.logger).Log("msg", "filterUnits took", "duration_seconds", time.Since(begin).Seconds())
|
||||
|
||||
var wg sync.WaitGroup
|
||||
defer wg.Wait()
|
||||
|
|
@ -177,7 +180,7 @@ func (c *systemdCollector) Update(ch chan<- prometheus.Metric) error {
|
|||
defer wg.Done()
|
||||
begin = time.Now()
|
||||
c.collectUnitStatusMetrics(conn, ch, units)
|
||||
log.Debugf("systemd collectUnitStatusMetrics took %f", time.Since(begin).Seconds())
|
||||
level.Debug(c.logger).Log("msg", "collectUnitStatusMetrics took", "duration_seconds", time.Since(begin).Seconds())
|
||||
}()
|
||||
|
||||
if *enableStartTimeMetrics {
|
||||
|
|
@ -186,7 +189,7 @@ func (c *systemdCollector) Update(ch chan<- prometheus.Metric) error {
|
|||
defer wg.Done()
|
||||
begin = time.Now()
|
||||
c.collectUnitStartTimeMetrics(conn, ch, units)
|
||||
log.Debugf("systemd collectUnitStartTimeMetrics took %f", time.Since(begin).Seconds())
|
||||
level.Debug(c.logger).Log("msg", "collectUnitStartTimeMetrics took", "duration_seconds", time.Since(begin).Seconds())
|
||||
}()
|
||||
}
|
||||
|
||||
|
|
@ -196,7 +199,7 @@ func (c *systemdCollector) Update(ch chan<- prometheus.Metric) error {
|
|||
defer wg.Done()
|
||||
begin = time.Now()
|
||||
c.collectUnitTasksMetrics(conn, ch, units)
|
||||
log.Debugf("systemd collectUnitTasksMetrics took %f", time.Since(begin).Seconds())
|
||||
level.Debug(c.logger).Log("msg", "collectUnitTasksMetrics took", "duration_seconds", time.Since(begin).Seconds())
|
||||
}()
|
||||
}
|
||||
|
||||
|
|
@ -206,7 +209,7 @@ func (c *systemdCollector) Update(ch chan<- prometheus.Metric) error {
|
|||
defer wg.Done()
|
||||
begin = time.Now()
|
||||
c.collectTimers(conn, ch, units)
|
||||
log.Debugf("systemd collectTimers took %f", time.Since(begin).Seconds())
|
||||
level.Debug(c.logger).Log("msg", "collectTimers took", "duration_seconds", time.Since(begin).Seconds())
|
||||
}()
|
||||
}
|
||||
|
||||
|
|
@ -215,13 +218,13 @@ func (c *systemdCollector) Update(ch chan<- prometheus.Metric) error {
|
|||
defer wg.Done()
|
||||
begin = time.Now()
|
||||
c.collectSockets(conn, ch, units)
|
||||
log.Debugf("systemd collectSockets took %f", time.Since(begin).Seconds())
|
||||
level.Debug(c.logger).Log("msg", "collectSockets took", "duration_seconds", time.Since(begin).Seconds())
|
||||
}()
|
||||
|
||||
if c.systemdVersion >= minSystemdVersionSystemState {
|
||||
begin = time.Now()
|
||||
err = c.collectSystemState(conn, ch)
|
||||
log.Debugf("systemd collectSystemState took %f", time.Since(begin).Seconds())
|
||||
level.Debug(c.logger).Log("msg", "collectSystemState took", "duration_seconds", time.Since(begin).Seconds())
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
|
|
@ -236,14 +239,14 @@ func (c *systemdCollector) collectUnitStatusMetrics(conn *dbus.Conn, ch chan<- p
|
|||
if strings.HasSuffix(unit.Name, ".service") {
|
||||
serviceTypeProperty, err := conn.GetUnitTypeProperty(unit.Name, "Service", "Type")
|
||||
if err != nil {
|
||||
log.Debugf("couldn't get unit '%s' Type: %s", unit.Name, err)
|
||||
level.Debug(c.logger).Log("msg", "couldn't get unit type", "unit", unit.Name, "err", err)
|
||||
} else {
|
||||
serviceType = serviceTypeProperty.Value.Value().(string)
|
||||
}
|
||||
} else if strings.HasSuffix(unit.Name, ".mount") {
|
||||
serviceTypeProperty, err := conn.GetUnitTypeProperty(unit.Name, "Mount", "Type")
|
||||
if err != nil {
|
||||
log.Debugf("couldn't get unit '%s' Type: %s", unit.Name, err)
|
||||
level.Debug(c.logger).Log("msg", "couldn't get unit type", "unit", unit.Name, "err", err)
|
||||
} else {
|
||||
serviceType = serviceTypeProperty.Value.Value().(string)
|
||||
}
|
||||
|
|
@ -261,7 +264,7 @@ func (c *systemdCollector) collectUnitStatusMetrics(conn *dbus.Conn, ch chan<- p
|
|||
// NRestarts wasn't added until systemd 235.
|
||||
restartsCount, err := conn.GetUnitTypeProperty(unit.Name, "Service", "NRestarts")
|
||||
if err != nil {
|
||||
log.Debugf("couldn't get unit '%s' NRestarts: %s", unit.Name, err)
|
||||
level.Debug(c.logger).Log("msg", "couldn't get unit NRestarts", "unit", unit.Name, "err", err)
|
||||
} else {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.nRestartsDesc, prometheus.CounterValue,
|
||||
|
|
@ -279,7 +282,7 @@ func (c *systemdCollector) collectSockets(conn *dbus.Conn, ch chan<- prometheus.
|
|||
|
||||
acceptedConnectionCount, err := conn.GetUnitTypeProperty(unit.Name, "Socket", "NAccepted")
|
||||
if err != nil {
|
||||
log.Debugf("couldn't get unit '%s' NAccepted: %s", unit.Name, err)
|
||||
level.Debug(c.logger).Log("msg", "couldn't get unit NAccepted", "unit", unit.Name, "err", err)
|
||||
continue
|
||||
}
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
|
|
@ -288,7 +291,7 @@ func (c *systemdCollector) collectSockets(conn *dbus.Conn, ch chan<- prometheus.
|
|||
|
||||
currentConnectionCount, err := conn.GetUnitTypeProperty(unit.Name, "Socket", "NConnections")
|
||||
if err != nil {
|
||||
log.Debugf("couldn't get unit '%s' NConnections: %s", unit.Name, err)
|
||||
level.Debug(c.logger).Log("msg", "couldn't get unit NConnections", "unit", unit.Name, "err", err)
|
||||
continue
|
||||
}
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
|
|
@ -316,7 +319,7 @@ func (c *systemdCollector) collectUnitStartTimeMetrics(conn *dbus.Conn, ch chan<
|
|||
} else {
|
||||
timestampValue, err := conn.GetUnitProperty(unit.Name, "ActiveEnterTimestamp")
|
||||
if err != nil {
|
||||
log.Debugf("couldn't get unit '%s' StartTimeUsec: %s", unit.Name, err)
|
||||
level.Debug(c.logger).Log("msg", "couldn't get unit StartTimeUsec", "unit", unit.Name, "err", err)
|
||||
continue
|
||||
}
|
||||
startTimeUsec = timestampValue.Value.Value().(uint64)
|
||||
|
|
@ -334,7 +337,7 @@ func (c *systemdCollector) collectUnitTasksMetrics(conn *dbus.Conn, ch chan<- pr
|
|||
if strings.HasSuffix(unit.Name, ".service") {
|
||||
tasksCurrentCount, err := conn.GetUnitTypeProperty(unit.Name, "Service", "TasksCurrent")
|
||||
if err != nil {
|
||||
log.Debugf("couldn't get unit '%s' TasksCurrent: %s", unit.Name, err)
|
||||
level.Debug(c.logger).Log("msg", "couldn't get unit TasksCurrent", "unit", unit.Name, "err", err)
|
||||
} else {
|
||||
val = tasksCurrentCount.Value.Value().(uint64)
|
||||
// Don't set if tasksCurrent if dbus reports MaxUint64.
|
||||
|
|
@ -346,7 +349,7 @@ func (c *systemdCollector) collectUnitTasksMetrics(conn *dbus.Conn, ch chan<- pr
|
|||
}
|
||||
tasksMaxCount, err := conn.GetUnitTypeProperty(unit.Name, "Service", "TasksMax")
|
||||
if err != nil {
|
||||
log.Debugf("couldn't get unit '%s' TasksMax: %s", unit.Name, err)
|
||||
level.Debug(c.logger).Log("msg", "couldn't get unit TasksMax", "unit", unit.Name, "err", err)
|
||||
} else {
|
||||
val = tasksMaxCount.Value.Value().(uint64)
|
||||
// Don't set if tasksMax if dbus reports MaxUint64.
|
||||
|
|
@ -368,7 +371,7 @@ func (c *systemdCollector) collectTimers(conn *dbus.Conn, ch chan<- prometheus.M
|
|||
|
||||
lastTriggerValue, err := conn.GetUnitTypeProperty(unit.Name, "Timer", "LastTriggerUSec")
|
||||
if err != nil {
|
||||
log.Debugf("couldn't get unit '%s' LastTriggerUSec: %s", unit.Name, err)
|
||||
level.Debug(c.logger).Log("msg", "couldn't get unit LastTriggerUSec", "unit", unit.Name, "err", err)
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
@ -440,36 +443,36 @@ func summarizeUnits(units []unit) map[string]float64 {
|
|||
return summarized
|
||||
}
|
||||
|
||||
func filterUnits(units []unit, whitelistPattern, blacklistPattern *regexp.Regexp) []unit {
|
||||
func filterUnits(units []unit, whitelistPattern, blacklistPattern *regexp.Regexp, logger log.Logger) []unit {
|
||||
filtered := make([]unit, 0, len(units))
|
||||
for _, unit := range units {
|
||||
if whitelistPattern.MatchString(unit.Name) && !blacklistPattern.MatchString(unit.Name) && unit.LoadState == "loaded" {
|
||||
log.Debugf("Adding unit: %s", unit.Name)
|
||||
level.Debug(logger).Log("msg", "Adding unit", "unit", unit.Name)
|
||||
filtered = append(filtered, unit)
|
||||
} else {
|
||||
log.Debugf("Ignoring unit: %s", unit.Name)
|
||||
level.Debug(logger).Log("msg", "Ignoring unit", "unit", unit.Name)
|
||||
}
|
||||
}
|
||||
|
||||
return filtered
|
||||
}
|
||||
|
||||
func getSystemdVersion() int {
|
||||
func getSystemdVersion(logger log.Logger) int {
|
||||
conn, err := newSystemdDbusConn()
|
||||
if err != nil {
|
||||
log.Warnf("Unable to get systemd dbus connection, defaulting systemd version to 0: %s", err)
|
||||
level.Warn(logger).Log("msg", "Unable to get systemd dbus connection, defaulting systemd version to 0", "err", err)
|
||||
return 0
|
||||
}
|
||||
defer conn.Close()
|
||||
version, err := conn.GetManagerProperty("Version")
|
||||
if err != nil {
|
||||
log.Warn("Unable to get systemd version property, defaulting to 0")
|
||||
level.Warn(logger).Log("msg", "Unable to get systemd version property, defaulting to 0")
|
||||
return 0
|
||||
}
|
||||
version = strings.Replace(version, "\"", "", 2)
|
||||
v, err := strconv.Atoi(version)
|
||||
if err != nil {
|
||||
log.Warnf("Got invalid systemd version: %v", version)
|
||||
level.Warn(logger).Log("msg", "Got invalid systemd version", "version", version)
|
||||
return 0
|
||||
}
|
||||
return v
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue