1. 初始准备与安全基线
- 建议先用SSH密钥登录:本地执行 ssh-keygen && ssh-copy-id user@your-vps-ip。
- 更新系统:Debian/Ubuntu 执行 sudo apt update && sudo apt -y upgrade;CentOS/RHEL 执行 sudo yum update -y。
- 开启防火墙并只放行需要端口:例如 UFW:sudo ufw default deny incoming && sudo ufw allow OpenSSH && sudo ufw enable。
2. 安装并配置 node_exporter(Prometheus 节点指标采集)
- 下载并启动:wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-*.tar.gz,解压并将二进制放 /usr/local/bin/。
- 建 systemd 服务 /etc/systemd/system/node_exporter.service(内容:ExecStart=/usr/local/bin/node_exporter)然后 sudo systemctl daemon-reload && sudo systemctl enable --now node_exporter。
- 在防火墙开放端口 9100:sudo ufw allow 9100。
3. 部署 Prometheus(抓取规则与告警)
- 下载并解压 Prometheus,编辑 prometheus.yml,加入 node_exporter 抓取项:job_name: 'node' static_configs: - targets: ['your-vps-ip:9100']。
- 配置告警规则文件 rules.yml(例如 cpu > 85% 连续5m 触发),在 prometheus.yml 引入规则并启动 Prometheus 服务。
- 示例告警规则:- alert: HighCPU usage: expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85 for: 5m。
4. 安装 Grafana 并制作面板
- 安装:Debian 系统按官方仓库步骤 apt install -y grafana,启动并允许 3000 端口。
- 在 Grafana 添加 Prometheus 数据源(URL: http://your-prometheus:9090),导入常用 dashboard(社区ID或自定义)。
- 创建 Dashboard 展示 CPU、内存、磁盘、网络、磁盘 I/O 等;设置单值、图表与阈值颜色便于观察。
5. 配置 Alertmanager(告警路由与通知)
- 安装 Alertmanager 并创建 alertmanager.yml,配置接收器:email(SMTP),Slack(webhook),PagerDuty 或 webhook(自定义)。
- 示例邮件配置:smtp_smarthost: 'smtp.example.com:587' smtp_from: 'alert@yourdomain' smtp_auth_username: 'user' smtp_auth_password: 'pwd'。
- 在 Prometheus 配置中指向 Alertmanager(alerting: alertmanagers: - static_configs: - targets: ['localhost:9093'])。
6. 轻量监控与进程守护(monit / systemd + fail2ban)
- 安装 monit:sudo apt install monit,编辑 /etc/monit/monitrc 添加进程和端口检查(nginx、mysql、docker 等),并启用 httpd 状态页。
- 安装 fail2ban:sudo apt install fail2ban,复制 jail.local 模板并启用 sshd,配置邮件通知(destemail)。
- 配置 systemd 自动重启关键服务:在 service 单元加入 Restart=on-failure、RestartSec=5s。
7. 日志管理与磁盘告警
- 启用 logrotate:在 /etc/logrotate.d/ 下为应用写 rotate 配置,防止日志占满磁盘。
- 磁盘告警脚本例:创建 /usr/local/bin/disk_alert.sh:if [ $(df / -h | awk 'NR==2 {print $5}' | sed 's/%//') -gt 80 ]; then echo "Disk >80%" | mail -s "Disk alert" admin@domain; fi。
- 用 cron 每 10 分钟调用:*/10 * * * * /usr/local/bin/disk_alert.sh。
8. 外部可用性探测与 SLA 告警
- 使用 UptimeRobot 或 Pingdom 做外部探测:配置 HTTP(S) / TCP 探测,设置 1-5 分钟间隔。
- 当外部探测失败时,结合 Prometheus Alertmanager 或平台本身的通知策略(短信、电话、邮件)。
- 推荐在多个区域部署探测与告警,避免单点误报。
9. 告警策略与阈值建议
- 设定分级告警:警告(warn)(例如 CPU>70% 10m)和严重(critical)(CPU>90% 5m)。
- 对临时尖峰使用 for: 参数防止抖动告警(例如 for: 5m)。
- 告警内容包含主机名、IP、时间、当前值与历史 1h/24h 值,便于判断趋势。
10. 自动化修复与运行手册
- 对可自动化的问题配置 playbook 或脚本:如磁盘清理脚本、服务 restart 脚本,配合 Alertmanager webhook 触发自动化。
- 建立应急运维手册(包含登录方式、重要端口、重启顺序、回滚步骤与联系人)。
- 定期(每月)演练告警流程,确保联系人、渠道有效。
11. 性能与成本优化建议
- 优先监控 I/O 与网络延迟,磁盘 IOPS 问题比 CPU 更易影响数据库。
- 根据监控数据调整 VPS 规格或使用分离存储(Block Storage)减少成本。
- 开启自动快照并保留策略,告警触发时可快速恢复。
12. 常见问答一
问:为什么要同时使用内部 Prometheus 和外部 Uptime 平台?
答:内部 Prometheus 关注细粒度指标(进程、I/O)用于诊断;外部 Uptime 提供从互联网上的可达性视角,二者结合可区分网络/端口/应用故障来源。
13. 常见问答二
问:Prometheus 报警太多如何减少误报?
答:增加 for 持续时间、使用多维度(instance+job)聚合、在规则中加入避峰窗口(工作时段)、并配置抑制(inhibit rules)避免相关重复告警。
14. 常见问答三
问:VPS 被入侵后如何快速响应并利用监控辅助溯源?
答:立即隔离主机(防火墙 drop 所有外部流量),保留日志(/var/log、audit)、导出网络连接(ss -tunap)、使用监控历史数据(CPU/网络突增)定位时间点并配合 fail2ban、iptables 阻断可疑 IP,最后从备份恢复并修补漏洞。