metrics: adding support for servers.bind. statistic (#7)
this commit adds support for the servers.bind. statistic which is exposed by dnsmasq and provides information about the number of successful and failed queries on each configured upstream server
This commit is contained in:
parent
161ea97d3d
commit
d5b74a1f9b
38
dnsmasq.go
38
dnsmasq.go
@ -22,6 +22,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
|
|
||||||
@ -83,6 +84,23 @@ var (
|
|||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
serversMetrics = map[string]*prometheus.GaugeVec{
|
||||||
|
"queries": prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "dnsmasq_servers_queries",
|
||||||
|
Help: "DNS queries on upstream server",
|
||||||
|
},
|
||||||
|
[]string{"server"},
|
||||||
|
),
|
||||||
|
"queries_failed": prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "dnsmasq_servers_queries_failed",
|
||||||
|
Help: "DNS queries failed on upstream server",
|
||||||
|
},
|
||||||
|
[]string{"server"},
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
leases = prometheus.NewGauge(prometheus.GaugeOpts{
|
leases = prometheus.NewGauge(prometheus.GaugeOpts{
|
||||||
Name: "dnsmasq_leases",
|
Name: "dnsmasq_leases",
|
||||||
Help: "Number of DHCP leases handed out",
|
Help: "Number of DHCP leases handed out",
|
||||||
@ -93,6 +111,9 @@ func init() {
|
|||||||
for _, g := range floatMetrics {
|
for _, g := range floatMetrics {
|
||||||
prometheus.MustRegister(g)
|
prometheus.MustRegister(g)
|
||||||
}
|
}
|
||||||
|
for _, g := range serversMetrics {
|
||||||
|
prometheus.MustRegister(g)
|
||||||
|
}
|
||||||
prometheus.MustRegister(leases)
|
prometheus.MustRegister(leases)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +170,22 @@ func (s *server) metrics(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
switch txt.Hdr.Name {
|
switch txt.Hdr.Name {
|
||||||
case "servers.bind.":
|
case "servers.bind.":
|
||||||
// TODO: parse <server> <successes> <errors>, also with multiple upstreams
|
for _, str := range txt.Txt {
|
||||||
|
arr := strings.Fields(str)
|
||||||
|
if got, want := len(arr), 3; got != want {
|
||||||
|
return fmt.Errorf("stats DNS record servers.bind.: unexpeced number of argument in record: got %d, want %d", got, want)
|
||||||
|
}
|
||||||
|
queries, err := strconv.ParseFloat(arr[1], 64)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
failedQueries, err := strconv.ParseFloat(arr[2], 64)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
serversMetrics["queries"].WithLabelValues(arr[0]).Set(queries)
|
||||||
|
serversMetrics["queries_failed"].WithLabelValues(arr[0]).Set(failedQueries)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
g, ok := floatMetrics[txt.Hdr.Name]
|
g, ok := floatMetrics[txt.Hdr.Name]
|
||||||
if !ok {
|
if !ok {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user