域名访问超时,如何快速甩锅 DNS

 

访问某个 HTTP 域名接口,偶发性超时,原因可能多种多样,比如 DNS 解析问题、网络质量问题、对端服务负载问题等,在客户端没有良好埋点的情况下,排查起来比较费劲,只能挨个方向尝试,这里送大家一个小工具,可以快速采样 DNS 解析延迟,快速确认是否是 DNS 解析问题。

使用演示

运行工具,传入域名,就开始探测,每秒探测一次,如果想控制频率,也可以传入第二个参数,比如 0.2 秒探测一次。

$ ./dns-lookup-latency baidu.com 0.2
Apr  7 09:25:15.414 : 26.060 ms
Apr  7 09:25:15.641 : 3.505 ms
Apr  7 09:25:15.846 : 4.584 ms
Apr  7 09:25:16.051 : 1.515 ms
Apr  7 09:25:16.253 : 6.028 ms
Apr  7 09:25:16.460 : 3.329 ms
Apr  7 09:25:16.665 : 2.943 ms
Apr  7 09:25:16.869 : 3.513 ms
Apr  7 09:25:17.073 : 1.969 ms
Apr  7 09:25:17.276 : 2.194 ms
Apr  7 09:25:17.480 : 2.394 ms
Apr  7 09:25:17.683 : 2.211 ms
Apr  7 09:25:17.886 : 3.497 ms
Apr  7 09:25:18.090 : 3.816 ms
Apr  7 09:25:18.294 : 1.672 ms
Apr  7 09:25:18.496 : 2.913 ms
Apr  7 09:25:18.700 : 2.693 ms
Apr  7 09:25:18.904 : 2.640 ms

冒号前面是时间戳,冒号后面是 DNS 解析延迟时间,单位是毫秒。对于内网域名解析,延迟一般都比较小,如果延迟偶发性变大,那就可以甩锅给 DNS 维护人员了。

工具源码

这个需求比较简单,可以用 shell 实现,不过我是用 go 实现的,代码如下:

https://github.com/UlricQin/dns-lookup-latency

package main

import (
	"fmt"
	"net"
	"os"
	"strconv"
	"time"
)

func main() {
	if len(os.Args) < 2 {
		fmt.Printf("Usage: %s <domain> <interval-seconds>\n", os.Args[0])
		os.Exit(1)
	}

	domain := os.Args[1]

	interval := 1.0
	if len(os.Args) == 3 {
		f, err := strconv.ParseFloat(os.Args[2], 64)
		if err != nil {
			fmt.Printf("failed to parse interval(%s): %v\n", os.Args[2], err)
			os.Exit(1)
		}
		interval = f
	}

	duration := time.Millisecond * time.Duration(interval*1000)

	for {
		resolveDomain(domain)
		time.Sleep(duration)
	}
}

func resolveDomain(domain string) {
	startTime := time.Now()
	_, err := net.LookupIP(domain)
	elapsed := time.Since(startTime)

	if err != nil {
		fmt.Printf("%v : %v\n", startTime.Format(time.StampMilli), err)
		return
	}

	fmt.Printf("%v : %.3f ms\n", startTime.Format(time.StampMilli), elapsed.Seconds()*1000)
}

不到 50 行代码,核心就是一个 net.LookupIP 函数,核心代码还是我向 gpt 咨询的,哈哈。另外,我给大家打包好了二进制文件,可以直接下载使用:

https://github.com/UlricQin/dns-lookup-latency/releases

原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/35487.html

(0)
速盾高防cdn's avatar速盾高防cdn
上一篇 2024年4月22日 下午11:08
下一篇 2024年4月22日 下午11:10

相关推荐

  • 提示网站速度方法之CDN 与 DNS搭配技巧

      齐普夫定律揭示了一个引人深思的现象:最受欢迎的电影的流行程度是排名第7名电影的7倍。 这个定律表示,在大段文字中,某个字的使用频率与其排名成反比关系。比如,排名第 4…

    2024年3月22日
    0
  • 搭建了一个内网的DNS服务

    搭建了一个内网harbor后需要频繁的添加harbo的解析,有点麻烦所以自行搭建了一个内网的DNS服务,使用的k8s内网dns插件coredns,为了适配国产化用的欧拉镜像 以下是…

    CDN资讯 2024年7月11日
    0
  • 云原生反模式

    通过了解这些反模式并遵循云原生最佳实践,您可以设计、构建和运营更加强大、可扩展和成本效益高的云原生应用程序。 1.单体架构:在云上运行一个大而紧密耦合的应用程序,妨碍了可扩展性和敏…

    CDN资讯 2024年4月6日
    0
  • 服务器是国外的如何国内加速

    如果您的服务器位于国外,但您的用户主要位于国内,您可以采取以下几种方法来加速国内用户访问您的服务器: 通过以上方法,您可以有效地提升国内用户访问海外服务器的速度和稳定性,提升用户体…

    CDN资讯 2024年2月14日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注