SRE 排障利器,接口请求超时试试 httpstat
夜莺资深用户群有人推荐的一个工具,看了一下真挺好的,也推荐给大家。
需求场景
A 服务调用 B 服务的 HTTP 接口,发现 B 服务返回超时,不确定是网络的问题还是 B 服务的问题,需要排查。
工具简介
就类似 curl,httpstat 也可以请求某个后端,而且可以把各个阶段的耗时都展示出来,包括 DNS 解析、TCP 连接、TLS 握手、Server 处理并等待响应、完成最终传输等,非常直观。上图:

看着不错吧,咱们一起测试一下。这个工具是 go 写的,作者没有提供二进制包,所以需要自己编译。
安装 Go 环境
自己编辑就需要有 Go 环境,我这里给大家简单演示一下。我的电脑是 Mac,M1 芯片,首先下载 go 安装包(https://go.dev/dl/):https://go.dev/dl/go1.22.2.darwin-arm64.tar.gz。一般使用 tar.gz 的文件就好,不用 pkg。
cd /Users/ulric/works/tgz
wget https://go.dev/dl/go1.22.2.darwin-arm64.tar.gz
tar -zxf go1.22.2.darwin-arm64.tar.gz
操作如上,/Users/ulric/works/tgz/go 这个目录就是 go 的安装目录,然后配置环境变量:
export GOROOT=/Users/ulric/works/tgz/go
export GOPATH=/Users/ulric/works/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
GOROOT 是 go 的安装目录,GOPATH 是 go 的工作目录,PATH 是环境变量,这样配置之后,就可以使用 go 命令了。上面的几行命令可以保存在 ~/.bash_profile 或者 ~/.zshrc 里,这样每次打开终端都会自动加载。
验证 go 环境是否正常安装:
% go version
go version go1.22.2 darwin/arm64
安装 httpstat
有了 go 环境了,安装 httpstat 就很简单了:
ulric@ulric-flashcat ~ % go install github.com/davecheney/httpstat@latest
go: downloading github.com/davecheney/httpstat v1.1.0
go: downloading golang.org/x/sys v0.0.0-20201223074533-0d417f636930
测试 httpstat
安装完成之后,就可以使用了,我们看看 httpstat 有哪些参数可用:
ulric@ulric-flashcat ~ % httpstat --help
Usage: httpstat [OPTIONS] URL
OPTIONS:
-4 resolve IPv4 addresses only
-6 resolve IPv6 addresses only
-E string
client cert file for tls config
-H value
set HTTP header; repeatable: -H 'Accept: ...' -H 'Range: ...'
-I don't read body of request
-L follow 30x redirects
-O save body as remote filename
-X string
HTTP method to use (default "GET")
-d string
the body of a POST or PUT request; from file use @filename
-k allow insecure SSL connections
-o string
output file for body
-v print version number
ENVIRONMENT:
HTTP_PROXY proxy for HTTP requests; complete URL or HOST[:PORT]
used for HTTPS requests if HTTPS_PROXY undefined
HTTPS_PROXY proxy for HTTPS requests; complete URL or HOST[:PORT]
NO_PROXY comma-separated list of hosts to exclude from proxy
很多参数和 curl 都很像。比如我用 curl 测试一个请求:
ulric@ulric-flashcat ~ % curl -X POST -H "Content-Type: application/json" -d '{"service": "tomcat"}' 'https://httpbin.org/post?name=ulric&city=beijing'
{
"args": {
"city": "beijing",
"name": "ulric"
},
"data": "{\"service\": \"tomcat\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "21",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/8.4.0",
"X-Amzn-Trace-Id": "Root=1-6655a6c4-4522374c5b8d68143d638049"
},
"json": {
"service": "tomcat"
},
"origin": "123.113.255.104",
"url": "https://httpbin.org/post?name=ulric&city=beijing"
}
把 curl 换成 httpstat,请求效果如下:
ulric@ulric-flashcat ~ % httpstat -X POST -H "Content-Type: application/json" -d '{"service": "tomcat"}' 'https://httpbin.org/post?name=ulric&city=beijing'
Connected to 34.198.16.126:443
HTTP/2.0 200 OK
Server: gunicorn/19.9.0
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Content-Length: 529
Content-Type: application/json
Date: Tue, 28 May 2024 09:41:44 GMT
Body discarded
DNS Lookup TCP Connection TLS Handshake Server Processing Content Transfer
[ 11ms | 217ms | 446ms | 570ms | 0ms ]
| | | | |
namelookup:11ms | | | |
connect:229ms | | |
pretransfer:678ms | |
starttransfer:1248ms |
total:1248ms
可以看到,httpstat 把请求的各个阶段的耗时都展示出来了,非常直观。
本文作者:秦晓辉,快猫星云联合创始人,开源监控产品 Open-Falcon、Nightingale 创始人,极客时间《运维监控系统实战笔记》作者
SRE 排障利器,接口请求超时试试 httpstat的更多相关文章
- 系统之锹sysdig:Linux服务器监控和排障利器
当你需要追踪某个进程产生和接收的系统调用时,首先浮现在你脑海中的是什么?你可能会想到strace,那么你是对的.你会使用什么样的命令行工具来监控原始网络通信呢?如果你想到了tcpdump,你又作出了一 ...
- 排障利器之远程调试与监控 --jmx & remote debug
监控和调试功能是应用必备的属性之一,其手段也是多种多样. 一般地,我们可以通过:线上日志, zabbix, grafana, cat 等待系统做一问题留底,有问题及时报警,从而达到监控效果. 而对于应 ...
- 微信内置安卓x5浏览器请求超时自动重发问题处理小记
X5内核 请求超时后会自动阻止请求返回并由代理服务器将原参数重新发送请求到服务层代码.但由于第一次请求已经请求到服务器,会导致出现重复下单.支付等重大问题. 该问题由于腾讯x5浏览器会自动阻止第一次 ...
- [转]Traceroute网络排障实用指南(2)
五.优先级与限速 5.1 Traceroute延时判断影响因素 Traceroute延时包括三点: 探测包到达一个特定路由器的时间 路由器生成IPMI TTL Exceed的时间 ICMP TTL E ...
- 接口测试框架实战(一) | Requests 与接口请求构造
1080×388 33.4 KB Requests 是一个优雅而简单的 Python HTTP 库,其实 Python 内置了用于访问网络的资源模块,比如urllib,但是它远不如 Requests ...
- Postman - 功能强大的 API 接口请求调试和管理工具
Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...
- 【思考】由安装zabbix至排障php一系列引发的思考
[思考]由安装zabbix至排障php一系列引发的思考 linux的知识点林立众多,很有可能你在排查一个故障的时候就得用到另一门技术的知识: 由于linux本身的应用依赖的库和其它环境环环相扣,但又没 ...
- 【原】个人对win7开机黑屏只有鼠标排障总结
个人对win7开机黑屏只有鼠标排障总结 文:铁乐猫 第一种情况是explorer.exe进程丢失或损坏有关: 判断方法是按Ctrl+Alt+Del键能呼出任务管理器,结束explorer.exe进程, ...
- 解决在vue中axios请求超时的问题
查看更多精彩内容请访问我的新博客:https://www.cssge.com/ 自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,如果服务器或者网络不稳定掉包了, 你们 ...
- axios请求拦截及请求超时重新请求设置
自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,需要解决问题: 1. 请求带token校验 2. post请求请求体处理 3. 响应未登录跳转登录页处理 4. 响应错 ...
随机推荐
- 力扣220(java)-存在重复元素 III(困难)
题目: 给你一个整数数组 nums 和两个整数 k 和 t .请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i ...
- 力扣326(java)-3的幂(简单)
题目: 给定一个整数,写一个函数来判断它是否是 3 的幂次方.如果是,返回 true :否则,返回 false . 整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x 示例 1: 输 ...
- 新型DDoS来袭 | 基于STUN协议的DDoS反射攻击分析
简介: 作为新型反射类型,目前仍存绕过防御可能性. 阿里云安全近期发现利用STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)服务发起的DDoS反 ...
- 他又来了,.net开源智能家居之小米米家的c#原生sdk【MiHome.Net】1.0.0发布,快来打造你的私人智能家居吧
背景介绍 hi 大家好,我是三合,作为一个非著名懒人,智能家居简直刚需,在上一篇文章他来了他来了,.net开源智能家居之苹果HomeKit的c#原生sdk[Homekit.Net]1.0.0发布,快来 ...
- async 与 promise 的区别
async函数会引式返回一个promise,而promise的resolve值就是函数return的值 使用async和await明显节约了不少代码,不需要.then,不需要写匿名函数处理promis ...
- JSON字符串数据转换指定实体对象数据
一.引入需要的maven依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId> ...
- Cesium的HeadingPitchRange 用法
这个有别于headingpitchroll, headingpitchroll是用在orientation属性上的(比如相机的setView,flyTo,以及entities.add中) Headin ...
- java stream数据分组 stream().collect(groupingBy
List<Map<String, Object>> foreList = forecastDataDao.getcityforeresults(param); Map<S ...
- ctfshow_web_1(困难题)
CTFshow web1(困难题) 根据前面做题经验,看见登录框基本都是跑一下爆破,弱口令等等 这里用 dirmap 目录爆破爆出来有一个 www.zip 把他下载下来 看了 login.php 和 ...
- C#.Net筑基-模式匹配汇总
01.模式匹配概述 从C#7开始支持的 模式匹配 语法(糖,挺甜),可非常灵活的对数据进行条件匹配和提取,经过多个版本的完善,已经非常强大了. C# 支持多种模式,包括声明.类型.常量.关系.属性.列 ...