prometheus / blackbox_exporter

Blackbox prober exporter
https://prometheus.io
Apache License 2.0
4.62k stars 1.05k forks source link

Support GODEBUG=netdns=cgo # force cgo resolver as an alternative DNS resolver mode #1256

Open Nachtfalkeaw opened 3 months ago

Nachtfalkeaw commented 3 months ago

Host operating system: output of uname -a

Linux ubiquiti 5.10.0-28-amd64 #1 SMP Debian 5.10.209-2 (2024-01-31) x86_64 GNU/Linux

blackbox_exporter version: output of blackbox_exporter --version

blackbox_exporter, version 0.25.0 (branch: HEAD, revision: ef3ff4fef195333fb8ee0039fb487b2f5007908f) build user: root@47d5b0d99f18 build date: 20240409-12:58:39 go version: go1.22.2 platform: linux/amd64 tags: unknown

root@ubiquiti:/opt/prometheus/blackbox_exporter# go version -m ./blackbox_exporter
./blackbox_exporter: go1.22.2
        path    github.com/prometheus/blackbox_exporter
        mod     github.com/prometheus/blackbox_exporter (devel)
        dep     github.com/alecthomas/kingpin/v2        v2.4.0  h1:f48lwail6p8zpO1bC4TxtqACaGqHYA22qkHjHpqDjYY=
        dep     github.com/alecthomas/units     v0.0.0-20231202071711-9a357b53e9c9      h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs=
        dep     github.com/andybalholm/brotli   v1.1.0  h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
        dep     github.com/beorn7/perks v1.0.1  h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
        dep     github.com/cespare/xxhash/v2    v2.2.0  h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
        dep     github.com/coreos/go-systemd/v22        v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
        dep     github.com/go-kit/log   v0.2.1  h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
        dep     github.com/go-logfmt/logfmt     v0.5.1  h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
        dep     github.com/jpillora/backoff     v1.0.0  h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
        dep     github.com/miekg/dns    v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
        dep     github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f      h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
        dep     github.com/prometheus/client_golang     v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
        dep     github.com/prometheus/client_model      v0.6.1  h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
        dep     github.com/prometheus/common    v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
        dep     github.com/prometheus/exporter-toolkit  v0.11.0 h1:yNTsuZ0aNCNFQ3aFTD2uhPOvr4iD7fdBvKPAEGkNf+g=
        dep     github.com/prometheus/procfs    v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
        dep     github.com/xhit/go-str2duration/v2      v2.1.0  h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc=
        dep     golang.org/x/crypto     v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
        dep     golang.org/x/net        v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
        dep     golang.org/x/oauth2     v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
        dep     golang.org/x/sync       v0.6.0  h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
        dep     golang.org/x/sys        v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
        dep     golang.org/x/text       v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
        dep     google.golang.org/genproto/googleapis/rpc       v0.0.0-20240227224415-6ceb2ff114de      h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
        dep     google.golang.org/grpc  v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
        dep     google.golang.org/protobuf      v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
        dep     gopkg.in/yaml.v2        v2.4.0  h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
        dep     gopkg.in/yaml.v3        v3.0.1  h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
        build   -buildmode=exe
        build   -compiler=gc
        build   -ldflags="-X github.com/prometheus/common/version.Version=0.25.0 -X github.com/prometheus/common/version.Revision=ef3ff4fef195333fb8ee0039fb487b2f5007908f -X github.com/prometheus/common/version.Branch=HEAD -X github.com/prometheus/common/version.BuildUser=root@47d5b0d99f18 -X github.com/prometheus/common/version.BuildDate=20240409-12:58:39  -extldflags '-static'"
        build   DefaultGODEBUG=httplaxcontentlength=1,httpmuxgo121=1,tls10server=1,tlsrsakex=1,tlsunsafeekm=1
        build   CGO_ENABLED=0
        build   GOARCH=amd64
        build   GOOS=linux
        build   GOAMD64=v1
        build   vcs=git
        build   vcs.revision=ef3ff4fef195333fb8ee0039fb487b2f5007908f
        build   vcs.time=2024-04-09T12:52:01Z
        build   vcs.modified=false

Based on this discussion it seems to not be possible to change the default DNS resolver mode: https://groups.google.com/g/prometheus-users/c/OkYdlviBGUI

I would like to change the DNS resolver mode of blackbox_exporter to make it possible to work with local dns caches like systemd-resolved or nscd because these are the tool I have available in my environment:

export GODEBUG=netdns=go # force pure Go resolver 
export GODEBUG=netdns=cgo # force cgo resolver 

In my blackbox_exporter config I have around 100 targets configured which is not that big I think. I ran probes every 15s - and I did every 5s before - that is a lot of DNS traffic I would like to avoid.

Instead of configuring a complete DNS Server a DNS cache would besufficient. From the google discussion I think I understood that there is a flag which needs to be set before compiling and then it should be possible to switch between the modes if needed.