SRE 排障利器,接口请求超时试试 httpstat

news/2024/10/6 6:40:41

夜莺资深用户群有人推荐的一个工具,看了一下真挺好的,也推荐给大家。

需求场景

A 服务调用 B 服务的 HTTP 接口,发现 B 服务返回超时,不确定是网络的问题还是 B 服务的问题,需要排查。

工具简介

就类似 curl,httpstat 也可以请求某个后端,而且可以把各个阶段的耗时都展示出来,包括 DNS 解析、TCP 连接、TLS 握手、Server 处理并等待响应、完成最终传输等,非常直观。上图:

 

 

看着不错吧,咱们一起测试一下。这个工具是 go 写的,作者没有提供二进制包,所以需要自己编译。

安装 Go 环境

自己编辑就需要有 Go 环境,我这里给大家简单演示一下。我的电脑是 Mac,M1 芯片,首先下载 go 安装包():。一般使用 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] URLOPTIONS:-4	resolve IPv4 addresses only-6	resolve IPv6 addresses only-E stringclient cert file for tls config-H valueset 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 stringHTTP method to use (default "GET")-d stringthe body of a POST or PUT request; from file use @filename-k	allow insecure SSL connections-o stringoutput file for body-v	print version numberENVIRONMENT:HTTP_PROXY    proxy for HTTP requests; complete URL or HOST[:PORT]used for HTTPS requests if HTTPS_PROXY undefinedHTTPS_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:443HTTP/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 GMTBody discardedDNS 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 创始人,极客时间《运维监控系统实战笔记》作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/43075.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

文件传输系统主要用于哪些场景?要如何选型?

文件传输系统是一种用于在不同设备、网络或地理位置之间传输文件的产品解决方案,在各行各业中的应用还是很广泛的。文件传输系统可以应用于多种场景,主要包括: 1、企业内部文件共享:在公司内部不同部门或团队之间共享文件,如项目文档、报告、设计图纸等。 2、远程办公:支…

java小记-三元运算符

①三元运算符: 之前之后:格式:范例:

CentOS7操作-配置镜像源

CentOS7操作-配置镜像源 在公司项目的后续开发中,需要使用CentOS7进行项目的开发环境搭建,所以在这里记录一下CentOS7配置镜像源的方法。 设置阿里镜像源 首先ping一下阿里源地址,如果可以的话再进行配置 ping mirrors.aliyun.com可以看到,地址是连通的。 手动配置阿里云源…

你的智能汽车正在窥视你!

你的数据,价值千万2021年8月,蔚来部分用户数据被窃取,并遭到勒索225万美元等额比特币; 2022年5月,通用汽车表示部分在线客户账户出现异常登录; 2023年5月,丰田云服务导致215万日本用户车辆数据承担泄露风险; 2024年4月,高合汽车因车内摄像头拍摄的不雅影像泄露而备受关…

腾讯云 BI 数据分析与可视化的快速入门指南

通过本文的介绍,我们了解了腾讯云 BI 这款商业智能解决方案的基本功能和应用场景。从创建项目、连接数据源、数据表建模到页面搭建和推送功能的设置,我们通过一个互联网运营看板的案例,展示了如何快速入门并利用腾讯云 BI 进行数据分析和可视化。通过简单的数据编辑,我们可…

STM32 + RT-Thread + LVGL

一、基本信息MCU:STM32F103ZET6 RT-Thread:5.0.2 LVGL:8.3.11 LCD:ST7735s 编译环境:RTThread studio二、LVGL 移植要求16、32或64位微控制器或处理器 建议速度大于16 MHz 闪存/ROM: > 64 kB(建议180 kB) 内存:8 kB(建议24 kB) 1个帧缓冲器:在MCU、外部RAM或显示控制器…

分布式链路跟踪 Jaeger

分布式应用环境下,事务的完成需要由多个不同的组件协调完成,调用链路比较复杂,问题的定位也不再像原来单体应用这么复杂。 我们采用分布式应用链路跟踪工具完成对事务的跟踪和问题的定位。 Jaeger,jaeger在BIG-IP Next的AS3 实现中有用到。 本质上讲,像Jaeger这样的跟踪工…

LLM大模型: llama源码要点解读(一)

transformer火了之后,基于transformer架构的llama也火了,可能的原因:来自meta,一线互联网大厂,质量有保证;自称70b参数的表现比chatGPT3还好(Llama 2:Open Foundation and Fine-Tuned Chat Models)!可能会成为大模型界的Android:各种基于llama的微调和应用会越来越多…