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
排错与常见问题#
iostat无数据
sudo systemctl status sysstat
sudo systemctl enable --now sysstat
# 预期:sysstat 服务启动后 iostat/sar 有持续数据
stub_status403
检查允许的 IP 或访问路径:
grep -R "stub_status" -n /etc/nginx
# 确认 allow 127.0.0.1; deny all; 访问来源为本机
- 采样间隔过短导致系统负担
将采样周期从 1s 调整为 5s 或 10s,或仅在压测时提高频率。
练习#
- 使用
vmstat与pidstat找出 CPU 占用最高的 3 个进程,并记录其 PID、CPU%、内存%。 - 打开 Nginx
stub_status,使用curl连续采样 3 次,计算平均活跃连接数。 - 用
iostat -x判断磁盘是否存在 I/O 瓶颈,写出判定依据(如%util>80%且await上升)。