首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >系统规划与管理师视角:亿级QPS下高可用可观测性体系从零构建实践

系统规划与管理师视角:亿级QPS下高可用可观测性体系从零构建实践

原创
作者头像
97java-xyz
发布2026-08-15 12:00:34
发布2026-08-15 12:00:34
630
举报

系统规划与管理师视角:亿级QPS下高可用可观测性体系从零构建实践

引言:当业务增长成为运维的"噩梦"

2023年双11大促期间,我所在的电商平台订单创建峰值突破800万QPS。在备战阶段,我们面临三个核心痛点:

  1. 监控断层:基础设施监控(CPU/内存)与业务监控(下单成功率)割裂,故障定位平均耗时12分钟
  2. 日志爆炸:单日日志量超200TB,Elasticsearch集群频繁出现写入拒绝
  3. 根因难溯:分布式调用链采样率不足1%,排查慢请求如同"大海捞针"

作为系统规划与管理师,我主导设计了一套成本可控、渐进式演进的可观测性体系。本文将分享从0到1的建设方法论,涵盖架构选型、技术博弈、成本控制三大维度。

第一章:可观测性三大支柱的"黄金搭配"

1.1 监控(Metrics)——Prometheus + Thanos 的多集群方案

选型博弈:Zabbix vs Prometheus

维度

Zabbix

Prometheus

数据模型

时序数据库

多维Label模型

查询语言

类SQL

PromQL(灵活聚合)

云原生

需适配

原生支持K8s服务发现

集群规模

单点瓶颈

支持联邦+远程存储

我们最终选择Prometheus + Thanos Receiver架构:

代码语言:javascript
复制
# Thanos Receiver配置片段
receiver:
  default_tenant_id: "default-tenant"
  tenants:
    - name: "production"
      endpoints:
        - http://prometheus-prod:9090/api/v1/write
    - name: "staging"
      endpoints:
        - http://prometheus-staging:9090/api/v1/write
compactor:
  retention_resolution_raw: 30d      # 原始数据保留30天
  retention_resolution_5m: 180d      # 降采样数据保留180天
  retention_resolution_1h: 5y        # 年同比数据保留5年

关键设计

  • 高基数问题:通过relabel_config丢弃高基数Label(如pod_ip),将__name__与核心Label组合成唯一标识,减少60% 的时序数
  • 多集群聚合:Thanos Sidecar模式采集K8s集群指标,Receiver模式接收非K8s系统(如Redis、MySQL)指标
  • 长期存储:对象存储(MinIO/COS)成本仅为SSD的1/10,冷热数据分层

1.2 日志(Logging)—— ClickHouse 替换 Elasticsearch 的降本实践

痛点:ES热数据节点磁盘IOPS经常打满,月成本超30万

替代方案:ClickHouse(MergeTree引擎)

代码语言:javascript
复制
-- 日志表设计
CREATE TABLE otel_logs (
    timestamp DateTime64(9) CODEC(Delta, ZSTD(1)),
    trace_id String CODEC(ZSTD(3)),
    span_id String CODEC(ZSTD(3)),
    severity_text LowCardinality(String),
    body String CODEC(ZSTD(9)),
    resource_attributes Map(LowCardinality(String), String),
    -- 分区与排序
    INDEX idx_trace trace_id TYPE bloom_filter GRANULARITY 4
) ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(timestamp)
ORDER BY (severity_text, timestamp)
TTL timestamp + INTERVAL 30 DAY
SETTINGS index_granularity = 8192;

收益

  • 写入吞吐提升3倍(ES:15w/s → CH:45w/s)
  • 存储压缩比8:1(ES原始200TB → CH压缩后25TB)
  • 查询速度(含body模糊匹配)从8秒降至800ms

1.3 链路追踪(Tracing)—— 自适应采样 + 持续分析

采样策略演进

阶段

采样率

问题

初期

固定1%

异常链路漏采

中期

头部采样(错误全采)

高QPS下错误数依旧巨大

当前

尾部采样 + 概率采样

平衡成本与质量

Jaeger + OpenTelemetry Collector配置

代码语言:javascript
复制
processors:
  probabilistic_sampler:
    sampling_percentage: 5   # 正常流量5%
  tail_sampling:
    decision_wait: 10s
    policies:
      - name: error-policy
        type: status_code
        status_code: { status_codes: [ERROR] }
      - name: slow-policy
        type: latency
        latency: { threshold_ms: 500 }
      - name: priority-policy
        type: probabilistic
        probabilistic: { sampling_percentage: 100 }

持续分析(Profiling) 接入Pyroscope,定位到P99延迟来自Golang GC频繁(每次STW达12ms),通过调整GOGC=200降低GC频率,P99从380ms降至220ms

第二章:技术博弈——开源方案 vs 商业方案

2.1 决策矩阵

需求

开源方案

商业方案

我们的选择

APM

SkyWalking/Pinpoint

Datadog/ARMS

自研Agent(基于SkyWalking二次开发)

日志

ELK/ClickHouse

LogService

ClickHouse(成本优势明显)

告警

AlertManager

云监控

AlertManager + 自研去重收敛模块

大屏

Grafana

DataV

Grafana(JSON as Code管理)

2.2 开源二次开发的"坑"与"路"

