7.10.6 监控告警与容量规划
监控告警与容量规划#
本节围绕 Nginx Web 服务的高可用场景,建立“指标+日志+追踪”的闭环监控体系,并结合容量规划与告警策略形成可执行的运维流程。
原理草图:指标/日志/告警闭环
1)监控指标分层(示例)
- 基础资源层:CPU/负载、内存占用、磁盘IOPS、网络吞吐。
- Nginx服务层:Active connections、RPS、5xx错误率、Upstream响应时间、缓存命中率。
- 业务体验层:P99/P95 延迟、成功率、关键接口吞吐。
关键命令示例:快速查看资源与连接
# CPU/负载
uptime
# 内存
free -h
# 网络连接数(与worker_connections相关)
ss -s
# 查看Nginx活动连接(依赖stub_status)
curl -s http://127.0.0.1/nginx_status
2)安装与接入示例:Nginx stub_status + Prometheus(单机)
2.1 开启 Nginx stub_status
# /etc/nginx/conf.d/status.conf
server {
listen 127.0.0.1:80;
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
}
nginx -t && systemctl reload nginx
curl -s http://127.0.0.1/nginx_status
# 预期输出包含:Active connections、Reading/Writing/Waiting
2.2 安装 nginx-prometheus-exporter
# 以二进制为例(根据系统版本选择)
useradd -r -s /sbin/nologin nginx_exp
wget -O /usr/local/bin/nginx-prometheus-exporter \
https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.11.0/nginx-prometheus-exporter
chmod +x /usr/local/bin/nginx-prometheus-exporter
# 启动(指向stub_status)
/usr/local/bin/nginx-prometheus-exporter \
-nginx.scrape-uri http://127.0.0.1/nginx_status \
-web.listen-address=:9113
2.3 Prometheus 采集配置
# /etc/prometheus/prometheus.yml
scrape_configs:
- job_name: 'nginx'
static_configs:
- targets: ['127.0.0.1:9113']
systemctl restart prometheus
# 在Prometheus中查询示例:nginx_connections_active
3)告警规则与分级策略(示例)
Prometheus 告警规则:5xx错误率 + P99延迟
# /etc/prometheus/rules/nginx.rules.yml
groups:
- name: nginx_rules
rules:
- alert: NginxHigh5xxRate
expr: (rate(nginx_http_requests_total{status=~"5.."}[5m])
/ rate(nginx_http_requests_total[5m])) > 0.02
for: 2m
labels:
severity: critical
annotations:
summary: "5xx错误率过高"
description: "5xx比例超过2%,持续2分钟"
- alert: NginxHighP99Latency
expr: histogram_quantile(0.99, rate(nginx_http_request_duration_seconds_bucket[5m])) > 1
for: 5m
labels:
severity: high
annotations:
summary: "P99延迟过高"
description: "P99响应时间 > 1s 持续5分钟"
4)容量规划:压测与建模示例
4.1 压测(wrk)
# 安装wrk(示例)
yum install -y wrk
# 30秒压测,100并发
wrk -t4 -c100 -d30s http://127.0.0.1/
# 关注:Requests/sec、Latency、99%延迟
4.2 容量估算公式(示例)
- 单实例稳定吞吐:压测稳定 QPS = 2500
- 峰值流量预估:7000 QPS
- 安全冗余 30%:可用能力 = 2500 * 0.7 ≈ 1750 QPS
- 实例数估算:7000 / 1750 ≈ 4 台
5)日志与指标联动排错示例
5.1 发现5xx后定位异常URI
# 统计错误URI Top10
awk '$9 ~ /^5/ {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
5.2 关联上游失败
# 过滤upstream超时
grep -E "upstream timed out|connect\(\) failed" /var/log/nginx/error.log | tail -n 50
5.3 结合配置排查(示例说明)
- proxy_read_timeout 过低会导致上游超时。
- worker_connections 偏小会导致连接耗尽。
- keepalive 配置不当会影响连接复用率。
6)常见问题与排错清单
- 告警抖动:增加 for 时长与滑动窗口,设置维护窗口。
- 指标缺失:检查 exporter 端口、Prometheus targets 状态。
- 连接数爆满:核对 worker_processes 与 worker_connections,检查上游慢响应。
7)练习(动手实践)
1. 开启 stub_status 并用 curl 查看活动连接。
2. 安装 nginx-prometheus-exporter,Prometheus 采集指标。
3. 编写并触发一个 5xx 告警(可通过临时上游不可用模拟)。
4. 用 wrk 测试 QPS,计算单实例容量并给出扩容建议。
通过上述安装、监控、告警与压测实践,能够形成可落地的 Web 服务高可用监控体系,并支持精准容量规划与扩容决策。