add new metric to collect ban time for each jail
This commit is contained in:
parent
bb5c15de1b
commit
3169bbcbda
@ -46,6 +46,11 @@ var (
|
|||||||
"Total number of IPs banned by this jail (includes expired bans)",
|
"Total number of IPs banned by this jail (includes expired bans)",
|
||||||
[]string{"jail"}, nil,
|
[]string{"jail"}, nil,
|
||||||
)
|
)
|
||||||
|
metricJailBanTime = prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(namespace, "config", "jail_ban_time"),
|
||||||
|
"How long an IP is banned for in this jail (in seconds)",
|
||||||
|
[]string{"jail"}, nil,
|
||||||
|
)
|
||||||
metricVersionInfo = prometheus.NewDesc(
|
metricVersionInfo = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(namespace, "", "version"),
|
prometheus.BuildFQName(namespace, "", "version"),
|
||||||
"Version of the exporter and fail2ban server",
|
"Version of the exporter and fail2ban server",
|
||||||
@ -98,6 +103,7 @@ func (c *Collector) collectJailMetrics(ch chan<- prometheus.Metric, s *socket.Fa
|
|||||||
|
|
||||||
for i := range jails {
|
for i := range jails {
|
||||||
c.collectJailStatsMetric(ch, s, jails[i])
|
c.collectJailStatsMetric(ch, s, jails[i])
|
||||||
|
c.collectJailConfigMetrics(ch, s, jails[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,6 +129,18 @@ func (c *Collector) collectJailStatsMetric(ch chan<- prometheus.Metric, s *socke
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Collector) collectJailConfigMetrics(ch chan<- prometheus.Metric, s *socket.Fail2BanSocket, jail string) {
|
||||||
|
banTime, err := s.GetJailBanTime(jail)
|
||||||
|
if err != nil {
|
||||||
|
c.socketRequestErrorCount++
|
||||||
|
log.Printf("failed to get ban time for jail %s: %v", jail, err)
|
||||||
|
} else {
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
metricJailBanTime, prometheus.GaugeValue, float64(banTime), jail,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVersionMetric(ch chan<- prometheus.Metric, s *socket.Fail2BanSocket) {
|
func (c *Collector) collectVersionMetric(ch chan<- prometheus.Metric, s *socket.Fail2BanSocket) {
|
||||||
var err error
|
var err error
|
||||||
var fail2banVersion = ""
|
var fail2banVersion = ""
|
||||||
|
@ -118,6 +118,21 @@ func (s *Fail2BanSocket) GetJailStats(jail string) (JailStats, error) {
|
|||||||
return stats, newBadFormatError(statusCommand, response)
|
return stats, newBadFormatError(statusCommand, response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Fail2BanSocket) GetJailBanTime(jail string) (int, error) {
|
||||||
|
command := fmt.Sprintf(banTimeCommandFmt, jail)
|
||||||
|
response, err := s.sendCommand(strings.Split(command, " "))
|
||||||
|
if err != nil {
|
||||||
|
return -1, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if lvl1, ok := response.(*types.Tuple); ok {
|
||||||
|
if banTime, ok := lvl1.Get(1).(int); ok {
|
||||||
|
return banTime, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1, newBadFormatError(command, response)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Fail2BanSocket) GetServerVersion() (string, error) {
|
func (s *Fail2BanSocket) GetServerVersion() (string, error) {
|
||||||
response, err := s.sendCommand([]string{versionCommand})
|
response, err := s.sendCommand([]string{versionCommand})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -12,6 +12,7 @@ const (
|
|||||||
pingCommand = "ping"
|
pingCommand = "ping"
|
||||||
statusCommand = "status"
|
statusCommand = "status"
|
||||||
versionCommand = "version"
|
versionCommand = "version"
|
||||||
|
banTimeCommandFmt = "get %s bantime"
|
||||||
socketReadBufferSize = 1024
|
socketReadBufferSize = 1024
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user