Skip to content

Commit 21991c9

Browse files
committed
Add DNS response time histogram metrics
- Add native exponential histogram for DNS response times - Track response times by result type (filtered, not_filtered, etc.) - Use factor 1.1 for automatic bucket generation - Integrate with existing stats processing flow
1 parent 96005fc commit 21991c9

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

internal/metrics/dns.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package metrics
22

33
import (
4+
"time"
5+
46
"github.com/prometheus/client_golang/prometheus"
57
)
68

@@ -13,18 +15,31 @@ const (
1315
ResultParental = "parental"
1416
)
1517

16-
// DNSQueriesByResult tracks DNS queries by their processing result
17-
var DNSQueriesByResult = prometheus.NewCounterVec(prometheus.CounterOpts{
18-
Name: "adguard_dns_queries_by_result_total",
18+
// DNSQueries tracks DNS queries by their processing result
19+
var DNSQueries = prometheus.NewCounterVec(prometheus.CounterOpts{
20+
Name: "adguard_dns_queries_total",
1921
Help: "Total number of DNS queries by processing result",
2022
}, []string{"result"})
2123

24+
// DNSResponseTime tracks DNS query response times using native exponential histogram
25+
var DNSResponseTime = prometheus.NewHistogramVec(prometheus.HistogramOpts{
26+
Name: "adguard_dns_response_time_seconds",
27+
Help: "DNS query response time in seconds",
28+
NativeHistogramBucketFactor: 1.1,
29+
}, []string{"result"})
30+
2231
// RegisterDNSMetrics registers all DNS-related metrics with the provided registry
2332
func RegisterDNSMetrics(registry *prometheus.Registry) {
24-
registry.MustRegister(DNSQueriesByResult)
33+
registry.MustRegister(DNSQueries)
34+
registry.MustRegister(DNSResponseTime)
2535
}
2636

2737
// IncrementDNSQueryByResult increments counters for a specific query result type
2838
func IncrementDNSQueryByResult(result string) {
29-
DNSQueriesByResult.WithLabelValues(result).Inc()
39+
DNSQueries.WithLabelValues(result).Inc()
40+
}
41+
42+
// ObserveDNSResponseTime records a DNS query response time
43+
func ObserveDNSResponseTime(result string, duration time.Duration) {
44+
DNSResponseTime.WithLabelValues(result).Observe(duration.Seconds())
3045
}

internal/stats/unit.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ import (
99
"slices"
1010
"time"
1111

12-
"github.com/AdguardTeam/AdGuardHome/internal/aghnet"
13-
"github.com/AdguardTeam/AdGuardHome/internal/metrics"
1412
"github.com/AdguardTeam/dnsproxy/proxy"
1513
"github.com/AdguardTeam/golibs/errors"
1614
"github.com/AdguardTeam/golibs/logutil/slogutil"
1715
"go.etcd.io/bbolt"
16+
17+
"github.com/AdguardTeam/AdGuardHome/internal/aghnet"
18+
"github.com/AdguardTeam/AdGuardHome/internal/metrics"
1819
)
1920

2021
const (
@@ -347,6 +348,7 @@ func (u *unit) add(e *Entry) {
347348
resultLabel = "unknown"
348349
}
349350
metrics.IncrementDNSQueryByResult(resultLabel)
351+
metrics.ObserveDNSResponseTime(resultLabel, e.ProcessingTime)
350352

351353
for _, s := range e.UpstreamStats {
352354
if s.IsCached || s.Error != nil {

0 commit comments

Comments
 (0)