
在开始之前,确认你的tbc欧洲服务器可被监控服务器访问(开放SSH/监控端口、VPN或内网直连)。准备一台稳定的监控节点(推荐Linux Ubuntu 20.04+),并确认有sudo权限、固定公网IP或内网可见地址。
建议在监控节点上预装:curl, wget, tar, git;为时间一致性配置NTP:sudo apt install -y chrony && sudo systemctl enable --now chrony。
推荐使用Prometheus + Grafana + Alertmanager作为核心(开源、灵活、社区多)。额外使用node_exporter采集主机指标,blackbox_exporter做外部连通性/HTTP检查。若需要商业SaaS可选Datadog或NewRelic。
典型架构:被监控服务器(node_exporter/blackbox_exporter) → Prometheus采集 → Grafana展示 → Alertmanager推送报警(Slack/Email/Telegram/Webhook)。
在目标服务器执行(以最新版本号替换):
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvf node_exporter-*.tar.gz && sudo useradd --no-create-home --shell /bin/false node_exporter && sudo cp node_exporter-*/node_exporter /usr/local/bin/
创建systemd服务 /etc/systemd/system/node_exporter.service,内容:
[Unit] Description=Node Exporter [Service] User=node_exporter ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=default.target
然后 sudo systemctl daemon-reload && sudo systemctl enable --now node_exporter。默认监听9100端口。
下载并安装:wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.24.0/blackbox_exporter-*.tar.gz && 解压拷贝到/usr/local/bin,创建systemd服务。
若需ICMP ping,给二进制赋予cap:sudo setcap cap_net_raw+ep /usr/local/bin/blackbox_exporter。
在blackbox_exporter.yml中定义modules(http_2xx、tcp_connect、icmp等),启动后默认端口9115。
在监控服务器安装Prometheus(可用包或二进制)。主要修改prometheus.yml,增加scrape_configs,例如:
scrape_configs: - job_name: 'tbc-eu-servers' static_configs: - targets: ['10.0.0.5:9100','10.0.0.6:9100']
增加blackbox抓取:
- job_name: 'blackbox-http' metrics_path: /probe params: { module: [http_2xx] } static_configs: - targets: ['https://tbc-eu.example.com'] 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
启动Prometheus并访问 http://监控服务器:9090/ 确认抓取状态。
在Prometheus的rules文件中定义alert,例如CPU高、内存不足、磁盘空间低、网络丢包:
groups: - name: tbc_eu_rules rules: - alert: HighCPU expr: rate(node_cpu_seconds_total{mode!="idle"}[5m]) > 0.7 for: 5m labels: {severity: critical} annotations: {summary: "CPU高于70% {{ $labels.instance }}"}
同理添加DiskSpaceLow(node_filesystem_avail_bytes / node_filesystem_size_bytes < 0.15)和PingFail(probe_success == 0)等规则。
安装Alertmanager,编辑alertmanager.yml配置接收者(receivers)和路由(route)。示例添加Slack和邮件:
receivers: - name: 'slack' slack_configs: - api_url: 'https://hooks.slack.com/services/XXX/YYY/ZZZ' channel: '#alerts'
或者Telegram使用bot token与chat_id通过webhook,或使用邮件smtp配置。将Prometheus的alerting.rules中的alerts发送到Alertmanager(prometheus.yml中alerting: alertmanagers: - static_configs: - targets: ['127.0.0.1:9093'])。
安装Grafana,登录后在Data Sources中添加Prometheus(URL: http://prometheus:9090)。导入已有dashboard模板(例如node exporter full dashboard ID)。
创建自定义面板:CPU负载、内存使用、磁盘可用、网络带宽、probe_success(连通性)、请求延迟。为每个面板设置合适的时间范围(5m/1h)与告警阈值(Grafana也支持直接报警)。
通过直接触发测试告警:使用Prometheus的alertmanager API或在Prometheus UI上暂时修改表达式使其触发,或通过curl向Alertmanager发送测试消息。
验证:报警是否到达Slack/邮件/Telegram,报警内容是否包含实例、摘要和恢复信息,并演练报警升级(重试/告警抑制/抑制恢复)。
问:Prometheus/Grafana显示时间与tbc服务器不一致,如何处理?
答:确保所有节点同步NTP(chrony或ntp),并设置正确时区(timedatectl set-timezone Europe/Amsterdam 等)。Prometheus和Grafana读取系统时间,统一时区与NTP后图表和报警时间将一致。
问:当被监控服务器很多,Prometheus单机抓取压力大,有何方案?
答:采用Prometheus联邦(federation)或使用远程写入(remote_write)到长期存储(Thanos、Cortex)。对抓取密集度高的区域使用分布式Prometheus实例,中心Prometheus负责聚合关键指标和告警。
问:报警频繁且误报多,有什么优化建议?
答:使用for参数延迟报警(例如for:5m),对瞬时波动使用rate/avg平滑,基于历史数据设定阈值,使用抑制(inhibit_rules)避免同一事件多渠道报警,并建立故障工单与恢复自动化脚本减少噪音。