1.1 说明:先规划监控架构:采集层(Node Exporter、Blackbox、自定义脚本)→ 存储与规则层(Prometheus)→ 可视化(Grafana)→ 告警(Alertmanager、Webhook/邮件/Telegram/SMS)。
1.2 步骤:a) 在可信的公网节点(推荐位于马来西亚或邻近地区)部署Prometheus与Alertmanager;b) 在每台VPS部署监控Agent(Node Exporter)并配置防火墙允许Prometheus抓取端口(默认9100);c) 如果VPS是动态IP,需准备DDNS机制或反向代理以保证Prom控件稳定识别目标。
1.3 要点:监控服务器建议使用静态IP或云托管实例,避免被动态IP影响抓取;敏感凭证使用密钥或Vault管理。
2.1 下载并安装Node Exporter:a) 登录VPS,sudo apt update && sudo apt install -y wget tar;b) 下载Node Exporter:wget https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*linux-amd64.tar.gz;c) 解压并移动可执行文件到/usr/local/bin/,创建systemd服务并启动(systemctl enable --now node_exporter)。
2.2 如果需要黑箱监测(HTTP/TCP/ICMP):在监控端部署blackbox_exporter,或使用Prometheus远程抓取目标并配置probes。
2.3 小提示:在VPS上开放9100端口到Prometheus服务器IP,或改用Prometheus Pushgateway/Agent模式避免公网端口暴露。
3.1 安装:在监控服务器上下载Prometheus,解压后编辑prometheus.yml;主要配置scrape_configs,添加每台VPS或使用服务发现(Consul、DNS-SD)。
3.2 示例配置要点:a) 静态目标:- job_name: 'vps-node' static_configs: - targets: ['vps1.example.com:9100','vps2.example.com:9100'];b) 对于动态IP,使用DNS记录(DDNS)或文件服务发现:file_sd_configs。
3.3 启动并验证:systemctl enable --now prometheus;访问http://your-monitor:9090/targets 确认targets为UP。
4.1 原因:VPS公网IP变化会导致Prometheus抓取失败,解决办法是将VPS注册到DDNS并让Prometheus通过域名抓取或使用文件发现。
4.2 DDNS自动更新脚本(示例流程):a) 在VPS上编写脚本获取公网IP(curl -s https://ifconfig.me);b) 调用DNS提供商API(如Cloudflare/Namecheap)更新A记录;c) 将脚本加入cron(每5分钟或按需要)。
4.3 使用Prometheus文件发现:a) 脚本更新一个json文件(/etc/prometheus/file_sd_vps.json)列出当前IP;b) Prometheus配置file_sd_configs读取该文件并自动更新targets,避免重启Prometheus。
5.1 在Prometheus中定义告警规则(示例):a) node_down:up{job="vps-node"} == 0 for 2m;b) cpu_high:avg by(instance)(rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.9 for 5m。
5.2 安装Alertmanager并配置receivers:a) 编辑alertmanager.yml,配置email、Slack、Telegram或Webhook;b) 使用routing树根据标签(severity、instance)分流告警;c) 启用抑制与分组策略以避免告警风暴。
5.3 测试流程:在Prometheus界面触发/模拟规则,确保Alertmanager收到了告警并能按预期发送通知(检查SMTP/Telegram token等)。
6.1 Grafana:安装Grafana并添加Prometheus数据源;导入或自建仪表盘展示主机可用性、CPU、内存、磁盘、网络流量与服务响应时间(黑盒探测)。
6.2 运维检查清单:a) 每周检查Prometheus targets状态;b) 定期审查告警历史与抑制策略;c) 测试DDNS脚本和证书(HTTPS)是否随IP变化时仍有效。
6.3 安全建议:使用防火墙只允许监控服务器访问Agent端口;使用TLS/基本认证或反向代理保护Prometheus与Grafana;对告警渠道使用单独Token并限制回调地址。
答:采用DDNS或Prometheus的file_sd(文件服务发现)。在VPS上运行脚本定期获取公网IP并调用DNS提供商API更新域名A记录;脚本同时写入Prometheus可读的文件(file_sd),Prometheus会自动重新加载targets,避免因IP变化导致抓取失败。另外可以考虑通过反向代理或公网跳板(静态IP)作为抓取代理。
答:优化方法包括:a) 在Prometheus规则中使用for延迟(如for: 5m)降低瞬时抖动;b) 对告警分组与抑制(Alertmanager)进行设置,合并相同实例短时间内的重复告警;c) 改善监测项准确性(比如用rate/avg替代瞬时值),并设置合理阈值和恢复条件。
答:在Alertmanager配置receivers:a) Telegram:使用bot token和chat_id,通过Webhook发送(配置http_configs或自写Webhook);b) 短信:接入第三方短信网关(Twilio/阿里云SMS),在Alertmanager的webhook中调用网关API;c) 值班系统(PagerDuty/OpsGenie):使用官方集成,配置service key并在Alertmanager中设置相应receiver。调试时先使用低优先级测试规则验证链路。