Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 63 additions & 11 deletions backend/agent/prombind9exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ type PromBind9ExporterStats struct {
IncomingQueries map[string]float64
IncomingRequests map[string]float64
NsStats map[string]float64
ZoneStats map[string]float64
TaskMgr map[string]float64
TrafficStats map[string]PromBind9TrafficStats
Views map[string]PromBind9ViewStats
Expand Down Expand Up @@ -355,21 +356,46 @@ func NewPromBind9Exporter(host string, port int, appMonitor AppMonitor, httpClie
"Total number of available worker threads.",
nil, nil)

// zone_transfer_failure_total
serverStatsDesc["XfrFail"] = prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "zone_transfer_failure_total"),
"Number of failed zone transfers.",
nil, nil)
// zone_transfer_rejected_total
serverStatsDesc["XfrRej"] = prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "zone_transfer_rejected_total"),
"Number of rejected zone transfers.",
nil, nil)
// zone_transfer_requests_done
serverStatsDesc["XfrReqDone"] = prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "zone_transfer_requests_done"),
"Number of requested and completed zone transfers.",
nil, nil)
// zone_transfer_success_total
serverStatsDesc["XfrSuccess"] = prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "zone_transfer_success_total"),
"Number of successful zone transfers.",
nil, nil)
// zone_transfer_failure_total
serverStatsDesc["XfrFail"] = prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "zone_transfer_failure_total"),
"Number of failed zone transfers.",
nil, nil)
// zone_transfer_requests_ipv4
serverStatsDesc["AXFRReqv4"] = prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "zone_transfer_requests_ipv4"),
"Number of requested IPv4 zone transfers.",
nil, nil)
// zone_transfer_requests_ipv6
serverStatsDesc["AXFRReqv6"] = prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "zone_transfer_requests_ipv6"),
"Number of requested IPv6 zone transfers.",
nil, nil)
// zone_transfer_incremental_requests_ipv4
serverStatsDesc["IXFRReqv4"] = prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "zone_transfer_incremental_requests_ipv4"),
"Number of requested IPv4 incremental zone transfers.",
nil, nil)
// zone_transfer_incremental_requests_ipv6
serverStatsDesc["IXFRReqv6"] = prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "zone_transfer_incremental_requests_ipv6"),
"Number of requested IPv6 incremental zone transfers.",
nil, nil)

pbe.serverStatsDesc = serverStatsDesc
pbe.trafficStatsDesc = trafficStatsDesc
Expand Down Expand Up @@ -709,11 +735,10 @@ func (pbe *PromBind9Exporter) Collect(ch chan<- prometheus.Metric) {
prometheus.GaugeValue, value)
}

