问题背景
访问某个 HTTP 域名接口,偶发性超时,原因可能多种多样,比如 DNS 解析问题、网络质量问题、对端服务负载问题等,在客户端没有精良埋点的情况下,排查起来比较费劲,只能挨个方向尝试,这里送各人一个小工具,可以快速采样 DNS 解析延迟,快速确认是否是 DNS 解析问题。
使用演示
运行工具,传入域名,就开始探测,每秒探测一次,假如想控制频率,也可以传入第二个参数,比如 0.2 秒探测一次。- ulric@ulric-flashcat dns-lookup-latency % ./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
附
如上知识,盼望对你有资助。文末请允许我插播一个小广告。本人创业两年了,我们公司的业务如下,假如你有这方面的需求,欢迎联系我们做产品技能交流哈。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |