diff --git a/conf/input.dns_query/dns_query.toml b/conf/input.dns_query/dns_query.toml index 825d8c1..ee5f5bf 100644 --- a/conf/input.dns_query/dns_query.toml +++ b/conf/input.dns_query/dns_query.toml @@ -8,6 +8,9 @@ # # interval = global.interval * interval_times # interval_times = 1 +# # +auto_detect_local_dns_server = false + ## servers to query # servers = ["8.8.8.8"] servers = [] diff --git a/inputs/dns_query/dns_query.go b/inputs/dns_query/dns_query.go index d02a8b1..4443b05 100644 --- a/inputs/dns_query/dns_query.go +++ b/inputs/dns_query/dns_query.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "net" + "os" "strconv" "sync" "time" @@ -48,6 +49,7 @@ func (dq *DnsQuery) GetInstances() []inputs.Instance { type Instance struct { config.InstanceConfig + EnableAutoDetectDnsServer bool `toml:"auto_detect_local_dns_server"` // Domains or subdomains to query Domains []string `toml:"domains"` @@ -68,8 +70,22 @@ type Instance struct { } func (ins *Instance) Init() error { + if ins.EnableAutoDetectDnsServer == true { + if len(ins.Servers) == 0 { + resolvPath := "/etc/resolv.conf" + if _, err := os.Stat(resolvPath); os.IsNotExist(err) { + return nil + } + config, _ := dns.ClientConfigFromFile(resolvPath) + Servers := []string{} + for _, ipAddress := range config.Servers { + Servers = append(Servers, ipAddress) + } + ins.Servers = Servers + } + } if len(ins.Servers) == 0 { - return types.ErrInstancesEmpty + return nil } if ins.Network == "" {