首页 > 其他分享 >SRE 排障利器,接口请求超时试试 httpstat

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

时间:2024-06-11 10:10:48浏览次数:25  
标签:HTTP SRE 排障 httpstat Content https go ulric

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

需求场景

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 创始人,极客时间《运维监控系统实战笔记》作者

标签:HTTP,SRE,排障,httpstat,Content,https,go,ulric
From: https://www.cnblogs.com/ulricqin/p/18241603

相关文章

  • 【备忘录】手动重新设置windowsRE分区,命令行方式
    手动将RE分区大小扩大500MB以管理员身份(cmd)打开命令提示符窗口。若要检查WinRE状态,请运行 reagentc/info。如果安装了WinRE,则应有一个“WindowsRE位置”,其中包含WinRE目录的路径。例如,“WindowsRE位置:[file://%3f/GLOBALROOT/device/harddisk0/partition4......
  • CSRedis用于Redis哨兵模式,NetCore
    十年河东,十年河西,莫欺少年穷学无止境,精益求精上一节通过两台windowsServer服务器部署了Redis的哨兵模式,详情参考:两台windowserver服务器配置Redis哨兵集群----一主二从redis通过主从复制来实现高可用,但是发生故障时需要人工进行主从切换,效率低下。哨兵机制实现了redis主从的自......
  • datax修改 hdfsReader源码实现空文件及目录为空时,程序退出不抛出异常
    最近在使用datax_202309时,有任务需要将hive的数据按天同步到mysql,由于同步的表由业务生成,故可能有的表当天是没有数据产生,就会抛出出现下面的错误:问题:datax读取hive分区表时,datax-hdfsReader读取空目录报错问题描述:com.alibaba.datax.common.exception.DataXException:Code:[......
  • hdfsreader
    hdfsreader来源:github-datax-hdfsreader1快速介绍HdfsReader提供了读取分布式文件系统数据存储的能力。在底层实现上,HdfsReader获取分布式文件系统上文件的数据,并转换为DataX传输协议传递给Writer。目前HdfsReader支持的文件格式有textfile(text)、orcfile(orc)、rcfile(rc)、sequ......
  • Addressrec:地址解析库
    在我们的日常工作中,特别是数据分析、地理信息系统(GIS)开发,或者在线零售等行业中,经常会遇到处理包含地址信息的文本数据这个棘手的任务。面对大量规格不统一,格式不一致的非结构化地址数据,想要从中快速地提取分级地址、联系人、电话等,简直就是不可能完成的任务。即使费九牛二虎......
  • httpstat:测量HTTP请求的性能和状态信息
    Github地址:https://github.com/reorx/httpstatHTTP(HypertextTransferProtocol)是互联网上应用最广泛的协议之一,用于在客户端和服务器之间传输数据。在开发和维护Web应用程序时,了解HTTP请求和响应的性能和状态信息非常重要。Pythonhttpstat是一个强大的命令行工具,用于深入了解H......
  • 五一假期学习总结:从DevOps到SRE
    大家好,我是Edison。五一假期,没出远门,带娃露营玩水玩沙骑平衡车,累的不亦乐乎。同时,也刷了一门极客时间的课程《SRE实战总结》,给我带来了一些新的认知,我将这些认知整理了以下,特此总结分享与你,强烈建议已经实践了DevOps的童鞋了解一下SRE。什么是SRE?SRE全称SiteReliabilityEngi......
  • 什么是 SRE(站点可靠性工程)
    what's sitereliabilityengineer站点可靠性工程(sitereliabilityengineerSRE)是IT运维的软件工程方案。SRE团队使用软件作为工具,来管理系统、解决问题并实现运维任务自动化。SRE执行的任务以前通常由运维团队手动执行,或者交给使用软件和自动化来解决问题和管理生产系统......
  • 写了一个 SRE 调试工具,类似一个小木马
    远程操作机器有时会比较麻烦,我写了一个工具,主要功能:1.远程执行命令2.上传下载文件。是一个WebServer,通过HTTP请求来操作机器,类似一个小木马。当然,因为是一个WebServer,所以也提供了打印HTTP请求的能力,方便调试Webhook场景。下面给大家演示一下。安装工具代码放到Gith......
  • SRE 必备利器:域名 DNS 探测排障工具
    问题背景访问某个HTTP域名接口,偶发性超时,原因可能多种多样,比如DNS解析问题、网络质量问题、对端服务负载问题等,在客户端没有良好埋点的情况下,排查起来比较费劲,只能挨个方向尝试,这里送大家一个小工具,可以快速采样DNS解析延迟,快速确认是否是DNS解析问题。使用演示运行工......