// zone_transfer_failure_total
// zone_transfer_rejected_total
// zone_transfer_success_total
xfrStats := []string{"XfrFail", "XfrRej", "XfrSuccess"}
for _, label := range xfrStats {
// zone_transfer_requests_done
nsXfrStats := []string{"XfrReqDone", "XfrRej"}
for _, label := range nsXfrStats {
value, ok = pbe.stats.NsStats[label]
if !ok {
value = 0
Expand All @@ -723,6 +748,23 @@ func (pbe *PromBind9Exporter) Collect(ch chan<- prometheus.Metric) {
prometheus.CounterValue, value)
}

// zone_transfer_success_total
// zone_transfer_failure_total
// zone_transfer_requests_ipv4
// zone_transfer_requests_ipv6
// zone_transfer_incremental_requests_ipv4
// zone_transfer_incremental_requests_ipv6
zoneXfrStats := []string{"XfrSuccess", "XfrFail", "AXFRReqv4", "AXFRReqv6", "IXFRReqv4", "IXFRReqv6"}
for _, label := range zoneXfrStats {
value, ok = pbe.stats.ZoneStats[label]
if !ok {
value = 0
}
ch <- prometheus.MustNewConstMetric(
pbe.serverStatsDesc[label],
prometheus.CounterValue, value)
}

// Traffic metrics.

// traffic_incoming_requests_udp4_size_{bucket,count,sum}
Expand Down Expand Up @@ -1108,14 +1150,24 @@ func (pbe *PromBind9Exporter) setDaemonStats(stats map[string]any) (ret error) {
// query_errors_total
// query_recursion_total
// recursive_clients
// zone_transfer_failure_total
// zone_transfer_rejected_total
// zone_transfer_success_total
// zone_transfer_requests_done
pbe.stats.NsStats, err = pbe.scrapeServerStat(stats, "nsstats")
if err != nil {
return pkgerrors.Errorf("problem parsing 'nsstats': %+v", err)
}

// zone_transfer_success_total
// zone_transfer_failure_total
// zone_transfer_requests_ipv4
// zone_transfer_requests_ipv6
// zone_transfer_incremental_requests_ipv4
// zone_transfer_incremental_requests_ipv6
pbe.stats.ZoneStats, err = pbe.scrapeServerStat(stats, "zonestats")
if err != nil {
return pkgerrors.Errorf("problem parsing 'zonestats': %+v", err)
}

// tasks_running
// worker_threads
pbe.stats.TaskMgr, err = pbe.scrapeServerStat(stats, "taskmgr")
Expand Down
18 changes: 14 additions & 4 deletions backend/agent/prombind9exporter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func TestNewPromBind9ExporterBasic(t *testing.T) {
require.Equal(t, 42, pbe.Port)
require.NotNil(t, pbe.HTTPClient)
require.NotNil(t, pbe.HTTPServer)
require.Len(t, pbe.serverStatsDesc, 20)
require.Len(t, pbe.serverStatsDesc, 25)
require.Len(t, pbe.viewStatsDesc, 18)
}

Expand Down Expand Up @@ -281,10 +281,20 @@ func TestPromBind9ExporterStart(t *testing.T) {
require.Zero(t, buckets[math.Inf(0)])
require.Nil(t, err)

// zone_transfer_failure_total
require.EqualValues(t, 2.0, pbe.stats.NsStats["XfrFail"])
// zone_transfer_rejected_total
require.EqualValues(t, 11.0, pbe.stats.NsStats["XfrRej"])
// zone_transfer_requests_done
require.EqualValues(t, 37.0, pbe.stats.NsStats["XfrReqDone"])
// zone_transfer_success_total
require.EqualValues(t, 22.0, pbe.stats.NsStats["XfrSuccess"])
require.EqualValues(t, 22.0, pbe.stats.ZoneStats["XfrSuccess"])
// zone_transfer_failure_total
require.EqualValues(t, 4.0, pbe.stats.ZoneStats["XfrFail"])
// zone_transfer_requests_ipv4
require.EqualValues(t, 6.0, pbe.stats.ZoneStats["AXFRReqv4"])
// zone_transfer_requests_ipv6
require.EqualValues(t, 10.0, pbe.stats.ZoneStats["AXFRReqv6"])
// zone_transfer_incremental_requests_ipv4
require.EqualValues(t, 5.0, pbe.stats.ZoneStats["IXFRReqv4"])
// zone_transfer_incremental_requests_ipv6
require.EqualValues(t, 4.0, pbe.stats.ZoneStats["IXFRReqv6"])
}
11 changes: 9 additions & 2 deletions backend/agent/testdata/bind9-prom-server-stats.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,16 @@
"QrySuccess": 111,
"QryUDP": 404,
"QryTCP": 303,
"XfrFail": 2,
"XfrRej": 11,
"XfrSuccess": 22
"XfrReqDone": 37
},
"zonestats": {
"XfrSuccess": 22,
"XfrFail": 4,
"AXFRReqv4": 6,
"AXFRReqv6": 10,
"IXFRReqv4": 5,
"IXFRReqv6": 4
},
"taskmgr": {
"tasks-running": 1,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[bug] marcin

Fix collecting and exporting some of the BIND 9 statistics
pertaining to zone transfers. Exporting new statistics to
Prometheus: XfrReqDone, AXFRReqv4, AXFRReqv6, IXFRReqv4,
IXFRReqv6.
(Gitlab #1967)