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

sre,httpstat · 浏览次数 : 0

小编点评

**夜莺资深用户群的推荐工具** 大家好,今天我要向大家推荐一个非常好用的工具,适用于排查服务调用和 HTTP 接口超时的问题。这个工具类似于 curl 和 httpstat,能够帮助你找出是网络问题还是 B 服务本身的问题。 **工具介绍** 这个工具是用 Go 编写的,作者没有提供二进制包,因此需要自己编译。安装 Go 环境是必要的,接下来我会为大家演示如何在 Mac 上安装并使用这个工具。 **安装步骤** 首先,你需要从以下网址下载 Go 安装包:https://go.dev/dl/go1.22.2.darwin-arm64.tar.gz 然后,解压并将 go 目录添加到你的环境变量中: ```bash tar -zxf go1.22.2.darwin-arm64.tar.gz export GOROOT=/path/to/your/go安装在 /Users/ulric/works/tgzwget export GOPATH=/path/to/your/gopath export PATH=$PATH:$GOROOT/bin:$GOPATH/bin ``` 保存上述命令到一个文件中,例如 `~/.bash_profile` 或 `~/.zshrc`,以便每次打开终端时自动加载。 **使用示例** 安装完 Go 和 httpstat 后,你可以使用以下命令测试: ```bash httpstat -X POST -H "Content-Type: application/json" -d '{"service": "tomcat"}' 'https://httpbin.org/post?name=ulric&city=beijing' ``` 这个命令将执行POST请求,并显示各个阶段的耗时。例如: ``` 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 ``` 这个结果可以帮助你快速定位问题所在。 **总结** 这个工具是夜莺资深用户群的推荐,具有直观的界面和详细的耗时分析,帮助你快速排查服务调用和 HTTP 接口超时的问题。希望大家都能尝试使用这个工具,提高运维效率。

正文

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

需求场景

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] 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相似的内容:

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

夜莺资深用户群有人推荐的一个工具,看了一下真挺好的,也推荐给大家。 需求场景 A 服务调用 B 服务的 HTTP 接口,发现 B 服务返回超时,不确定是网络的问题还是 B 服务的问题,需要排查。 工具简介 就类似 curl,httpstat 也可以请求某个后端,而且可以把各个阶段的耗时都展示出来,包

[转帖]2022年 SRE、DevOps技能图谱

https://zhuanlan.zhihu.com/p/568752990 在过去一段时间,我面试过一些 DevOps 相关从业者,并且曾经收到过一些知乎小伙伴的提问,针对于 DevOps 以及相关从业者而言,我个人认为这块的要求是比较高的,因为它对 相关技能 以及 工作经验都有一定要求,并且在落

【转帖】SRE 高延迟问题的罪魁祸首 System.gc()

https://www.infoq.cn/article/lXTRgYb9ecVBu*72fT7O jstact -gccause pid 3000 30 01 案例一: 某日,支付平台的开发人员找到 SRE,需要 SRE 帮助解决一个棘手的问题。他们发现一个调用第三方支付接口的应用里面,偶尔出现请

SRE 的工作介绍

哈喽大家好,我是咸鱼 今天看到了一篇很不错的文章,作者是一名 SRE 工程师,在 Shopee 工作,base 新加坡 分享出来给大家看看 作者:卡瓦邦噶 原文链接:https://www.kawabangga.com/posts/4481 **原文如下:** 有很多人问过我想了解一下 SRE 这个

[转帖]关于SRE方法论的一些笔记

写在前面 阿里系列有一本《云原生操作系统Kubernetes》中作者在前言里讲到Google开源的Kubernetes和《SRE Google运维解密》这本书是剑法和气功的关系换句话讲Kubernetes是术,SRE Google运维解密是道作为云原生基础设施的Kubernetes小伙伴么应该多少有

[转帖]我所理解的SRE、PE和应用运维

https://www.cnblogs.com/zhangxinglong/p/14756366.html SRE这个概念我个人印象中应该14年下半年左右听到的,当时只知道是Google对运维岗位定义,巨牛逼的一个岗位,在网上查到SRE是叫网站稳定工程师,只要是保障稳定为主,其他就没有更深的意识了。

DevOps和SRE还没搞清楚,平台工程又出现了,它会取代DevOps吗?

DevOps、SRE和平台工程的概念在不同时期出现,并由不同的个人和组织开发。![image.png](https://img2023.cnblogs.com/blog/108082/202304/108082-20230422175057694-439319471.png) - DevOps作为一

云上的米开朗基罗:在不确定时代,寻找建筑般的确定性

摘要:SRE的核心文化,依旧需要各界携手去探索和发扬。但就像运维所需的确定性那样,SRE探索对每家企业的未来价值来说,也是充满确定性的。 本文分享自华为云社区《云上的米开朗基罗:在不确定时代,寻找建筑般的确定性》,作者: SRE确定性运维。 文艺复兴三杰之一的米开朗基罗,被称为“天才建筑师”。其实他

[转帖]构建安全可靠的系统:从SRE到SRS

https://www.jianshu.com/p/ba61020aeb1e 在看到《Google系统架构解密:构建安全可靠的系统》这本书之前,个人就有安全和可靠性不分家的观念。看到有同样想法的书籍,甚是欢喜。读完上一本书,终于可以读这一本了,接下来很长一段时间,看下Google是如何构建安全可靠系

「笔记」某移动SRE运维体系交流

痛点 传统竖井式IT架构(封闭、隔离、非标、难运维) X86 服务器硬件稳定性不足 开源软件可靠性不足,且不可控 出了故障,被动救火救不完 转型 由此催生了转型升级的需求: 运维智能(SRE)的转型 SRE运维模式 核心职责 保证: 业务连续性 应用连续性 平台连续性 职责分工 综合运维岗 7*24