可观测性平台搭建:Prometheus + Grafana + Loki 实战
背景与问题界定 某互联网团队在微服务化后的第一年陷入了"监控碎片化"困境:Metrics 用 Prometheus 单机版自建,每台节点单独部署 node_exporter;Logging 使用 ELK 技术栈,但 Elasticsearch 集群索引膨胀到 15TB,平均查询延迟超过 20 秒;链路追踪使用 Jaeger,但与 Metrics 和 Logging 之间完全割裂,排查一个问题需要同时打开三个不同的 Dashboard。最让人崩溃的是某次线上故障——大量 503 错误由某个服务导致,但运维花了 40 分钟在三个界面之间反复来回跳转才定位到根因:一个被错误配置的 Redis 连接池引发 GC 暂停,最终触发了超时雪崩。可观测性的三个支柱不能各自为战,必须在一个统一平面上实现 Signals 关联。 目标拆解与工程约束 统一 Signal 关联:任一服务实例的 Metrics、Logs 和 Traces 必须能够通过统一的 Labels(namespace、pod、container、trace_id)关联在一起,支持从 Metrics 异常直接跳转到对应时间窗口的 Log 和 Trace 详情。 低成本日志存储:每天 200GB+ 的日志增长必须被控制,采用 LOKI 的"只索引 Metadata 而不全文索引"设计模式,结合日志压缩归档策略,将单日存储成本相比 ELK 降低 60% 以上。 大规模 Metrics 聚合:集群规模超过 500 个 Target,Prometheus 单实例无法承载后需要平滑扩展为 Thanos 或 Cortex 的全局视图架构,支持长达 12 个月的指标历史数据查询。 高可用与自愈:监控系统本身不能成为单点故障——Prometheus 需要 RWO(每个可用区独立实例)架构,Grafana 必须多副本部署并共享告警状态,Loki 的 Distributor 和 Querier 组件必须无状态化。 方案设计 架构选型确定"Prometheus + Thanos + Grafana + Loki + Tempo"作为统一可观测性技术栈。Metrics 路径:每个集群部署一个 Prometheus 实例(配置为 --shard 分片),通过 Thanos Sidecar 将数据上传到对象存储(兼容 S3),Thanos Query 提供全局 PromQL 查询入口: ...