1.
准备与前提
说明:准备一台监控节点(推荐在国内外均有节点作相互验证),操作系统建议Ubuntu 20.04或CentOS 7/8;安装基本工具:curl、jq、ping、traceroute、mtr。
操作:sudo apt update && sudo apt install -y curl jq iputils-ping mtr traceroute
2.
获取Vultr日本机房IP清单(使用Vultr API自动发现)
步骤:在Vultr控制台生成API Key;用脚本拉取实例和网卡信息。示例命令:
export VULTR_KEY="你的APIKEY"
curl -s -H "Authorization: Bearer $VULTR_KEY" https://api.vultr.com/v2/instances | jq -r '.instances[] | select(.region=="ap-northeast") | .main_ip'
3.
自动同步IP到Prometheus静态目标(targets文件)
脚本(sync_targets.sh):
#!/bin/bash
VKEY=你的APIKEY;OUT=/etc/prometheus/targets/vultr_jp.json
curl -s -H "Authorization: Bearer $VKEY" https://api.vultr.com/v2/instances | jq -r '.instances[] | select(.region | contains("ap-northeast") ) | .main_ip' | jq -R -s -c 'split("\n")[:-1] | map({__address__: . + ":9115"})' > $OUT
说明:blackbox_exporter将针对每个IP的icmp/tcp探测;设置cron每5分钟运行同步脚本。
4.
部署blackbox_exporter用于ICMP/TCP探活
安装:在监控机上下载并运行blackbox_exporter;示例:
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.24.0/blackbox_exporter-0.24.0.linux-amd64.tar.gz
tar zxvf ... && sudo mv blackbox_exporter /usr/local/bin/
创建systemd:/etc/systemd/system/blackbox.service并启动:sudo systemctl daemon-reload && sudo systemctl enable --now blackbox.service
配置probes(blackbox.yml)添加icmp和tcp模块。
5.
Prometheus配置与抓取
编辑prometheus.yml,添加static file_sd配置:
- job_name: "vultr_jp_blackbox"
metrics_path: /probe
params: {module: [icmp]}
file_sd_configs: - files: ["/etc/prometheus/targets/vultr_jp.json"]
relabel_configs: - source_labels: [__address__] target_label: __param_target
- source_labels: [__param_target] target_label: instance
- target_label: __address__ replacement: 127.0.0.1:9115
说明:替换127.0.0.1为blackbox_exporter所在IP。
6.
编写报警规则(Alerting rules)
示例rule文件vultr_alerts.yml:
groups:
- name: vultr_ip_probes
rules:
- alert: VultrJPIcmpDown
expr: probe_success{job="vultr_jp_blackbox",module="icmp"} == 0
for: 2m
labels: {severity: critical, region: "ap-northeast"}
annotations: {summary: "Vultr JP IP {{ $labels.instance }} 探测失败", runbook: "请参考Runbook: traceroute & 控制台登录"}
说明:还可加入延迟/丢包阈值:probe_duration_seconds>0.5 或 probe_packet_loss>0.1。
7.
Alertmanager配置与通知路由
基本alertmanager.yml:
route: receiver: "team-slack"
receivers:
- name: "team-slack"
slack_configs: - api_url: "https://hooks.slack.com/services/..." channel: "#ops-alerts"
说明:配置邮件、PagerDuty或飞书Webhook;设置抑制(mute)规则并为不同severity设置不同路由。
8.
Grafana展示与告警(可选)
步骤:在Grafana添加Prometheus数据源;导入或创建Dashboard:展示probe_success、probe_duration_seconds、packet_loss、traceroute跳数等。
配置Grafana通知渠道:Slack/Email并创建阈值面板以补充Prometheus告警。
9.
故障定位与自动化脚本
常用排查步骤:1) 从监控节点ping/mtr目标:mtr -r -c 20
;2) traceroute -n ;3) 登录Vultr控制台检查实例状态和防火墙;4) 使用Vultr API查询防火墙组。
自动化示例:当告警触发时,运行脚本收集:ping -c 10, mtr -rwz -c 20, curl 控制台API 并上传到Central logging(ELK/Graylog)。
10.
运维准则与运行手册(Runbook)
建议:定义明确的SLA/SLO(如丢包>5%或RTT>200ms触发警报);定义处理流程(确认->定位->临时绕过->通知->恢复->事后报告);保存历史traceroute与BGP变动记录以用于长期分析。
示例恢复步骤:1. 确认是单IP还是全机房问题;2. 若仅实例,尝试重启实例或调整防火墙;3. 若大面积,联系Vultr支持并提交包含traceroute和监控截图的工单。
11.
问:如何判断是机房网络问题还是实例本身故障?
答:先从外部多点探测(国内、国外多节点)比对probe_success与延迟,若多点均失败且traceroute在相同跳点丢包,倾向为机房或上游网络;若只有单点失败且控制台可SSH,倾向实例软件防火墙或服务进程问题。
12.
问:如何自动将Vultr IP变更同步到Prometheus并避免漏监控?
答:使用前文sync_targets脚本配合cron(每5分钟),并在脚本中比较新旧targets文件差异,若有变化,触发Prometheus的/-/reload API(curl -X POST http://localhost:9090/-/reload)以即时生效;同时发送变更通知到Ops频道。
13.
问:常见告警误报如何减少?
答:调整探测策略(增加连续失败时间for、使用多点探测做冗余)、区分网络抖动阈值(如packet_loss小幅波动不报警)、在Alertmanager中对短期抖动添加抑制和分组,并在Grafana / Prometheus中设置智能阈值与故障窗口来减少误报。
来源:运维视角下vultr日本机房ip的监控与报警实践