1.
监控目标与指标(定义与优先级)
- 目标:保证香港站群(多个VPS/机房/云实例)7x24稳定运行,快速定位故障并预测容量瓶颈。
- 核心指标:CPU使用率、内存使用、磁盘I/O、磁盘使用率、网络吞吐与丢包、连接数(TCP)、进程/服务存活、响应时延(HTTP/TCP)、错误率(5xx/4xx)、业务QPS/延迟。
- 优先级设定:业务关键路径(HTTP/API)高频采样(15s),主机资源中频(30-60s),日志按需流式采集。
2.
环境准备与标签体系
- 准备:在每台服务器安装基本工具(curl, jq, net-tools, mtr)。
- 标签设计:site=hk、env=prod/stage、role=web/db/cache、instance=<主机名>。这些标签在Prometheus relabel或Exporter配置里统一下发,便于筛选和聚合。例:node_exporter启动时通过systemd Environment=NODE_LABELS="site=hk,env=prod".
3.
指标采集 —— Prometheus + node_exporter 部署
- 安装node_exporter(Linux示例):
1) 下载:curl -LO https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.*-amd64.tar.gz
2) 解压并放 /usr/local/bin,添加 systemd:/etc/systemd/system/node_exporter.service(ExecStart=/usr/local/bin/node_exporter --collector.textfile.directory=/var/lib/node_exporter/textfile_collector)
3) 启动并开启自启动:systemctl daemon-reload; systemctl enable --now node_exporter。
- Prometheus scrape 示例(prometheus.yml):
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['hk-web-01:9100','hk-db-01:9100']
relabel_configs:
- source_labels: [__address__]; target_label: instance
4.
高可用与长时序存储(Thanos/远端存储)
- 方案:Prometheus做抓取与短期存储(14-30天),使用Thanos Sidecar + 对象存储(S3/MinIO)实现长存与跨实例查询。
- 步骤简要:部署Thanos Sidecar(与Prometheus同机),配置upload.s3.bucket与endpoint,部署Thanos Querier + Store。这样可以做历史趋势回溯和跨站点对比。
5.
日志收集与结构化(EFK/ELK)
- 部署Filebeat/Fluentd收集应用日志并打标签(fields.site: hk)。
- Elasticsearch存储,Kibana做可视化。若要轻量可用OpenSearch或Hosted服务。
- 示例Filebeat配置片段:
filebeat.inputs:
- type: log; paths: ['/var/log/nginx/*.log']; fields: {site: hk, env: prod}
6.
告警策略与通知链路(务必简明)
- 告警分级:P1(服务不可用)、P2(性能下降达到SLA)、P3(资源阈值告警)。
- Prometheus Alertmanager 配置路由:route匹配site=hk → send to group "hk-oncall"→notify via Slack/Email/SMS/电话。
- 示例告警规则(cpu):
- alert: HighCpuUsage
expr: avg by(instance)(rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.85
for: 5m
labels: severity: "P2"
annotations: summary, runbook(包含故障排查步骤)。
7.
可观测性Dashboard(Grafana)实操
- 在Grafana创建数据源Prometheus(URL指向Thanos Querier或Prometheus)。
- 导入常用Dashboard模板(node-exporter-full 或 nginx metrics)。
- 使用变量(site、env、instance)实现快速筛选。通过Grafana API自动下发:curl -H "Authorization: Bearer
" -X POST /api/dashboards/db -d @dashboard.json。
8.
合成监控与外部连通性检测
- 合成监控(synthetic)使用Selenium或k6定期从外部(中国大陆/香港/全球)发起真实请求,检测DNS解析、TLS握手、首字节时间(TTFB)与完整事务成功率。
- 对网络质量重点监测:使用ping、mtr周期性任务汇报延时分布与丢包率,存入Prometheus(使用blackbox_exporter + prometheus-blackbox-exporter)。
9.
数据管道与保留策略
- 抓取间隔建议:关键服务15s、主机指标30-60s、合成与外部采样1-5min。
- 存储策略:Prometheus本地保留14天,Thanos/远端存储保留1年+,索引与归档分离以节约成本。
- 聚合:使用Prometheus recording rules 计算5m/1h的聚合供仪表板和告警使用,避免实时计算耗资源。
10.
异常检测与趋势预测(实操流程)
- 数据准备:导出Prometheus中相关时间序列为CSV(通过Prometheus HTTP API),按site和role分组。
- 简单统计异常检测:使用滚动均值+标准差(3σ)识别突变:当指标瞬间超过rolling_mean+3*rolling_std且持续for阈值时触发告警。可在Prometheus中用increase()/offset()实现简单规则。
- 趋势预测(步骤):
1) 导出最近90天指标(1m或5m颗粒)。
2) 使用Facebook Prophet或statsmodels(ARIMA)进行建模:Python示例
- pip install prophet pandas
- df = pd.read_csv('metric.csv'); m=Prophet(); m.fit(df); future=m.make_future_dataframe(periods=30); forecast=m.predict(future);
3) 将预测结果导入Grafana或定期生成报告,结合业务QPS进行容量规划。
11.
演练与自动化恢复(RCA与Runbook)
- 为常见故障编写Runbook(如高CPU、磁盘满、网络丢包、证书过期),并在告警注释中附上执行步骤与回滚命令。
- 自动化:使用Ansible/SSH执行紧急脚本(如清理缓存、临时扩容、重启服务),并在告警中提供"自动修复"按钮(通过CI/CD或Ops工具触发)。
12.
持续优化与回顾(SLA/容量评估)
- 定期(每月/每季度)回顾:告警噪音率、误报率、平均恢复时间(MTTR)与容量利用率。
- 根据预测结果计划扩容窗口(水平扩容优先),并演练流量切换以验证扩容有效性。
13.
问:如何在香港站群环境中最小化网络抖动影响?
- 答:实施多出口与多ISP策略、局部缓存(CDN/缓存层)、合成监控定点探测、配置BGP或云厂商加速服务;同时在监控中增加网络抖动阈值和丢包告警(例如mtr丢包>2%持续5min),并在Grafana上展示延时分位数(p50/p95/p99)。
14.
问:我该如何把Prometheus数据用于长期趋势预测?
- 答:导出Prometheus指标(HTTP API /api/v1/query_range)到CSV或直接写入TSDB(InfluxDB/TSDB),用Python+Prophet或ARIMA建模;推荐周期为90天以上的样本,使用daily/weekly季节性项并在模型中加入业务事件标注(发布/促销)以提高预测准确度。
15.
问:当某台香港节点频繁触发告警时,我应如何排查?
- 答:按顺序排查:1) 查看近期告警与Runbook;2) 登录主机检查top/iostat/netstat;3) 查看应用日志(按site标签筛选),使用mtr排查网络路径;4) 在Prometheus查看相关指标的历史趋势(是否突增/突降);5) 若本机资源正常,检查上游依赖(DB/缓存/外部API)并做短时间流量回退或流量分流。
来源:长期运行监控香港站群服务器稳定性 数据分析与趋势预测