1.
总体架构与目标设定
目标:建立覆盖可用性、性能、日志与合规的自动化监控体系,目标RTO/RPO与SLA在部署前确认。
小分段:列出站点清单(域名、IP、服务类型、机房/云区域),确认监控边界与权限账号(只读/运维)。
2.
选型与组件清单
推荐组件:Prometheus + node_exporter、Grafana、Alertmanager、Fluent Bit/Logstash、Elasticsearch、Filebeat、Blackbox Exporter、Synthetic监测(Synthetics或自建Playwright脚本)。
小分段:备选:Zabbix用于传统设备,Opsgenie/PagerDuty或Slack作为告警通道,Ansible或Terraform用于自动化运维。
3.
基础设施准备
在台湾机房或近台云区部署:准备监控节点(建议最少2个Prometheus HA,2个Alertmanager HA,1个Grafana)。
小分段:系统要求:Linux (Ubuntu/CentOS),开放端口:9090,3000,9093,设置时区为Asia/Taipei,时钟同步使用chrony/ntp。
4.
Prometheus与Exporter部署步骤
步骤1:在监控节点安装Prometheus二进制或用Docker:docker run -d --name prometheus -p 9090:9090 -v /etc/prometheus:/etc/prometheus prom/prometheus。
小分段:步骤2:部署node_exporter:docker run -d --name node_exporter -p 9100:9100 prom/node-exporter。配置Prometheus scrape_configs,示例:
- job_name: 'node' static_configs: - targets: ['10.0.0.1:9100']
5.
Blackbox与合成监测配置
部署blackbox_exporter用于HTTP/HTTPS/ICMP探测。步骤:docker run -d --name blackbox -p 9115:9115 prom/blackbox-exporter。
小分段:在Prometheus中新增job:
- job_name: 'http_probe' metrics_path: /probe params: module: [http_2xx] static_configs: - targets: ['https://site-tw.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
6.
日志收集与聚合实操
推荐使用Fluent Bit采集容器/主机日志并输出到Elasticsearch或Logstash。示例配置:inputs: tail path /var/log/nginx/access.log parser nginx。
小分段:部署步骤:1) 安装Fluent Bit 2) 配置输出到Elasticsearch 3) 在Kibana/Grafana中创建索引模式并建立日志告警。
7.
Grafana仪表盘与可视化
安装Grafana:docker run -d -p 3000:3000 grafana/grafana。添加Prometheus为数据源,导入社区Dashboard或自建:站点可用性、响应时间、错误率、CPU/内存。
小分段:使用变量(datasource、instance、site)以便复用,保存并分享Dashboard JSON以版本化管理。
8.
告警策略与Alertmanager配置
在Prometheus定义alerting rules,例如高延迟或错误率:
ALERT HighRequestLatency IF histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le,instance)) > 1。
小分段:Alertmanager配置route与receiver,配置滑动窗口(group_wait、group_interval、repeat_interval)并对接Slack/PagerDuty/Webhook。
9.
告警分级与值班流程落地
制定S1/S2/S3等级标准,明确响应时限与升级链条(页面 -> 电话 -> 经理)。
小分段:在Alertmanager中基于标签routing_key进行分流:site=tw走台湾值班组,severity=critical走电话与SMS。
10.
自动化修复(Self-healing)实现步骤
用Ansible/脚本实现常见故障自动化修复示例:当某服务连续3次健康检查失败,调用Ansible playbook重启服务。
小分段:Alertmanager通过Webhook触发CI/CD或运行脚本。示例Webhook处理脚本接收alert后执行:ansible-playbook -i inventory/hosts restart-service.yml --extra-vars "target=site-tw-web01"
11.
运行手册与Runbook编写要点
为每个告警编写Runbook:触发条件、初步诊断命令、临时修复命令、长期根因排查步骤、回溯指令。
小分段:示例命令:检查进程 ps aux | grep nginx; 查看日志 tail -n 200 /var/log/nginx/error.log; 重启服务 systemctl restart nginx。
12.
Kubernetes环境下的监控与自愈
部署Prometheus Operator + kube-state-metrics + node-exporter。设置liveness/readiness探针并配置HPA。
小分段:当Pod OOM或CrashLoop时,结合K8s事件与Prometheus告警触发自动扩容或回滚Deployment:kubectl rollout undo deployment/web --namespace=prod。
13.
演练与SLA评估
定期进行故障演练(每季度),模拟数据库宕机、负载洪峰、跨机房链路断开,评估告警准确性与响应流程。
小分段:记录演练报告,调整告警阈值、抑制误报、优化自动化脚本。
14.
运维工具与权限控制
为运维账号建立最小权限策略,使用Vault或Secrets Manager集中管理API密钥与凭证。启用Grafana/Prometheus的RBAC与审计。
小分段:示例:Prometheus读取权限仅允许抓取端点;Grafana只给值班账号Dashboard查看和告警确认权限。
15.
监控复原与容量规划
持续记录历史指标用于容量规划,配置Prometheus远端存储(Thanos/Long-term storage)保证指标长期可追溯。
小分段:按月评估资源使用趋势,提前触发扩容工单或自动扩容策略。
16.
部署检查清单(上线前必须项)
1) 各站点probe覆盖率达到100%。 2) 告警规则已覆盖关键SLA项。 3) Runbook完成并验证。 4) 自动化修复脚本在预演环境通过。
小分段:上线后72小时内加强观察并设置更低阈值用于捕捉潜在问题。
17.
问:如何快速定位台湾站群中单点站点的可用性下降?
回答步骤:1) 查看Blackbox/合成监测Probe的失败详情(Prometheus target/探测HTTP状态码)。2) 在Grafana查看该站点的响应时间与错误率趋势。3) 检查该站点主机的node_exporter指标(CPU/内存/网络)。4) 查看Nginx/应用日志(Fluent Bit/Kibana)定位错误码与堆栈。5) 若为进程异常,执行systemctl status/重启或触发Ansible修复。
18.
问:当Prometheus告警频繁抖动(flapping)怎么办?
回答步骤:1) 检查告警表达式是否过于敏感,改用rate()或avg_over_time()平滑指标。2) 在Prometheus规则中增加for字段(例如for: 5m)避免瞬时噪声。3) 使用Alertmanager的抑制规则(mute)对已知维护窗口抑制告警。4) 检查采集间隔 scrape_interval 是否合理。
19.
问:如何实现从告警到自动修复的端到端流程?
回答步骤:1) 在Prometheus定义明确的告警规则并打tag。2) Alertmanager将标签路由到Webhook。3) Webhook服务验证告警并调用Ansible/Terraform或K8s API执行修复Playbook(如重启服务、扩容Pod)。4) 修复后Webhook向Alertmanager发送已解决事件,或让Prometheus指标回稳自动关闭告警。5) 全流程需记录审计日志并在Runbook中说明回滚步骤。
来源:自动化监控体系保障台湾站群日常运维与故障响应速度