1. 概述与准备
目的:实现对新加坡出口/入口的 CN2 IP 的实时检测并在异常时告警。
环境准备:一台位于新加坡或靠近新加坡的 Linux 服务器(建议 Ubuntu 22.04),确保有公网出站权限和 root/sudo 权限。
工具清单:Prometheus、blackbox_exporter、node_exporter、Grafana、Alertmanager、fping、mtr、smokeping(可选)、BGPalerter/ExaBGP(BGP 监控)。
2. 确定监控目标(CN2 IP 列表)
步骤 1:确认需要监控的目标 IP 或网段(来自你供应商的 CN2 下一跳、对端网关或客户关键服务 IP)。
步骤 2:将目标整理为 targets.txt 或 prometheus 静态配置,格式如:["1.2.3.4:icmp","5.6.7.8:tcp_443"]。
建议:包含同一路径的多点采样(例如多个 CN2 出口 IP)以便检测路径差异与丢包分布。
3. 部署 Prometheus 与 exporters(快速实践)
安装 Prometheus:下载官方二进制或使用 systemd,示例命令:wget https://.../prometheus.tar.gz && tar -xzf && sudo mv prometheus /usr/local/bin。
配置 prometheus.yml:加入 blackbox_exporter 的 job:
{ job_name: "cn2-probes", metrics_path: /probe, params: { module: ["icmp"] }, static_configs: [{ targets: ["1.2.3.4","5.6.7.8"] }], relabel_configs: ... }
启动并验证 http://localhost:9090/targets 可见目标。
4. 部署 blackbox_exporter 并配置 ICMP/TCP/HTTP 探针
下载并运行 blackbox_exporter。示例 systemd 单元:ExecStart=/usr/local/bin/blackbox_exporter --config.file=/etc/blackbox.yml。
blackbox.yml 示例模块:
modules:
icmp:
prober: icmp
timeout: 5s
tcp_connect:
prober: tcp
timeout: 5s
根据需要添加 tcp/ssl/http 验证(检查 443 握手/证书)。
5. 定义 Prometheus 告警规则(关键阈值示例)
步骤:在 rules.yml 添加告警规则,例如:
- alert: CN2HighLatency
expr: probe_duration_seconds{job="cn2-probes"} > 0.5
for: 2m
labels: { severity: "critical" }
annotations: { summary: "CN2 延迟异常", description: "目标 {{ $labels.instance }} 延迟 {{ $value }}s" }
另例:丢包 > 3%:
expr: probe_success[5m] < 0.97 (或根据实际采样调整)
将 rules.yml 引入 prometheus.yml 并重载。
6. 告警路由与通知(Alertmanager)
安装 Alertmanager 并配置 receivers,如邮件/Slack/Webhook。示例 alertmanager.yml:
route: { receiver: "team_slack", group_wait: 30s }
receivers:
- name: "team_slack"
slack_configs:
- api_url: "https://hooks.slack.com/services/XXX"
channel: "#ops-cn2"
在 Prometheus 中配置 alertmanager url,测试告警通过模拟规则触发或使用 amtool send。
7. 使用 MTR/Smokeping 做深度诊断与历史记录
即时排查:在监控服务器上安装 mtr(sudo apt install mtr-tiny),运行 mtr -rwzbc 100 1.2.3.4 保存结果。
自动采集:写脚本定时(cron)运行 mtr --report-cycles 并将结果写入 /var/log/mtr-cn2.log,或推到 ELK。示例 cron:*/5 * * * * /usr/local/bin/mtr-collect.sh。
Smokeping:用于长期 RTT/丢包曲线,部署并配置 target 指向 CN2 IP,帮助发现间歇性丢包。
8. BGP 级监控(检测路径变更与绕路)
方案 A:使用 BGPalerter 或 ExaBGP 订阅 BGP 更新,检测 CN2 下一跳变化或前缀被劫持。
方案 B:使用外部 BGP 数据源(RouteViews、RIPE RIS)或 BGPStream API,定期比对本地观测与全局视图。
实施:部署 Bird/ExaBGP 与对端建立会话或订阅 bgp update 并将异常事件通过 Prometheus pushgateway 或 webhook 送入 Alertmanager。
9. 可视化(Grafana 仪表盘与模板)
安装 Grafana 并添加 Prometheus 数据源。
建议面板:延迟(probe_duration_seconds)、成功率(probe_success)、丢包率(按分钟聚合)、MTR 路径变化次数、BGP 路由变更计数。
模板化:使用变量 instance 与 job 做下拉,可按目标 IP、地域(新加坡)或链路分组筛选。启用告警面板以在 Grafana 中也收到通知。
10. 自动化与运维建议
部署多点探测:在新加坡内部署至少 2 个探针实例(不同机房/ASN)以排除单点误报。
频率:ICMP 基线 30s,TCP/HTTP 可 60–300s。过高频率会触发供应商限流。
日志与保留:保留至少 30 天的采样数据以便回溯。将关键快照(mtr、smokeping)归档到对象存储。
11. Q1: 如何避免监控误报(比如临时网络抖动被判定为故障)?
答:使用“for”阈值(Prometheus alert for: 2m)要求异常持续一段时间再报警;多探针交叉验证(不同机房同时异常才报警);设置分级告警(warning -> critical),并结合丢包比例与延迟同时触发规则来降低误报概率。
12. Q2: 如果发现 CN2 路径跳数或下一跳频繁变更,应如何排查?
答:先使用 mtr 或 traceroute 保存多次结果,定位变更发生时间点;结合 BGP 监控查看是否有路由更新或同一前缀的 AS_PATH 改变;联系运营商提供路由公告与链路维护日志,必要时提供 pcap/时间序列证据。
13. Q3: 新加坡节点需要什么最小资源来稳定运行以上监控栈?
答:建议最小配置:2 vCPU、4GB 内存、50GB 磁盘(Prometheus 的数据保留按采样决定),若使用 Grafana/Alertmanager 共用一台机可稍增至 8GB 内存。对于高频 probe 或大量 targets,应横向扩容 probe 实例并集中抓取。
来源:监控与告警实现新加坡cn2 ip 网络健康状态的持续检测