首页 > 其他分享 >SRE 必备利器:域名 DNS 探测排障工具

SRE 必备利器:域名 DNS 探测排障工具

时间:2024-04-12 16:56:13浏览次数:32  
标签:25 DNS SRE 排障 09 Apr ms time os

问题背景

访问某个 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

如上知识,希望对你有帮助。文末请允许我插播一个小广告。本人创业两年了,我们公司的业务如下,如果你有这方面的需求,欢迎联系我们做产品技术交流哈。

标签:25,DNS,SRE,排障,09,Apr,ms,time,os
From: https://www.cnblogs.com/ulricqin/p/18131644

相关文章

  • DNS解析过程
    勘误一些没有说浏览器缓存的检查浏览器缓存,有且没过期的话就用如果上面失败,就查本地的hosts文件中查找是否有这个网址的映射关系,如果有则直接调用这个IP的映射进行访问如果hosts文件(/etc/hosts、C:\Windows\System32\drivers\etc\hosts)中没有,则会去找当前网络中设置的本地D......
  • 什么是 DNS 记录?
    DNS记录是存储在DNS服务器上的文本指令。它们表明与一个域名相关的IP地址,也可以提供其他信息。DNS记录是计算机用语,指域名系统(DomainNameSystem,简称DNS)中的一条记录,这条记录存储于DNS服务器中。每一项记录包括了主机名、TTL值、类、类型、数据这几个字段。在Windows系统中,通过ns......
  • 检查邮件服务器的IP地址是否被列入RBL或DNSBL黑名单
    检查邮件服务器的IP地址是否被列入RBL或DNSBL黑名单输入你的发信IP地址,某个指向发信IP地址的域名,可以看到被哪些RBL列入了黑名单https://helohub.com/blacklisthttps://mxtoolbox.com/supertool如果发现自己邮件服务器的IP地址被列入了黑名单,首先要自查,是否有异常的流量,邮件队......
  • How to find which Azure Private DNS Zone is associated with VNet
    Herearesomecommonscenariosinquestion:AzFWgoesintofailedstateduetoaPrivateDNSzonelinkedwiththeVNETwhichcausesresolutionfailures.PrivateEndpointcreationwhereDNSzonefailstolinktothevnetasanotherzonewiththesamename......
  • docker-dnsmasq使用
    docker-dnsmasq支持通过web页面配置域名映射,镜像地址:https://hub.docker.com/r/jpillora/dnsmasq使用步骤如下:1、在Docker宿主上创建/opt/dnsmasq.conf配置文件touch/opt/dnsmasq.conf2、dockerrun启动容器dockerrun\--namednsmasq\-d\-p53:53/......
  • 常见的DNS安全攻击
    1.DNS劫持DNS劫持又称域名劫持,攻击者利用缺陷对用户的DNS进行篡改,将域名由正常IP指向攻击者控制的IP,从而导致访客被劫持到一个不可达或者假冒的网站,以此达到非法窃取用户信息或者破坏正常网络服务的目的。DNS劫持可用于DNS域欺骗(攻击者通常目的是为了显示不需要的广告以产生收入......
  • DNS 各记录类型说明及规则
    各记录类型使用目的记录类型使用目的A记录将域名指向一个IP地址。CNAME记录将域名指向另一个域名,再由另一个域名提供IP地址。MX记录设置邮箱,让邮箱能收到邮件。NS记录将子域名交给其他DNS服务商解析。AAAA记录将域名指向一个IPv6地址。SRV记录用来标识某台服......
  • ios 之 netty版本swiftNio(DNS 域名自解析)
    SwiftNio简介用于高性能协议服务器和客户端的事件驱动、无阻塞的网络应用程序框架。SwiftNIO是一个跨平台异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这就像Netty,但是为Swift写的。Xcode引入swiftNio    在实际写代码前,我......
  • 用Docker搭建DNS服务器
    摘要用bind9的映像搭建DNSDocker-compose文件说明如下:privileged是为了在webmin中更新软件;映射67的udp端口是为了在webmin中安装DHCP服务。version:'2'services:bind:image:sameersbn/bind:9.16.1-20200524container_name:dnsdns:127.......
  • #样题7 6.OpenVPN VPN 客户端只能与 InsideCli 客户端网段通信,允许访问 StorageSrv 主
    #样题76.OpenVPNVPN客户端只能与InsideCli客户端网段通信,允许访问StorageSrv主机上的SAMBA服务,允许访问AppSrv上的dns服务;VPN客户端可使用的地址范围是:172.16.0.100-172.16.0.120/24;在OutsideCli上创建连接服务“[email protected]”。......