SkyWalking改造点

  1. 协议扩展:支持公司内部RPC框架(基于Dubbo改造),增加biz_env标签用于环境隔离
  2. 存储优化:将MySQL存储替换为TiDB,解决历史数据归档慢的问题
  3. 告警增强:集成飞书机器人,支持动态阈值(基于历史7天同期数据计算基线)

踩坑实录

  • OOM频发:Agent缓存Span过多,调整buffer_size=2000,启用堆外内存
  • 时钟漂移:分布式环境下调用链时间戳不准,引入NTP同步+Batched Span修正

第三章:从"人肉运维"到"自动驾驶"——SLO驱动的新运维模式

3.1 SLO设计原则

我们为核心服务定义4个黄金信号

指标

SLO目标

错误预算

可用性(Availability)

99.99%

52.6分钟/季度

延迟(Latency P99)

≤200ms

-

错误率(Error Rate)

≤0.1%

-

饱和度(Saturation)

CPU≤70%

-

错误预算策略

  • 预算消耗50% → 告警(Warning)
  • 预算消耗80% → 告警(Critical)+ 自动降级(非核心功能关闭)

3.2 根因分析(RCA)自动化实践

基于决策树的故障定位

代码语言:javascript
复制
故障现象:订单创建成功率下降
    ├── 依赖服务(库存/支付/风控)? 
    │   ├── 库存服务RT升高 → 检查DB连接池
    │   └── 支付服务错误码500 → 检查支付网关证书
    ├── 自身资源瓶颈?
    │   ├── GC频繁 → 分析Heap Dump
    │   └── 线程池满 → 检查业务逻辑锁
    └── 网络/基础设施?
        ├── 机房专线丢包 → 切换备用链路
        └── 宿主机Steal Time高 → 迁移Pod

实现方式:将运维经验编码为Prometheus Rules + Python脚本,自动标注故障根因,MTTR从25分钟降至6分钟

第四章:成本优化——可观测性不该"贵不可攀"

4.1 数据冷热分层

数据层级

存储介质

保留周期

压缩策略

热(实时查询)

SSD

7天

ZSTD(1)

温(近线查询)

HDD

30天

ZSTD(6)

冷(归档审计)

对象存储

1年

Parquet + ZSTD(9)

4.2 指标"降维打击"

高基数治理三板斧

  1. 删除冗余Label:如kube_pod_info中的pod_ip(已有pod_name唯一标识)
  2. 聚合降采样:1分钟原始数据 → 5分钟平均值(保留max/min用于告警)
  3. Recording Rules预聚合:将高频查询(如qps by service)提前计算,查询性能提升10倍

4.3 日志"冷热分离"查询优化

  • 热日志:ClickHouse按天分区,最近3天保留在本地SSD
  • 冷日志:使用S3存储,查询时通过分布式表自动路由
  • 索引优化:只对trace_idservice_name建Bloom Filter索引,body字段仅存错误日志(≥ERROR级别)

第五章:未来演进——AIOps的"理性"落地

5.1 异常检测从"阈值"到"AI"

动态阈值算法选型

算法

适用场景

准确率

误报率

3-Sigma

正态分布指标

90%

5%

Seasonal ESD

周期性指标(如日活)

95%

2%

Prophet

强趋势+季节性

98%

1%

我们最终选择Prophet + 人工确认闭环,告警准确率从65% 提升至92%

5.2 故障预测的"有限"尝试

  • 磁盘预测:基于LSTM预测磁盘使用率,提前7天预警扩容
  • 流量预测:使用ARIMA预测大促流量峰值,精准扩容(误差≤5%)
  • 因果推断:通过Granger Causality Test分析指标关联,辅助根因定位

教训:AI不是银弹,初期投入需控制,先解决确定性运维问题(如自动扩缩容、自动切流)。

总结:可观测性建设的"三字经"

  1. :先保证核心链路(订单/支付)的监控覆盖率100%,再扩展边缘服务
  2. :开源优先,ClickHouse替代ES,Thanos替代InfluxDB,年节省成本60%
  3. :SLO驱动决策,AI辅助根因,但始终保留人工"一键切换"能力

最终成果

  • 故障平均发现时间(MTTD):3.2分钟0.8分钟
  • 故障平均恢复时间(MTTR):25分钟6分钟
  • 可观测性总成本占比IT预算:8%3.2%

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 系统规划与管理师视角:亿级QPS下高可用可观测性体系从零构建实践
    • 引言:当业务增长成为运维的"噩梦"
    • 第一章:可观测性三大支柱的"黄金搭配"
      • 1.1 监控(Metrics)——Prometheus + Thanos 的多集群方案
      • 1.2 日志(Logging)—— ClickHouse 替换 Elasticsearch 的降本实践
      • 1.3 链路追踪(Tracing)—— 自适应采样 + 持续分析
    • 第二章:技术博弈——开源方案 vs 商业方案
      • 2.1 决策矩阵
      • 2.2 开源二次开发的"坑"与"路"
    • 第三章:从"人肉运维"到"自动驾驶"——SLO驱动的新运维模式
      • 3.1 SLO设计原则
      • 3.2 根因分析(RCA)自动化实践
    • 第四章:成本优化——可观测性不该"贵不可攀"
      • 4.1 数据冷热分层
      • 4.2 指标"降维打击"
      • 4.3 日志"冷热分离"查询优化
    • 第五章:未来演进——AIOps的"理性"落地
      • 5.1 异常检测从"阈值"到"AI"
      • 5.2 故障预测的"有限"尝试
    • 总结:可观测性建设的"三字经"
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档