1. 准备与前提
- 选择台湾机房实例(例如:台北/台中),推荐Ubuntu 20.04或22.04。
- 确保拥有root或sudo权限,端口80/443/9090/3000需在防火墙打开(可后续用ufw管理)。
- 准备一个公网IP或域名(用于Grafana/Alertmanager的访问与Let's Encrypt证书)。
2. 安装基础工具
- 更新系统:sudo apt update && sudo apt upgrade -y。
- 安装常用工具:sudo apt install -y wget curl tar git ufw nginx certbot python3-certbot-nginx。
- 建议设定时区:sudo timedatectl set-timezone Asia/Taipei。
3. 部署 node_exporter(被监控端)
- 在每台要监控的
台湾服务器上执行:下载并解压 node_exporter(从官方release)。
- 创建 systemd 服务文件 /etc/systemd/system/node_exporter.service,内容示例:ExecStart=/usr/local/bin/node_exporter。
- 启动并设置自启:sudo systemctl daemon-reload && sudo systemctl enable --now node_exporter,验证: curl http://localhost:9100/metrics。
4. 部署 Prometheus(采集端)
- 在监控服务器(可在同台湾机房或集中机房)下载Prometheus并解压到 /opt/prometheus。
- 编辑 /opt/prometheus/prometheus.yml,添加被监控目标:- job_name: 'taiwan-servers' static_configs: - targets: ['10.0.0.2:9100','10.0.0.3:9100'] labels: {region: "taiwan"}。
- 创建 systemd unit 并启动:sudo systemctl enable --now prometheus,访问 http://your-monitor-ip:9090/targets 验证采集状态。
5. Prometheus 配置示例(关键字段)
- scrape_interval: 15s(根据需求调整),scrape_timeout: 10s。
- job 配置示例:static_configs 列出 node_exporter 的 IP:9100;可以使用反向代理或Consul/Kubernetes做自动发现。
- 保存并重启Prometheus:sudo systemctl restart prometheus。
6. 部署 Grafana(可视化)
- 安装:sudo apt install -y apt-transport-https software-properties-common && wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - && add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" && sudo apt update && sudo apt install -y grafana。
- 启动并设置自启:sudo systemctl enable --now grafana-server。
- 登录 http://your-monitor-ip:3000(默认 admin/admin),添加Prometheus为数据源(URL http://localhost:9090)。
7. Alertmanager 与通知通道
- 下载并解压 Alertmanager,配置 /etc/alertmanager/config.yml,示例通知:email、Slack webhook、Telegram Bot。
- systemd 配置并启动 Alertmanager,确保 Prometheus 的 alerting 配置指向 Alertmanager 地址。
- 示例Telegram通知:receivers: - name: 'telegram' webhook_configs: - url: 'https://api.telegram.org/bot
/sendMessage'(通常通过外部脚本或Alertmanager webhook中间件实现更灵活推送)。
8. 常用告警规则示例(Prometheus RULES)
- node_down: ALERT NodeDown IF up == 0 FOR 1m LABELS {severity="critical"}。
- cpu_high: ALERT HighCPU IF (100 - avg by(instance)(irate(node_cpu_seconds_total{mode="idle"}[5m]))*100) > 80 FOR 5m LABELS {severity="warning"}。
- disk_full: ALERT DiskAlmostFull IF (node_filesystem_avail_bytes{fstype!~"tmpfs|devtmpfs"} / node_filesystem_size_bytes{fstype!~"tmpfs|devtmpfs"}) < 0.1 FOR 10m。
9. 报警规则部署与测试步骤
- 将 alert rules 存为 /etc/prometheus/rules/taiwan_rules.yml,并在 prometheus.yml 中引用 rule_files。
- 重启Prometheus:sudo systemctl restart prometheus,然后在 Prometheus → Alerts 查看规则状态并触发条件做测试(例如:暂时停止 node_exporter 或使用类似 stress 命令制造CPU负载)。
- 在Alertmanager UI检查接收到的告警并校验通知实际到达目标(邮件/Telegram/Slack)。
10. 生产环境注意事项与最佳实践
- 使用region标签(如 region="taiwan")在Prometheus target上区分台湾节点,便于过滤与分组。
- 为Prometheus、Grafana、Alertmanager启用HTTPS(使用NGINX反向代理 + Let's Encrypt)。
- 对重要告警设置接收人分级与抑制(silences)规则,避免告警风暴,配置告警抑制(inhibit_rules)避免冗余通知。
11. 安全与运维建议
- 限制Prometheus/Grafana/Alertmanager的访问(VPN或CIDR白名单)。
- 定期备份Prometheus数据目录、Grafana dashboard JSON、Alertmanager配置。
- 使用自动化脚本(Ansible/Terraform)批量部署 node_exporter 与配置,便于横向扩展台湾机房的监控覆盖。
12. 问:如何在台湾多地域(如台北、台中)区分并只针对某个区域告警?
答:在每个 node_exporter 的 target 中添加 label(例如 labels: {region:"taipei"} 或 region:"taichung"),Prometheus 可以基于 label 撰写 alert 规则或在Grafana中以region过滤视图,例如:expr = node_filesystem_avail_bytes{region="taipei"} / node_filesystem_size_bytes{region="taipei"} < 0.1。
13. 问:如果要把告警发到台湾团队的LINE/Telegram群,如何配置?
答:推荐两种方式:一,使用Alertmanager的 webhook 配合一个中继服务(将Webhook转换为LINE/Telegram API);二,直接使用第三方通知集成(Grafana/Alertmanager Plugin)。对于Telegram,创建Bot获取token并用chat_id发送POST到https://api.telegram.org/bot/sendMessage。务必在中继层实现重试与鉴权。
14. 问:如何验证告警策略在生产环境不会误报?
答:先在测试环境或使用 Prometheus 的 Alertmanager/Prometheus UI 做模拟触发(模拟高CPU、停服务),调整 FOR 时长与阈值;使用历史监控数据回放(Prometheus recording rules)评估规则命中率;配置抑制与分级(severity)并设置维护窗口以避免计划内变动触发告警。
来源:台湾服务器检测app部署指南 从安装到告警规则的一站式说明