1. 确认目标机(1c1g)有root/sudo权限和公网出口;
1. 在控制节点准备一台资源较充足的管理主机(可用作Prometheus/Grafana/AlertManager);
1. 确认云厂商提供API或CLI(若没有则准备SSH脚本替代),获取API TOKEN、镜像ID、规格ID、网络ID及负载均衡器API。
2. apt/yum安装:下载node_exporter二进制并建立systemd服务:
2. 示例命令:wget https://.../node_exporter && tar xzf && sudo mv node_exporter /usr/local/bin/;创建 /etc/systemd/system/node_exporter.service,内容参考官方;然后 sudo systemctl enable --now node_exporter。
2. 在agent上开启必要端口(默认9100),若有防火墙需允许管理Prometheus服务器访问。
3. 下载Prometheus并解压,编辑prometheus.yml,加入scrape_configs:targets写入1c1g实例的IP:9100;示例:- job_name: 'nodes' static_configs: - targets: ['10.0.0.5:9100']。
3. 启动Prometheus:systemd或后台运行,访问9090确认能抓取metrics并测试查询 cpu_seconds_total、node_memory_MemAvailable_bytes 等。
4. 在管理节点安装Grafana,添加Prometheus为数据源;
4. 创建面板:CPU使用率(rate(node_cpu_seconds_total[1m]))、内存可用百分比、负载平均值、Swap使用、进程数和网络出入流量。
4. 设置阈值颜色和时间窗口,便于快速判断1c1g资源瓶颈。
5. 在Prometheus中新增alerting规则文件:如HighCPU: expr = (100 - (avg by(instance)(irate(node_cpu_seconds_total{mode="idle"}[2m])) *100)) > 70 for 2m。
5. 配置Alertmanager,将路由指向一个webhook URL(管理节点上运行的接收脚本)。确保告警持续时间、去抖动和分级(critical/warning)。
6. 在管理节点写一个HTTP接收器(可用python -m flask或简单的nc+bash),接收Alertmanager的POST后触发扩容脚本;
6. 扩容脚本示例步骤(伪代码):1) 调用云API创建新实例(curl -X POST https://API_ENDPOINT -H "Authorization: Bearer $TOKEN" -d '{"image":"IMG","flavor":"1c1g","network":"NET"}');2) 等待实例启动并取得IP;3) 在负载均衡器上注册新节点(另一个API调用);4) 在Prometheus的targets或服务发现中动态加入新节点或使用Consul等服务发现自动识别。
6. 脚本需包含重试、幂等检查(避免重复创建)和日志输出,建议加入速率限制避免持续扩容。
7. 实现回收:定义低负载窗口(如CPU<20%且持续10分钟)后执行缩容脚本,先从LB摘除实例并优雅关闭服务,再调用删除API;
7. 安全策略:设置最大实例数上限、每日/每小时扩容频率限制、费用报警;对创建实例进行标签管理便于计费统计。
7. 对1c1g优化:使用轻量服务(nginx代替Apache)、开启swap文件(sudo fallocate -l 1G /swapfile && mkswap && swapon),调整oom_score_adj以防关键进程被杀。
8. 问:在1c1g机器上,优先监控哪些指标以快速判断是否需要扩容?
8. 答:优先监控:1) CPU利用率(1m/5m平均),2) 可用内存与Swap使用,3) load average(尤其单核环境需看1min),4) 平均响应时间/请求队列长度,5) 垃圾回收或线程数异常。将这些指标组合成告警规则更可靠。
9. 问:如果香港云厂商不提供API或受限,如何实现“自动扩容”?
9. 答:可采用“半自动”方案:Alert触发时发送通知到运维群(Webhook->Slack/Telegram),并执行准备好的SSH脚本在预留的管理主机上快速克隆镜像并启动新实例(需要预配镜像和网络脚本)。另一方案是使用本地虚拟化或容器编排在一台更大机器上横向扩展容器,而不是新建VM。
10. 问:自动扩容会导致账单不可控,有哪些策略控制费用?
10. 答:设置扩容上限和冷却时间、按需预算报警、按时间段(业务低峰)只允许缩容,不允许扩容;使用预留实例或更便宜的规格组合(小实例+缓存层)降低单次扩容成本,并在扩容决策中加入成本权重。