news 2026/10/3 12:24:31

Hey+cron定时巡检:让在线服务的性能巡逻自动化运行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hey+cron定时巡检:让在线服务的性能巡逻自动化运行

Hey+cron定时巡检:让在线服务的性能巡逻自动化运行

【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey

hey 是一款轻量级HTTP 负载生成器(HTTP load generator),定位是 ApacheBench(ab)的替代工具。它用一行命令就能向 Web 服务施压并输出完整的性能统计(平均/最快/最慢响应、RPS、DNS 与连接耗时、状态码分布)。把它和 Linux 的cron 定时任务组合起来,就能实现零成本的"性能巡逻":定时、定量、自动记录,让在线服务的性能劣化在用户抱怨之前就暴露出来。🛡️

为什么选 hey 做性能巡检

对新手来说,hey 的门槛低到几乎没有:

  • 单二进制、跨平台:Linux / macOS / Windows 都有构建产物,跨平台构建逻辑见 Makefile,容器化部署见 Dockerfile
  • 一条命令即出报表:默认发送 200 次请求、50 并发(默认值定义在 hey.go)
  • 统计开箱即用:平均响应时间、RPS、DNS/连接/请求/响应各阶段耗时、状态码分布,统计模型实现在 requester/report.go,终端渲染在 requester/print.go
  • 能力不缩水:支持 POST 等任意方法、自定义 Header、Basic 认证、HTTP/2、QPS 限速,参数说明见 README.md

对"巡检"这种周期性、轻负载的场景,它比重量级压测框架更合适:不装依赖、不占内存、输出可被csv落盘。

一键安装步骤

macOS(Homebrew 用户):

brew install hey

任意平台(从源码构建):

git clone https://gitcode.com/GitHub_Trending/he/hey cd hey go build -o hey .

构建后把hey放到PATH目录(如/usr/local/bin)即可,cron 里调用更方便。

三条命令上手巡检

参数文档可直接查看 hey.go 内置的 usage 文本,巡检最常用的只有三个参数:

# ① 对健康检查端点压 30 秒(巡检主力命令) hey -z 30s https://your-service.com/health # ② 控制压力:10 并发、200 次请求 hey -n 200 -c 10 -z 30s https://your-service.com/ # ③ 输出 CSV 落盘,方便趋势分析 hey -z 30s -o csv https://your-service.com/ > result.csv
  • -z:持续时长(如10s、3m),到点自动停止,巡检首选
  • -c:并发数,巡检场景建议10~20,别把生产环境压崩
  • -q:每个 worker 的 QPS 限速,对敏感接口加一层保险
  • -t:单请求超时秒数(默认 20),防止慢请求拖垮巡检
  • -m POST -d "...":巡检写接口时使用;-a user:pass处理 Basic 认证

编写巡检脚本:把结果存成证据链

把上面命令包一层脚本,让每次巡检的"证据"都有时间戳:

#!/bin/bash # /opt/hey-patrol/patrol.sh mkdir -p /var/log/hey ts=$(date +%F_%H%M) hey -z 30s -o csv https://your-service.com/health > /var/log/hey/hey_$ts.csv echo "$ts $(tail -n +2 /var/log/hey/hey_$ts.csv | head -n 1)" >> /var/log/hey/summary.log

💡 提示:CSV 中每一行是一次请求的指标,配合表格软件或监控系统导入后,就能画出响应时间趋势图,性能回退一目了然。

日志建议用logrotate或定期任务保留 30 天,避免磁盘被巡检数据占满。

cron 定时任务配置:最快配置方法

执行crontab -e,按巡检粒度加入以下任意一条:

*/5 * * * * /opt/hey-patrol/patrol.sh # 每 5 分钟巡逻一次(高频哨兵) 0 * * * * /opt/hey-patrol/patrol.sh # 每小时巡检 0 8 * * * /opt/hey-patrol/patrol.sh # 每天 8 点晨检

配置要点:

  • 5 个字段依次为分、时、日、月、星期,新手从*/5高频档起步,确认无告警后可降频
  • 脚本里一律使用绝对路径(cron 环境下PATH很精简)
  • 巡检窗口避开业务高峰,或对非核心端点(/health)巡检,降低误伤风险 ⏰

巡检数据怎么用

每次执行后,hey 会打印一份人类可读的摘要(渲染逻辑见 requester/print.go,请求执行核心见 requester/requester.go):

指标巡检时关注什么
Average response time与历史基线对比,明显抬升即劣化
Slowest request毛刺探测,超过正常值 2~3 倍要警惕
RPS是否显著低于预期并发,可能被限流或阻塞
状态码分布出现 5xx/超时即视为故障信号
错误分布连接失败、DNS 失败等网络层问题

建议给每个端点设两条红线:错误率 > 1%或最慢请求超基线 3 倍,触发时推送告警,巡逻才算闭环。✅

巡检最佳实践清单

  1. 定基线:先手动跑几次记录正常值,巡检告警才有参照物
  2. 控压力:-c 10、-q 5起步,生产环境宁小勿大
  3. 盯关键路径:登录、下单、核心 API 各配一条巡检
  4. 留痕迹:CSV 落盘 + 摘要日志,是事后复盘的第一手资料
  5. 限超时:始终带上-t,避免一次慢响应拖慢整个巡检周期

附:项目文件速查

文件说明
hey.go主程序:参数定义、用法说明、执行入口
requester/requester.go请求发送与并发控制核心
requester/report.go统计聚合:平均/最快/最慢、RPS、错误分布
requester/print.go终端报表渲染(含延迟分布图)
Makefile三平台交叉构建脚本
go.mod依赖与模块定义
README.md完整参数文档与示例

hey 本体只有 200 多行主代码,配合 cron 这个系统自带调度器,你得到的是一条零依赖、可审计、随时可回滚的自动化性能巡逻流水线——从今天起,让服务的质量问题在凌晨 3 点被发现,而不是在客户群里被发现。

【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 12:22:38

PDU级电量采集与±1%精度:数据中心PUE测算避坑指南

聊机房PUE,免不了被追问一句:IT侧电量从哪来?如果答案是“看服务器BMC功率”或者“用列头柜电量平均分摊”,这一轮的评审基本就过不去了。我这些年经手过的能效项目中,凡是PUE要写进对外报告或者参与行业评级的&#x…

作者头像 李华