1.
准备与前提
- 硬件/网络:确保管理机能访问台湾各节点控制台/API和SSH。
- 账号与权限:申请云厂商API Key、SSH密钥、LB(负载均衡)修改权限,以及镜像/快照权限。
- 工具:安装curl、jq、git、ansible(可选),并准备Prometheus-host机器与Grafana机器。
2.
指标与需要监控的对象
- 基础指标:CPU、内存、磁盘使用、IO、网络入/出、负载。
- 服务层:nginx/Tomcat响应时间、连接数、错误率、队列长度。
- 应用层:页面响应时间、数据库连接池使用、请求QPS。
3.
在每台云主机上安装Exporter
- 安装Node Exporter:在各节点运行:sudo useradd -rs /bin/false nodeusr; wget https://.../node_exporter.tar.gz; tar xzf ...; sudo cp node_exporter /usr/local/bin/; 编写systemd服务并启动。
- 应用Exporter:对nginx使用nginx-vts或stub_status导出器,对数据库使用相关exporter。
4.
搭建Prometheus抓取配置
- 编辑prometheus.yml示例:
scrape_configs: [{job_name: 'nodes', static_configs: [{targets: ['10.0.0.1:9100','10.0.0.2:9100'] }]}]。
- 启动Prometheus并验证:curl http://prometheus:9090/targets 查看目标是否UP。
5.
Grafana仪表盘搭建
- 导入模板:在Grafana中导入Node Exporter和NGINX/APP模板。
- 自定义面板:新增按地域/站点分组的面板,显示关键指标并设置时间区间为1m/5m/15m。
6.
设置阈值与告警策略
- Prometheus Alertmanager:创建规则文件rules.yml,如CPU连续5m>80%触发。
- 示例告警:- alert: HighCPU
expr: avg by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[1m]))*100 > 80
for: 5m
labels: {severity: "critical"}。
- 配置通知渠道(邮件、Slack、Webhook)。
7.
自动扩容思路与触发条件
- 触发条件举例:某站点CPU>75%且响应时间>1s且QPS>基线1.3倍,且持续5分钟。
- 扩容策略:先横向扩容(新增实例并加入LB),当节点数达上限再考虑纵向(调整规格)。
8.
实现自动扩容的两种方式
- 云厂商Auto-Scaling Group:优先使用云厂商的原生ASG,配置伸缩策略与健康检查。
- 自研脚本+API:如果无ASG,编写扩容脚本(Python/bash)调用云API创建实例、执行cloud-init并将实例注册到LB。
9.
示例:通过API自动扩容脚本流程
- 第一步(触发):Prometheus Alertmanager通过Webhook调用扩容接口。
- 第二步(创建):脚本接收请求后调用云API:curl -X POST "https://api.cloud/instances" -d '{"image":"ami-xx","size":"s2.small","ssh_key":"key1"}'。
- 第三步(初始化):等待实例SSH可连,使用ansible或ssh执行部署脚本(安装服务、注册监控agent)。
- 第四步(加入LB):调用LB API将新实例加入后端,并设置健康检查。
- 第五步(回收):当负载回落并稳定一段时间后,按策略移除空闲实例并回收快照。
10.
测试与演练步骤
- 灰度测试:先在测试集群触发扩容流程,使用ab/hey进行压测。
- 故障演练:模拟节点宕机,验证新节点能否自动替代并且监控报警正常。
- 回归:检查日志、监控历史图,确认无漏报或误扩。
11.
运维注意事项与安全
- 认证与权限:API Key要最小权限、密钥加密保存。
- 成本控制:设置扩容上限与冷却时间(cooldown),防止抖动导致频繁扩/缩。
- 日志与审计:记录扩容触发原因、时间、操作人(或系统)。
12.
总结与交付清单
- 交付项:Prometheus配置、Grafana面板、Alert规则、扩容脚本、LB注册脚本、Runbook文档。
- 交付验收:完成压测并达成SLA与成本目标后进入生产。
13.
Q1:如何判断阈值设置是否合理?
- 回答:先在无流量峰值期采集基线指标(7-14天),统计P50/P95/P99,设置阈值为P95*1.2或根据业务SLA设定,并通过压测验证。
14.
Q2:扩容后如何确保新实例能马上承担流量?
- 回答:使用健康检查与预热脚本(拉取依赖、加载缓存、暖up应用),仅在健康检查通过后将实例加入LB,确保零丢失切换。
15.
Q3:如何避免扩容风暴(抖动)?
- 回答:设置冷却时间、最小扩缩间隔、使用多指标联合触发(例如CPU+响应时间+QPS),并在Alertmanager层加入抑制规则与重复阈值。
来源:台湾站群云主机性能监控与自动扩容方案完整流程