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

需求场景

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的更多相关文章

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

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

  2. 排障利器之远程调试与监控 --jmx & remote debug

    监控和调试功能是应用必备的属性之一,其手段也是多种多样. 一般地,我们可以通过:线上日志, zabbix, grafana, cat 等待系统做一问题留底,有问题及时报警,从而达到监控效果. 而对于应 ...

  3. 微信内置安卓x5浏览器请求超时自动重发问题处理小记

    X5内核  请求超时后会自动阻止请求返回并由代理服务器将原参数重新发送请求到服务层代码.但由于第一次请求已经请求到服务器,会导致出现重复下单.支付等重大问题. 该问题由于腾讯x5浏览器会自动阻止第一次 ...

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

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

  5. 接口测试框架实战(一) | Requests 与接口请求构造

    1080×388 33.4 KB Requests 是一个优雅而简单的 Python HTTP 库,其实 Python 内置了用于访问网络的资源模块,比如urllib,但是它远不如 Requests ...

  6. Postman - 功能强大的 API 接口请求调试和管理工具

    Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...

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

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

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

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

  9. 解决在vue中axios请求超时的问题

    查看更多精彩内容请访问我的新博客:https://www.cssge.com/ 自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,如果服务器或者网络不稳定掉包了, 你们 ...

  10. axios请求拦截及请求超时重新请求设置

    自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,需要解决问题: 1. 请求带token校验 2. post请求请求体处理 3. 响应未登录跳转登录页处理 4. 响应错 ...

随机推荐

  1. 102万行代码,1270 个问题,Flink 新版发布了什么?

    阿里妹导读: Apache Flink 是公认的新一代开源大数据计算引擎,可以支持流处理.批处理和机器学习等多种计算形态,也是Apache 软件基金会和 GitHub 社区最为活跃的项目之一. 201 ...

  2. 一文详解 Nacos 高可用特性

    简介: 我今天介绍的 Nacos 高可用,是 Nacos 为了提升系统稳定性而采取的一系列手段.Nacos 的高可用不仅仅存在于服务端,同时也存在于客户端,以及一些与可用性相关的功能特性中,这些点组装 ...

  3. Flink 在唯品会的实践

    简介: Flink 在唯品会的容器化实践应用以及产品化经验. 唯品会自 2017 年开始基于 k8s 深入打造高性能.稳定.可靠.易用的实时计算平台,支持唯品会内部业务在平时以及大促的平稳运行.现平台 ...

  4. [FAQ] html 的 select 标签 option 获取选中值的两种方式及区别

      Q: 对于一个 html 的 select 标签节点 class是module_select,获取选中值使用  $('.module_select').find('option:selected' ...

  5. [FE] Chrome Extension 五步曲

    1. Create the manifest.jsonOnly three fields is needed. { "name": "Getting Started Ex ...

  6. WPF 修复引用库报错 所使用的 PresentationFramework 6

    本文记录一个 WPF 构建的坑,这是 WPF 仓库的运维管理大意挖的坑.将会在大家使用低版本的 dotnet 6 如 6.0.1 版本时,引用其他人使用高 dotnet 6 版本,如 dotnet 6 ...

  7. dotnet 修复 Uno 中文乱码

    这是一个历史问题,在使用 Uno 展示中文的时候,如果设置 Uno 的底层使用 Skia 系进行渲染,那么将会因为中文字体问题,导致渲染出现乱码.此问题已被我修复,最佳解法是更新到最新版本 在上一篇博 ...

  8. 2019-10-31-win10-uwp-访问解决方案文件

    title author date CreateTime categories win10 uwp 访问解决方案文件 lindexi 2019-10-31 09:24:18 +0800 2018-2- ...

  9. k8s管理应用

  10. k8s修改iptables模式变成ipvs

    环境:https://www.cnblogs.com/yangmeichong/p/16477200.html 一.修改 iptables 变成 ipvs 模式 ipvs 采用的 hash 表,ipt ...