Add a counter for refused socket unit connections, available as of systemd 239 (#995)

Signed-off-by: xginn8 <mamcgi@gmail.com>
This commit is contained in:
xginn8 2018-07-16 10:01:42 -04:00 committed by Ben Kochie
parent 76bbd8dd18
commit 9b97f44a70
2 changed files with 16 additions and 0 deletions

View file

@ -3,6 +3,7 @@
**Breaking changes** **Breaking changes**
* [CHANGE] * [CHANGE]
* [FEATURE] Collect NRefused property for systemd socket units (available as of systemd v239)
* [FEATURE] Collect NRestarts property for systemd service units * [FEATURE] Collect NRestarts property for systemd service units
* [FEATURE] Add socket unit stats to systemd collector #968 * [FEATURE] Add socket unit stats to systemd collector #968
* [ENHANCEMENT] * [ENHANCEMENT]

View file

@ -40,6 +40,7 @@ type systemdCollector struct {
timerLastTriggerDesc *prometheus.Desc timerLastTriggerDesc *prometheus.Desc
socketAcceptedConnectionsDesc *prometheus.Desc socketAcceptedConnectionsDesc *prometheus.Desc
socketCurrentConnectionsDesc *prometheus.Desc socketCurrentConnectionsDesc *prometheus.Desc
socketRefusedConnectionsDesc *prometheus.Desc
unitWhitelistPattern *regexp.Regexp unitWhitelistPattern *regexp.Regexp
unitBlacklistPattern *regexp.Regexp unitBlacklistPattern *regexp.Regexp
} }
@ -78,6 +79,9 @@ func NewSystemdCollector() (Collector, error) {
socketCurrentConnectionsDesc := prometheus.NewDesc( socketCurrentConnectionsDesc := prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "socket_current_connections"), prometheus.BuildFQName(namespace, subsystem, "socket_current_connections"),
"Current number of socket connections", []string{"name"}, nil) "Current number of socket connections", []string{"name"}, nil)
socketRefusedConnectionsDesc := prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "socket_refused_connections_total"),
"Total number of refused socket connections", []string{"name"}, nil)
unitWhitelistPattern := regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *unitWhitelist)) unitWhitelistPattern := regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *unitWhitelist))
unitBlacklistPattern := regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *unitBlacklist)) unitBlacklistPattern := regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *unitBlacklist))
@ -89,6 +93,7 @@ func NewSystemdCollector() (Collector, error) {
timerLastTriggerDesc: timerLastTriggerDesc, timerLastTriggerDesc: timerLastTriggerDesc,
socketAcceptedConnectionsDesc: socketAcceptedConnectionsDesc, socketAcceptedConnectionsDesc: socketAcceptedConnectionsDesc,
socketCurrentConnectionsDesc: socketCurrentConnectionsDesc, socketCurrentConnectionsDesc: socketCurrentConnectionsDesc,
socketRefusedConnectionsDesc: socketRefusedConnectionsDesc,
unitWhitelistPattern: unitWhitelistPattern, unitWhitelistPattern: unitWhitelistPattern,
unitBlacklistPattern: unitBlacklistPattern, unitBlacklistPattern: unitBlacklistPattern,
}, nil }, nil
@ -148,6 +153,9 @@ func (c *systemdCollector) collectSockets(ch chan<- prometheus.Metric, units []u
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.socketCurrentConnectionsDesc, prometheus.GaugeValue, c.socketCurrentConnectionsDesc, prometheus.GaugeValue,
float64(unit.currentConnections), unit.Name) float64(unit.currentConnections), unit.Name)
ch <- prometheus.MustNewConstMetric(
c.socketRefusedConnectionsDesc, prometheus.GaugeValue,
float64(unit.refusedConnections), unit.Name)
} }
return nil return nil
} }
@ -193,6 +201,7 @@ type unit struct {
nRestarts uint32 nRestarts uint32
acceptedConnections uint32 acceptedConnections uint32
currentConnections uint32 currentConnections uint32
refusedConnections uint32
} }
func (c *systemdCollector) getAllUnits() ([]unit, error) { func (c *systemdCollector) getAllUnits() ([]unit, error) {
@ -244,6 +253,12 @@ func (c *systemdCollector) getAllUnits() ([]unit, error) {
} }
unit.currentConnections = currentConnectionCount.Value.Value().(uint32) unit.currentConnections = currentConnectionCount.Value.Value().(uint32)
refusedConnectionCount, err := conn.GetUnitTypeProperty(unit.Name, "Socket", "NRefused")
if err != nil {
log.Debugf("couldn't get unit '%s' NRefused: %s\n", unit.Name, err)
continue
}
unit.refusedConnections = refusedConnectionCount.Value.Value().(uint32)
} }
result = append(result, unit) result = append(result, unit)