17.11.6 监控平台运维与变更管理
监控平台运维与变更管理的目标是保证监控系统稳定、可控演进与可追溯。平台应纳入统一配置管理、变更审批、容量评估与回滚机制,确保采集链路、告警链路、展示链路在变更期间可用,并对关键组件的版本、配置与依赖保持清晰基线。
原理草图(变更影响面与链路):
运维基线与配置管理(含示例):
- 资产清单:Prometheus、Alertmanager、Grafana、Exporter、存储后端、服务发现组件及版本。
- 配置仓库:所有配置纳入 Git,包含 rules、alert、route、dashboard JSON、通知模板。
- 基线校验:发布前做语法校验与规则评估。
- 权限与审计:对 Grafana/Alertmanager/仓库操作做最小权限与审计。
示例:配置仓库结构与规则校验(Prometheus 内置工具)
# 仓库结构建议
tree -L 2 /opt/monitoring-repo
# /opt/monitoring-repo
# ├── prometheus
# │ ├── prometheus.yml
# │ └── rules
# ├── alertmanager
# │ └── alertmanager.yml
# └── grafana
# └── dashboards
# 安装 promtool(以官方二进制为例)
curl -LO https://github.com/prometheus/prometheus/releases/download/v2.50.0/prometheus-2.50.0.linux-amd64.tar.gz
tar xf prometheus-2.50.0.linux-amd64.tar.gz
sudo cp prometheus-2.50.0.linux-amd64/promtool /usr/local/bin/
# 规则与配置校验
promtool check config /opt/monitoring-repo/prometheus/prometheus.yml
promtool check rules /opt/monitoring-repo/prometheus/rules/*.yml
# 预期效果:输出 "SUCCESS: ..." 或列出具体错误行
变更流程规范(含示例配置变更):
- 变更评估:范围、影响面、回滚方案、验证指标。
- 分级审批:高风险变更双人复核。
- 变更窗口:业务低峰期执行,留观察期。
- 回滚策略:保留旧配置与旧版本。
示例:新增告警规则与灰度发布
# 文件:/opt/monitoring-repo/prometheus/rules/node-cpu.yml
groups:
- name: node-cpu
rules:
- alert: NodeCPUHigh
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 10m
labels:
severity: warning
team: ops
annotations:
summary: "CPU使用率高: {{ $labels.instance }}"
description: "CPU使用率超过85%持续10分钟"
灰度发布命令(以 systemd + rsync 为例):
# 1) 仅更新 10% 实例
rsync -av /opt/monitoring-repo/prometheus/ prom01:/etc/prometheus/
ssh prom01 'promtool check config /etc/prometheus/prometheus.yml && systemctl reload prometheus'
# 2) 观察关键指标(采集成功率、告警量)
curl -s http://prom01:9090/api/v1/query \
--data-urlencode 'query=rate(prometheus_tsdb_head_samples_appended_total[5m])'
# 3) 通过后再全量发布
for h in prom02 prom03; do
rsync -av /opt/monitoring-repo/prometheus/ $h:/etc/prometheus/
ssh $h 'promtool check config /etc/prometheus/prometheus.yml && systemctl reload prometheus'
done
上线与验证(含关键命令与指标):
# 验证目标是否健康
curl -s http://prom01:9090/api/v1/targets | jq '.data.activeTargets[] | {job: .labels.job, health: .health}'
# 验证告警是否正常计算
curl -s http://prom01:9090/api/v1/rules | jq '.data.groups[].rules[] | {name: .name, state: .state}'
平台运维要点(含容量与性能排查):
- 关注样本写入速率、序列数、块大小、磁盘利用率、压缩率、查询耗时与内存占用。
- 规则优化:清理无效规则与重复指标,控制 label 维度爆炸。
- 备份与恢复:定期备份规则、配置与关键仪表盘;存储后端快照与演练恢复。
- 可用性:Prometheus/Alertmanager 多实例部署与通知通道主备。
示例:容量与性能关键指标查询
# TSDB 写入速率
curl -s http://prom01:9090/api/v1/query \
--data-urlencode 'query=rate(prometheus_tsdb_head_samples_appended_total[5m])'
# 当前序列数
curl -s http://prom01:9090/api/v1/query \
--data-urlencode 'query=prometheus_tsdb_head_series'
# 内存占用与查询耗时
curl -s http://prom01:9090/api/v1/query \
--data-urlencode 'query=prometheus_engine_query_duration_seconds_sum'
示例:Grafana 仪表盘备份与恢复
# 导出所有仪表盘(需要 API Token)
export GRAFANA_URL="http://grafana:3000"
export GRAFANA_TOKEN="YOUR_TOKEN"
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" \
"$GRAFANA_URL/api/search?type=dash-db" | jq -r '.[].uid' > /tmp/uids.txt
mkdir -p /backup/grafana
while read uid; do
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" \
"$GRAFANA_URL/api/dashboards/uid/$uid" \
> /backup/grafana/$uid.json
done < /tmp/uids.txt
# 恢复示例(单个)
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" \
-H "Content-Type: application/json" \
-X POST "$GRAFANA_URL/api/dashboards/db" \
-d @/backup/grafana/<uid>.json
变更后的持续监控与复盘:
- 观察期内重点监测告警量、误报率、采集失败率。
- 记录变更结果与问题清单,沉淀标准化模板与风险库。
- 定期复盘重大变更与故障,推动规则与流程持续改进。
常见风险与防范(含排错命令):
- 规则误触发导致告警风暴:使用抑制、静默与分级告警,先在预发验证。
- 维度膨胀导致资源耗尽:限制 label 维度、过滤高基数标签。
- 存储扩容不及时:建立容量预警,提前扩容与保留策略。
- 通知链路失效:多通道冗余,定期演练。
排错示例:
# 1) Prometheus 采集失败排查
curl -s http://prom01:9090/api/v1/targets | jq '.data.activeTargets[] | select(.health!="up") | .scrapeUrl'
# 2) Alertmanager 发送失败排查
journalctl -u alertmanager -n 200 --no-pager | tail -n 50
# 3) 规则计算错误排查
promtool test rules /opt/monitoring-repo/prometheus/rules/node-cpu.yml /opt/monitoring-repo/prometheus/tests/node-cpu.test.yml
安装与升级示例(Prometheus)
# 下载并安装新版本
NEW_VER=2.50.0
curl -LO https://github.com/prometheus/prometheus/releases/download/v${NEW_VER}/prometheus-${NEW_VER}.linux-amd64.tar.gz
tar xf prometheus-${NEW_VER}.linux-amd64.tar.gz
sudo systemctl stop prometheus
sudo cp prometheus-${NEW_VER}.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-${NEW_VER}.linux-amd64/promtool /usr/local/bin/
sudo systemctl start prometheus
sudo systemctl status prometheus --no-pager
# 回滚方案:保留旧二进制,异常时替换回旧版本并重启
练习:
1. 在预发环境新增一条 NodeCPUHigh 告警规则,验证 promtool 通过后灰度发布到单台生产实例。记录观察期内告警量变化。
2. 人为制造 1 个高基数字段(如 label=pod_uid),观察 prometheus_tsdb_head_series 变化并给出优化方案。
3. 导出 Grafana 仪表盘并在另一实例恢复,验证图表与告警链接可用。