4.5.1 性能指标体系的范围与分层

性能指标体系需覆盖从硬件到应用的全链路,明确监控边界与数据来源,形成可观测性闭环。范围应包含主机、操作系统、网络、存储、应用与中间件,并与业务指标(QPS、成功率、SLA)关联,以支撑容量与体验评估。

文章图片

分层建议按“资源层—系统层—服务层—业务层”建立指标字典:
- 资源层:CPU使用率、内存可用、磁盘IOPS/延迟、网络带宽/丢包。
- 系统层:进程数、上下文切换、负载、调度延迟。
- 服务层:连接数、吞吐量、P99/P95延迟、错误率。
- 业务层:QPS、转化率、SLA违约率。
不同层级需规范指标口径、采样频率与标签体系(机房/集群/实例/服务/版本),区分实时监控与离线分析。

示例:安装与采集基础指标(资源层/系统层)#

安装常用性能工具(适用于 RHEL/CentOS 系):

sudo yum -y install sysstat iotop iftop
# 预期效果:提供 sar、iostat、pidstat、iostat 等命令

采集 CPU/内存/负载(5 秒采样,3 次):

vmstat 5 3
# 关注 r(就绪队列)、us/sys/wa、si/so(交换)

采集磁盘 I/O 关键指标:

iostat -x 5 3
# 关注 %util(繁忙度)、await(平均等待)、svctm(服务时间)

采集进程级指标(定位高消耗进程):

pidstat -u -r -d 5 3
# -u CPU, -r 内存, -d IO

采集网络连接与错误:

ss -s
# 关注 TCP 连接状态与重传
ip -s link
# 关注 RX/TX 错误与丢包

示例:服务层与业务层指标映射(Nginx)#

安装并启用 Nginx stub_status(示例路径):

sudo yum -y install nginx
cat >/etc/nginx/conf.d/status.conf <<'EOF'
server {
  listen 8080;
  location /nginx_status {
    stub_status;
    access_log off;
    allow 127.0.0.1;
    deny all;
  }
}
EOF
sudo nginx -t && sudo systemctl restart nginx
# 预期效果:curl http://127.0.0.1:8080/nginx_status 可看到连接数与请求统计

查看服务层指标:

curl -s http://127.0.0.1:8080/nginx_status
# Active connections / handled / requests / Reading / Writing / Waiting

示例:指标标签与分层口径记录(模板)#

cat > /opt/metrics/metric_dict.md <<'EOF'
# 指标字典(示例)
- 资源层.cpu.util: 百分比=1-空闲率;采样5s;标签: dc,cluster,host
- 系统层.ctx.switch: 每秒上下文切换;采样5s;标签: dc,host
- 服务层.nginx.active: 活跃连接数;采样10s;标签: dc,cluster,instance,version
- 业务层.qps: 每秒请求数;采样10s;标签: service,api,version
EOF

排错与常见问题#

  1. iostat 无数据
sudo systemctl status sysstat
sudo systemctl enable --now sysstat
# 预期:sysstat 服务启动后 iostat/sar 有持续数据
  1. stub_status 403
    检查允许的 IP 或访问路径:
grep -R "stub_status" -n /etc/nginx
# 确认 allow 127.0.0.1; deny all; 访问来源为本机
  1. 采样间隔过短导致系统负担
    将采样周期从 1s 调整为 5s 或 10s,或仅在压测时提高频率。

练习#

  1. 使用 vmstatpidstat 找出 CPU 占用最高的 3 个进程,并记录其 PID、CPU%、内存%。
  2. 打开 Nginx stub_status,使用 curl 连续采样 3 次,计算平均活跃连接数。
  3. iostat -x 判断磁盘是否存在 I/O 瓶颈,写出判定依据(如 %util>80%await 上升)。