问题背景

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

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

关于快猫星云

快猫星云是一家云原生智能运维科技公司,由知名开源项目“夜莺(Nightingale)”的核心开发团队组成,创始团队均来⾃阿⾥、百度、滴滴等互联⽹公司。夜莺是一款开源云原生监控工具,是中国计算机学会接受捐赠并托管的第一个开源项目,在GitHub上有超过8000颗星,迭代发布了超过100多个版本,上百位社区贡献者,是国内领先的开源可观测性解决方案。

快猫星云以开源夜莺为内核打造的“Flashcat平台”,是国内顶级互联⽹公司可观测性实践的产品化落地,致力于让可观测性技术更好的服务企业,保障服务稳定性。Flashcat 平台具有以下特点:

  • 统一采集:采用插件化思路,内置集成上百种采集插件,服务器、网络设备、中间件、数据库、应用、业务,均可监控,开箱即用。
  • 统一告警:支持几十种数据源对接,收集各类监控系统的告警事件,进行统一的告警收敛、降噪、排班、认领、升级、协同,大幅提升告警处理效率。
  • 统一观测:将 Metrics、Logs、Traces、Events、Profiling 等多种可观测性数据融会贯通,并预置行业最佳实践,既提供全局业务视角、技术视角的驾驶舱,也提供层层下钻的故障定位能力,有效缩短故障发现和定位时间。

快猫星云,让可观测性数据更有价值!
https://flashcat.cloud/

SRE 必备利器:域名 DNS 探测排障工具的更多相关文章

  1. 系统之锹sysdig:Linux服务器监控和排障利器

    当你需要追踪某个进程产生和接收的系统调用时,首先浮现在你脑海中的是什么?你可能会想到strace,那么你是对的.你会使用什么样的命令行工具来监控原始网络通信呢?如果你想到了tcpdump,你又作出了一 ...

  2. [转]Traceroute网络排障实用指南(2)

    五.优先级与限速 5.1 Traceroute延时判断影响因素 Traceroute延时包括三点: 探测包到达一个特定路由器的时间 路由器生成IPMI TTL Exceed的时间 ICMP TTL E ...

  3. 记一次nginx -t非常慢的排障经历

    在一次修改nginx配置时候,执行 case: #/usr/local/nginx/sbin/nginx -t 出现执行命令出现很久没返回结果,也没返回成功或是失败,就是一直卡住的状态,严重影响ngi ...

  4. 域名dns查询_查询域名dns ip地址

    最近有部分用户反应管理的天气网站打开偏慢,决定从每一个可以出现的问题点查起!首先就是dns! 通过360dns监控对比发现,同一组域名,15tianqi.cn的dns响应时间比较长,在300-700间 ...

  5. 【思考】由安装zabbix至排障php一系列引发的思考

    [思考]由安装zabbix至排障php一系列引发的思考 linux的知识点林立众多,很有可能你在排查一个故障的时候就得用到另一门技术的知识: 由于linux本身的应用依赖的库和其它环境环环相扣,但又没 ...

  6. 【排障】tomact未能看到网页

    [排障]tomact未能看到网页 文:食梦貘 这是几个月前的事情了,那时候我在安装xwiki,需要用到tomcat,但是初次安装好时碰上过一个故障: 安装tomcat后,客户机用IE网址上输入:服务端 ...

  7. 【原】个人对win7开机黑屏只有鼠标排障总结

    个人对win7开机黑屏只有鼠标排障总结 文:铁乐猫 第一种情况是explorer.exe进程丢失或损坏有关: 判断方法是按Ctrl+Alt+Del键能呼出任务管理器,结束explorer.exe进程, ...

  8. dump解析入门-用VS解析dump文件进行排障

    突然有一天部署在服务器的一个应用挂掉了,没办法只能进入服务器打开 [事件查看器]查看下,好不容易找到了打开后一脸懵逼 事件查看器查到的内容根本对我们排障没有任何作用. 在这个时候如果有对应的dump文 ...

  9. 记一次KUBERNETES/DOCKER网络排障

    https://coolshell.cn/articles/18654.html 总结在前面: 1.kill -9杀死docker进程,系统一定是要遍历所有的docker子进程来一个一个发退出信号的, ...

  10. [ovs][libvirt][virtio][qemu] vhost user client 排障

    ovs-dpdk + qemu 使用vhostuserclient通信,连路不通,libvirt报错如下: -- ::: starting up libvirt version: , package: ...

随机推荐

  1. 力扣1668(java&python)-最大重复子字符串(简单)

    题目: 给你一个字符串 sequence ,如果字符串 word 连续重复 k 次形成的字符串是 sequence 的一个子字符串,那么单词 word 的 重复值为 k .单词 word 的 最大重复 ...

  2. 力扣5(java)-最长回文串(中等)

    题目: 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad"输出:"bab"解释:"aba" 同样是符 ...

  3. [FAQ] Win10 键盘输入的数字英文字体变宽, 胖英文, 如何处理

    输入法 点击右键,找到设置,点击进入. 开启 "全/半角切换" 快捷键为 "Shift + 空格",随后可以使用这个快捷键进行切换正常. Link:https: ...

  4. 2019-10-31-WPF-设置纯软件渲染

    title author date CreateTime categories WPF 设置纯软件渲染 lindexi 2019-10-31 8:59:2 +0800 2018-04-20 16:36 ...

  5. pnpm的基本原理及快速使用

    基本原理 前置知识:软件链接与硬链接 软链接(符号链接Symbolic link):是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用.在window快捷方式上和其 ...

  6. 理解FPGA内部的同步信号、异步信号和亚稳态

    FPGA(Field-Programmable Gate Array),即现场可编程门阵列.主要是利用内部的可编程逻辑实现设计者想要的功能.FPGA属于数字逻辑芯片,其中也有可能会集成一部分模拟电路的 ...

  7. 一键启动的AI离线知识库,无需复杂环境依赖,小白都能上手了

    简介 在人工智能技术飞速发展的今天,我们经常面临一个挑战:如何快速.简便地部署和使用AI技术?AntSK项目,一个开源的AI知识库和智能体,就是为了解决这一问题而诞生的.现在,我们自豪地宣布,AntS ...

  8. 第一讲 Cadence-于真博士课程简介

    第一讲 Cadence-于真博士课程简介 以工程化的思想来学习本课程,比较有效,从一个DSP开发板设计为例开始,做出PCB板,顺带学会Cadence软件操作,而不是仅仅学习软件. 前期准备工作,阅读配 ...

  9. OLAP开源引擎对比之历史概述

    前言 OLAP概念诞生于1993年,工具则出现在更早以前,有史可查的第一款OLAP工具是1975年问世的Express,后来走进千家万户的Excel也可归为此类,所以虽然很多数据人可能没听过OLAP, ...

  10. 使用SQL Server语句统计某年龄段人数占总人数的比例(多层查询语句嵌套-比例分析)

    需求:需统计出某个集合内,某个段所占的比例,涉及SELECT查询语句的嵌套,如有疑问可留言. 如下: --按性别进行年度挂号年龄段分析--男SELECT 年龄段,SUM(人数) 数量,cast(cas ...