SRE 必备利器:域名 DNS 探测排障工具
问题背景
访问某个 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 实现的,代码如下:
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 咨询的,哈哈。另外,我给大家打包好了二进制文件,可以直接下载使用:
附
如上知识,希望对你有帮助。文末请允许我插播一个小广告。本人创业两年了,我们公司的业务如下,如果你有这方面的需求,欢迎联系我们做产品技术交流哈。
关于快猫星云
快猫星云是一家云原生智能运维科技公司,由知名开源项目“夜莺(Nightingale)”的核心开发团队组成,创始团队均来⾃阿⾥、百度、滴滴等互联⽹公司。夜莺是一款开源云原生监控工具,是中国计算机学会接受捐赠并托管的第一个开源项目,在GitHub上有超过8000颗星,迭代发布了超过100多个版本,上百位社区贡献者,是国内领先的开源可观测性解决方案。
快猫星云以开源夜莺为内核打造的“Flashcat平台”,是国内顶级互联⽹公司可观测性实践的产品化落地,致力于让可观测性技术更好的服务企业,保障服务稳定性。Flashcat 平台具有以下特点:
- 统一采集:采用插件化思路,内置集成上百种采集插件,服务器、网络设备、中间件、数据库、应用、业务,均可监控,开箱即用。
- 统一告警:支持几十种数据源对接,收集各类监控系统的告警事件,进行统一的告警收敛、降噪、排班、认领、升级、协同,大幅提升告警处理效率。
- 统一观测:将 Metrics、Logs、Traces、Events、Profiling 等多种可观测性数据融会贯通,并预置行业最佳实践,既提供全局业务视角、技术视角的驾驶舱,也提供层层下钻的故障定位能力,有效缩短故障发现和定位时间。
快猫星云,让可观测性数据更有价值!
https://flashcat.cloud/
SRE 必备利器:域名 DNS 探测排障工具的更多相关文章
- 系统之锹sysdig:Linux服务器监控和排障利器
当你需要追踪某个进程产生和接收的系统调用时,首先浮现在你脑海中的是什么?你可能会想到strace,那么你是对的.你会使用什么样的命令行工具来监控原始网络通信呢?如果你想到了tcpdump,你又作出了一 ...
- [转]Traceroute网络排障实用指南(2)
五.优先级与限速 5.1 Traceroute延时判断影响因素 Traceroute延时包括三点: 探测包到达一个特定路由器的时间 路由器生成IPMI TTL Exceed的时间 ICMP TTL E ...
- 记一次nginx -t非常慢的排障经历
在一次修改nginx配置时候,执行 case: #/usr/local/nginx/sbin/nginx -t 出现执行命令出现很久没返回结果,也没返回成功或是失败,就是一直卡住的状态,严重影响ngi ...
- 域名dns查询_查询域名dns ip地址
最近有部分用户反应管理的天气网站打开偏慢,决定从每一个可以出现的问题点查起!首先就是dns! 通过360dns监控对比发现,同一组域名,15tianqi.cn的dns响应时间比较长,在300-700间 ...
- 【思考】由安装zabbix至排障php一系列引发的思考
[思考]由安装zabbix至排障php一系列引发的思考 linux的知识点林立众多,很有可能你在排查一个故障的时候就得用到另一门技术的知识: 由于linux本身的应用依赖的库和其它环境环环相扣,但又没 ...
- 【排障】tomact未能看到网页
[排障]tomact未能看到网页 文:食梦貘 这是几个月前的事情了,那时候我在安装xwiki,需要用到tomcat,但是初次安装好时碰上过一个故障: 安装tomcat后,客户机用IE网址上输入:服务端 ...
- 【原】个人对win7开机黑屏只有鼠标排障总结
个人对win7开机黑屏只有鼠标排障总结 文:铁乐猫 第一种情况是explorer.exe进程丢失或损坏有关: 判断方法是按Ctrl+Alt+Del键能呼出任务管理器,结束explorer.exe进程, ...
- dump解析入门-用VS解析dump文件进行排障
突然有一天部署在服务器的一个应用挂掉了,没办法只能进入服务器打开 [事件查看器]查看下,好不容易找到了打开后一脸懵逼 事件查看器查到的内容根本对我们排障没有任何作用. 在这个时候如果有对应的dump文 ...
- 记一次KUBERNETES/DOCKER网络排障
https://coolshell.cn/articles/18654.html 总结在前面: 1.kill -9杀死docker进程,系统一定是要遍历所有的docker子进程来一个一个发退出信号的, ...
- [ovs][libvirt][virtio][qemu] vhost user client 排障
ovs-dpdk + qemu 使用vhostuserclient通信,连路不通,libvirt报错如下: -- ::: starting up libvirt version: , package: ...
随机推荐
- TiDB、OceanBase、PolarDB-X、CockroachDB二级索引写入性能测评
简介: 二级索引是关系型数据库相较于NoSQL数据库的一个关键差异.二级索引必须是强一致的,因此索引的写入需要与主键的写入放在一个事务当中,事务的性能是二级索引性能的基础.本次测试将重点关注不同分布式 ...
- dotnet 已知问题 使用 Directory.EnumerateXXX 方法枚举 C 盘根路径可能错误的问题
在 dotnet 里面,可以使用 Directory.EnumerateXXX 系列方法进行枚举文件或文件夹.在准备枚举驱动器根路径的文件或文件夹时,可能获取到错误的路径.错误的步骤在于传入的是如 C ...
- dotnet C# 获取当前设备可移动磁盘
本文告诉大家如何获取当前设备的可移动磁盘 在我的 WPF 应用里面,期望获取到 U 盘的所在盘进行一些有趣的逻辑.可以通过 DriveInfo 类的 GetDrives 获取当前所有的驱动器磁盘 再通 ...
- WPF 给类库设置设计时使用的资源字典
在开发 WPF 类库时,由于类库里面没有存在 App.xaml.cs 文件,而在对单个 XAML 进行开发时,设计器将会因为找不到资源文件的存在,而拿不到资源.本文告诉大家简单的方法,给设计器设置仅在 ...
- dotnet 在国产 UOS 系统利用 dotnet tool 工具做文件传输
我在一台设备上安装了 UOS 系统,但是我如何在我的主开发设备上和 UOS 系统传输文件?通过 dotnet tool 工具可以完成大部分的工作,当然,使用 dotnet tool 不仅做文件传输,还 ...
- kafka connect gui 可视化管理工具
kafka connect gui 可视化管理工具 官网地址:http://www.redisant.cn/ka 连接到 Kafka Connect 支持各种认证方式,支持 SSL/TLS 安全连接 ...
- NopCommerce支持多种类型的数据库
本文章的内容是根据本人阅读NopCommerce源码的理解,如有不对的地方请指正,谢谢. 阅读目录 1.类结构关系图 2.分析 3.NopCommerce应用 类结构关系图 分析 NopObjectC ...
- To Be Vegetable
求满足下述条件的 \(n\) 阶排列 \(a\) 的数目:对每个 \(i\),要么 \(a_i-i\le a_j-j+d\) 对所有 \(j\gt i\) 成立,要么 \(a_i\ge a_j\) 对 ...
- 【web安全】隐藏nginx头文件信息
摘要 Nginx作为开源web中间件,被广泛应用.因此源编译或者yum安装,都会带有其原有的nginx版本.很容易被针对,因此,通过修改nginx的源码.隐藏nginx版本和头部信息,保障nginx的 ...
- C#实现图片转Base64字符串.并支持markdown文件打开展示
引用1.0.3版本或以上的Wesky.Net.OpenTools 包 1.0.3 版本提供图片转Base64字符串方案,并提供根据后缀名自动识别Mime类型,合成标准URI 开源项目地址: Gitee ...